这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

统计信息管理函数

此部分包含用于收集和管理表数据统计信息的 Vertica 函数。

1 - ANALYZE_EXTERNAL_ROW_COUNT

计算外部表中的确切行数。 ANALYZE_EXTERNAL_ROW_COUNT 在后台运行。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

ANALYZE_EXTERNAL_ROW_COUNT ('[[[database.]schema.]table‑name ]')

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

table‑name
指定要计算精确行计数的外部表的名称。如果提供空字符串,Vertica 会计算所有外部表的精确行数。

特权

外部表上的任何 INSERT/UPDATE/DELETE 权限

示例

计算所有外部表的精确行计数:

=> SELECT ANALYZE_EXTERNAL_ROW_COUNT('');

计算表 loader_rejects 的精确行计数:

=> SELECT ANALYZE_EXTERNAL_ROW_COUNT('loader_rejects');

另请参阅

2 - ANALYZE_STATISTICS

从存储与指定表相关联的投影的所有节点上收集并聚合数据示例和存储信息。函数跳过复杂数据类型列。默认情况下,Vertica 会根据资源限制分析单个查询执行计划中的多个列。此类多列分析有助于实现以下目标:

  • 减少计划执行延迟。

  • 加快对相对较小且包含多列的表进行分析。

Vertica 将统计信息写入数据库编录。查询优化器将使用这些收集的数据来创建查询计划。没有这些数据,查询优化器会假设数据值均匀分布,所有投影的存储使用量相等。

您可以使用 CTRL+C 或调用 INTERRUPT_STATEMENT 取消统计信息收集。

ANALYZE_STATISTICS 为函数 ANALYZE_HISTOGRAM 的别名,不再进行记录。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

ANALYZE_STATISTICS ('[[[database.]schema.]table]' [, 'column‑list' [, percent ]]  )

返回

0 - 成功

如果发生错误,请参阅 vertica.log 以了解详细信息。

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

在其上收集数据的表。如果设置为空字符串,Vertica 将收集所有数据库表及其投影的统计信息。
column‑list
table 中以逗号分隔的列的列表,通常为谓词列。Vertica 将数据收集范围缩小到指定的列。不支持复杂类型列。

如果通过添加列并以默认值或其他值填充其内容等方式对表进行更改,则在此列上调用 ANALYZE_STATISTICS 以获取最新统计信息。

percent
一个介于 0 和 100 之间的浮点值,指定从磁盘读取数据的百分比(不是要分析的数据量)。如果省略此实参,Vertica 会将百分比设置为 10。

如果分析超过 10% 的磁盘空间,处理时间会成比例地增加,但是得到的采样精确度较高。

特权

非超级用户:

  • 架构:USAGE

  • 表:INSERT、DELETE 或 UPDATE 之一

限制

  • Vertica 在本地和全局临时表上支持 ANALYZE_STATISTICS。在这两种情况下,只能获取使用选项 ON COMMIT PRESERVE ROWS 创建的表的统计信息。否则,Vertica 会在提交当前事务时删除表内容,因此没有可用于分析的表数据。Vertica 不从以下投影中收集任何统计数据: * 实时聚合和 Top-K 投影 * 定义为表达式中包含 SQL 函数的投影
  • Vertica 不收集任何关于 ARRAY、SET 或 ROW 类型的列的统计信息。

示例

请参阅收集表统计信息

另请参阅

ANALYZE_STATISTICS_PARTITION

3 - ANALYZE_STATISTICS_PARTITION

收集并聚合指定表中一系列分区的数据示例和存储信息。Vertica 将收集的统计信息写入数据库编录。

您可以使用 CTRL+C 或元函数 INTERRUPT_STATEMENT 取消统计信息收集。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

ANALYZE_STATISTICS_PARTITION ('[[database.]schema.]table', 'min‑range‑value','max‑range‑value' [, 'column‑list' [, percent ]] )

返回

0:成功

如果发生错误,请参阅 vertica.log 以了解详细信息。

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

