此部分包含用于收集和管理表数据统计信息的 Vertica 函数。
统计信息管理函数
- 1: ANALYZE_EXTERNAL_ROW_COUNT
- 2: ANALYZE_STATISTICS
- 3: ANALYZE_STATISTICS_PARTITION
- 4: DROP_EXTERNAL_ROW_COUNT
- 5: DROP_STATISTICS
- 6: DROP_STATISTICS_PARTITION
- 7: EXPORT_STATISTICS
- 8: EXPORT_STATISTICS_PARTITION
- 9: IMPORT_STATISTICS
- 10: VALIDATE_STATISTICS
1 - ANALYZE_EXTERNAL_ROW_COUNT
计算外部表中的确切行数。 ANALYZE_EXTERNAL_ROW_COUNT
在后台运行。
注意
使用DO_TM_TASK
无法计算外部表的行数。
这是元函数。您必须在顶级 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_PARTITION3 - 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‑value 与 max‑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)
-
如果列是 DATE 或 TIMESTAMP/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 会删除此表或指定列的所有分区级统计信息。
重要
要删除的键范围必须等于先前通过ANALYZE_STATISTICS_PARTITION
分析的完整分区范围或其超集。如果范围省略任何分析分区,则DROP_STATISTICS_PARTITION
不会删除任何统计信息。 -
类别
- 要删除的统计信息类别,为以下之一:
-
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。
重要
要导出的键范围必须等于先前通过 ANALYZE_STATISTICS_PARTITION 分析的完整分区范围或其超集。如果范围省略任何分析分区,则 EXPORT_STATISTICS_PARTITION 不会导出任何统计信息。 -
列
- table 中的列名称,通常为谓词列。可以指定多个逗号分隔列。Vertica 将导出的统计信息范围缩小到指定的列。
超级用户
限制
EXPORT_STATISTICS_PARTITION 不导出 LONG 数据类型列的统计信息。
另请参阅
EXPORT_STATISTICS9 - 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
会返回标识相关信息的报告。在以下示例中,函数报告属性 distinct
、buckets
、rows
、count
、并且 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
以创建有效统计信息。