在其上收集数据的表。
min‑range‑value
max‑range‑value
要分析的分区键的最小值和最大值,其中 min‑range‑value 必须≤ max‑range‑值。要分析一个分区,min‑range‑valuemax‑range‑value 必须相等。
column‑list
table 中以逗号分隔的列的列表,通常为谓词列。Vertica 将数据收集范围缩小到指定的列。
percent
介于 0 和 100 之间的浮点值,指定从磁盘读取数据的百分比(不是要分析的数据量)。如果省略此实参,Vertica 会将百分比设置为 10。

如果分析超过 10% 的磁盘空间,处理时间会成比例地增加,但是得到的采样精确度较高。

特权

非超级用户:

  • 架构:USAGE

  • 表:INSERT、DELETE 或 UPDATE 之一

要求和限制

ANALYZE_STATISTICS_PARTITION 具有以下要求和限制:

  • 该表必须进行分区,并且不能包含未分区的数据。

  • 表分区表达式必须指定单个列。支持以下表达式:

    • 仅指定列的表达式,即对所有列值进行分区。例如:

      PARTITION BY ship_date GROUP BY CALENDAR_HIERARCHY_DAY(ship_date, 2, 2)
      
    • 如果列是 DATETIMESTAMP/TIMESTAMPTZ,则分区表达式可以指定支持的日期/时间函数,该函数会返回该列或其任何部分,例如月份或年份。例如,以下分区表达式指定对列 order_date 的年份部分进行分区:

      PARTITION BY YEAR(order_date)
      
    • 该表达式对列执行加法或减法。例如:

      PARTITION BY YEAR(order_date) -1
      
  • 表分区表达式不能将指定列强制转换为另一种数据类型。

  • Vertica 不从以下投影中收集任何统计数据:

    • 实时聚合投影和 Top-K 投影

    • 定义这些投影可以在表达式中包含 SQL 函数

示例

请参阅收集分区统计信息

4 - DROP_EXTERNAL_ROW_COUNT

移除使用 ANALYZE_EXTERNAL_ROW_COUNT 编译的外部表行计数统计信息。 DROP_EXTERNAL_ROW_COUNT 在后台运行。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

DROP_EXTERNAL_ROW_COUNT ('[[[database.]schema.]table‑name ]');

参数

架构

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

table‑name
要移除精确行计数的外部表。如果指定空字符串,Vertica 会删除所有外部表的精确行计数统计信息。

特权

  • 对表的 INSERT/UPDATE/DELETE 权限

  • 包含表的架构上的 USAGE 权限

示例

删除外部表 loader_rejects 的行计数统计信息:

=> SELECT DROP_EXTERNAL_ROW_COUNT('loader_rejects');

另请参阅

收集数据库统计信息

5 - DROP_STATISTICS

移除先前由 ANALYZE_STATISTICS 生成的数据库预测的统计数据。删除此数据后,Vertica 优化器会使用默认统计信息创建查询计划。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

DROP_STATISTICS ('[[[database.]schema.]table]' [, 'category' [, '[column‑list]'] )

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

要删除统计信息的表。如果设置为空字符串,Vertica 将删除所有数据库表及其投影的统计信息。
类别
要删除的统计信息类别,为以下之一:
  • ALL (默认值):删除所有统计信息,包括直方图和行计数。

  • HISTOGRAMS:仅删除直方图。保留行计数统计信息。

column‑list
table 中以逗号分隔的列的列表,通常为谓词列。Vertica 将删除的统计信息范围缩小到指定的列。如果省略此参数或提供空字符串,Vertica 会删除所有列的统计信息。

特权

非超级用户:

  • 架构:USAGE

  • 表:INSERT、DELETE 或 UPDATE 之一

示例

删除表 store.store_sales_fact 的所有基础统计信息:

=> SELECT DROP_STATISTICS('store.store_sales_fact');
 DROP_STATISTICS
-----------------
               0
(1 row)

删除所有表投影的统计信息:

=> SELECT DROP_STATISTICS ('');
 DROP_STATISTICS
-----------------
               0
(1 row)

另请参阅

DROP_STATISTICS_PARTITION

6 - DROP_STATISTICS_PARTITION

移除先前由 ANALYZE_STATISTICS_PARTITION 生成的数据库预测的统计数据。删除此数据后,Vertica 优化器会使用表级统计信息(如果可用)或默认统计信息创建查询计划。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

DROP_STATISTICS_PARTITION ('[[database.]schema.]table', '[min‑range‑value]', '[max‑range‑value]' [, category [, '[column‑list]'] )

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

要删除统计信息的表。
min‑range‑value max‑range‑value
要删除统计信息的分区键的最小值和最大值,其中 min-range-value 必须 ≤ max‑range‑value。如果您为这两个参数提供空字符串,Vertica 会删除此表或指定列的所有分区级统计信息。
类别
要删除的统计信息类别,为以下之一:
  • BASE (默认值):删除直方图和行计数(最小/最大列值、直方图)。

  • HISTOGRAMS:仅删除直方图。保留行计数统计信息。

  • ALL:删除所有统计信息。

column‑list
table 中以逗号分隔的列的列表,通常为谓词列。Vertica 将删除的统计信息范围缩小到指定的列。如果省略此参数或提供空字符串,Vertica 会删除所有列的统计信息。

特权

非超级用户:

  • 架构:USAGE

  • 表:INSERT、DELETE 或 UPDATE 之一

另请参阅

DROP_STATISTICS

7 - EXPORT_STATISTICS

从先前通过 ANALYZE_STATISTICS 收集的数据生成 XML 格式的统计信息。导出统计信息之前,请调用 ANALYZE_STATISTICS 以收集最新数据。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

稳定

语法

EXPORT_STATISTICS ('[ filename ]' [,'table‑spec' [,'column[,...]']])

参数

filename
指定在何处写入生成的 XML。如果 filename 已存在,EXPORT_STATISTICS 会覆盖它。如果您提供的是空字符串,则 EXPORT_STATISTICS 会将 XML 写入标准输出。
table‑spec
指定要在其上导出投影统计信息的表:
  
[[database.]schema.]table
  

默认架构为 public。如果指定一个数据库,它必须是当前数据库。

如果省略 table‑spec 或将其设置为空字符串,Vertica 会导出数据库的所有统计信息。

table‑spec 中的列名称,通常为谓词列。可以指定多个逗号分隔列。Vertica 将导出的统计信息范围缩小到指定的列。

超级用户

限制

EXPORT_STATISTICS 不导出 LONG 数据类型列的统计信息。

示例

以下语句将 VMart 示例数据库的统计信息导出到文件:

=> SELECT EXPORT_STATISTICS('/opt/vertica/examples/VMart_Schema/vmart_stats.xml');
        EXPORT_STATISTICS
-----------------------------------
Statistics exported successfully
(1 row)

下一个语句从名为 food 的表中导出单列(“价格 (price)”)的统计信息:

=> SELECT EXPORT_STATISTICS('/opt/vertica/examples/VMart_Schema/price.xml', 'food.price');
        EXPORT_STATISTICS
-----------------------------------
Statistics exported successfully
(1 row)

另请参阅

8 - EXPORT_STATISTICS_PARTITION

从先前通过 ANALYZE_STATISTICS_PARTITION 收集的数据生成 XML 格式的分区级统计信息。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

稳定

语法

EXPORT_STATISTICS_PARTITION ('[ filename ]', 'table‑spec', 'min‑range‑value','max‑range‑value' [, 'column[,...]' )

参数

filename
指定在何处写入生成的 XML。如果 filename 已经存在,EXPORT_STATISTICS_PARTITION 会覆盖它。如果您提供的是空字符串,则函数会写入标准输出。
table‑spec
指定要在其上导出分区统计信息的表:
  
[[database.]schema.]table
  

默认架构为 public。如果指定一个数据库,它必须是当前数据库。

min‑range‑value, max‑range‑value
要导出统计信息的分区键的最小值和最大值,其中 min-range-value 必须 ≤ max‑range‑value
table 中的列名称,通常为谓词列。可以指定多个逗号分隔列。Vertica 将导出的统计信息范围缩小到指定的列。

超级用户

限制

EXPORT_STATISTICS_PARTITION 不导出 LONG 数据类型列的统计信息。

另请参阅

EXPORT_STATISTICS

9 - IMPORT_STATISTICS

EXPORT_STATISTICS 生成的 XML 文件导入统计信息。导入的统计信息将覆盖 XML 文件中引用的投影的现有统计信息。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

稳定

语法

IMPORT_STATISTICS ( 'filename' )

参数

filename
EXPORT_STATISTICS 生成的 XML 输入文件的路径和名称。

超级用户

限制

  • IMPORT_STATISTICS 仅导入有效的统计信息。如果源 XML 文件包含特定列的无效统计信息,则不导入这些统计信息,并且 Vertica 将发出警告。如果统计信息文件具有无效的结构,导入操作会失败。若要检查统计信息文件是否有效,请运行 VALIDATE_STATISTICS

  • IMPORT_STATISTICS 返回 LONG 数据类型列的警告,因为 EXPORT_STATISTICS 生成的源 XML 文件中不包含该类型列的统计信息。

示例

从先前由 EXPORT_STATISTICS 创建的 XML 文件导入 VMart 数据库的统计信息:

=> SELECT IMPORT_STATISTICS('/opt/vertica/examples/VMart_Schema/vmart_stats.xml');
                     IMPORT_STATISTICS
----------------------------------------------------------------------------
Importing statistics for projection date_dimension_super column date_key failure (stats did not contain row counts)
Importing statistics for projection date_dimension_super column date failure (stats did not contain row counts)
Importing statistics for projection date_dimension_super column full_date_description failure (stats did not contain row counts)
...
(1 row)

另请参阅

10 - VALIDATE_STATISTICS

验证由 EXPORT_STATISTICS 生成的 XML 文件中的统计信息。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

稳定

语法

VALIDATE_STATISTICS ( 'XML‑file' )

参数

XML‑file
包含待验证统计信息的 XML 文件的路径和名称。

超级用户

报告有效统计信息

以下示例显示了统计信息有效时的结果:

=> SELECT EXPORT_STATISTICS('cust_dim_stats.xml','customer_dimension');
    EXPORT_STATISTICS
-----------------------------------
 Statistics exported successfully
(1 row)

=> SELECT VALIDATE_STATISTICS('cust_dim_stats.xml');
 VALIDATE_STATISTICS
---------------------
(1 row)

识别无效统计信息

如果 VALIDATE_STATISTICS 无法读取文档的 XML,则会引发以下错误:

=> SELECT VALIDATE_STATISTICS('/home/dbadmin/stats.xml');
                       VALIDATE_STATISTICS
----------------------------------------------------------------------------
Error validating statistics file: At line 1:1. Invalid document structure
(1 row)

如果某些表统计信息无效,VALIDATE_STATISTICS 会返回标识相关信息的报告。在以下示例中,函数报告属性 distinctbucketsrowscount、并且 distinctCount 不能是负数。

=> SELECT VALIDATE_STATISTICS('/stats.xml');
WARNING 0:  Invalid value '-1' for attribute 'distinct' under column 'public.t.x'.
   Please use a positive value.
WARNING 0:  Invalid value '-1' for attribute 'buckets' under column 'public.t.x'.
   Please use a positive value.
WARNING 0:  Invalid value '-1' for attribute 'rows' under column 'public.t.x'.
   Please use a positive value.
WARNING 0:  Invalid value '-1' for attribute 'count' under bound '1', column 'public.t.x'.
   Please use a positive value.
WARNING 0:  Invalid value '-1' for attribute 'distinctCount' under bound '1', column 'public.t.x'.
   Please use a positive value.
 VALIDATE_STATISTICS
---------------------
 (1 row)

在这种情况下,再次对表运行 ANALYZE_STATISTICS 以创建有效统计信息。

另请参阅