数据集统计信息计算
您现在可以使用COMPUTE STATISTICS SQL命令计算Azure Data Lake Storage (ADLS)数据集的列级统计信息。 用于计算数据集统计信息的SQL命令是ANALYZE TABLE命令的扩展。 有关ANALYZE TABLE命令的完整详细信息可在SQL参考文档中找到。
要查看使用ANALYZE TABLE COMPUTE STATISTICS命令计算的统计信息,可以对别名或统计信息ID使用SELECT查询。 您还可以将统计分析的范围限制为整个数据集、数据集的子集、所有列或列的子集。
COMPUTE STATISTICS、FILTERCONTEXT和FOR COLUMNS命令。 当前,只有ADLS表支持ANALYZE TABLE命令的这些扩展。 有关详细信息,请参阅SQL语法指南的ANALYZE TABLE部分。本指南可帮助您构建查询,以便计算ADLS数据集的列统计信息。 使用这些命令,可以使用SQL查询通过PSQL客户端查看会话中生成的统计信息。
计算统计信息 compute-statistics
已向ANALYZE TABLE命令添加了其他构造,该命令允许您 计算数据集子集和某些列的统计信息。 要计算数据集统计信息,必须使用ANALYZE TABLE <tableName> COMPUTE STATISTICS格式。
下面显示的示例用于计算adc_geometric数据集以及数据集中 所有 列的统计信息。
ANALYZE TABLE adc_geometric COMPUTE STATISTICS;
COMPUTE STATISTICS命令不支持数组或映射数据类型。 如果输入数据框架具有带数组的列并映射数据类型,则可以设置skip_stats_for_complex_datatypes标志以接收通知或出错。 默认情况下,该标记设置为true。 要启用通知或错误,请使用以下命令: SET skip_stats_for_complex_datatypes = false。创建别名 alias-name
由于计算结果可能是大量数据,直接在控制台输出中返回计算数据是不合理的。 虽然别名是可选的,但建议您在计算统计信息时使用别名作为最佳实践。 在语句中提供别名,以描述性引用SQL查询中的结果。 或者,自动生成的Statistics ID用于存储计算的信息。
下面的示例将输出计算统计信息存储在alias_name中以供以后参考。 运行ANALYZE TABLE命令后,查询中使用的别名即可供参考。
ANALYZE TABLE adc_geometric COMPUTE STATISTICS AS alias_name;
上述示例的输出为SUCCESSFULLY COMPLETED, alias_name。 控制台输出在响应analyze table compute statistics命令时不显示统计信息。 要查看详细结果,必须对别名或统计信息ID使用SELECT查询。
查看已计算统计信息的输出 view-output-of-computed-statistics
如果您未提前提供别名,查询服务将自动为Statistics ID生成一个格式为<tableName_stats_{incremental_number}>的名称。 如果提供了别名,则该别名会显示在Statistics ID列中。
COMPUTE STATISTICS查询的示例输出如下所示:
| Statistics ID |
| --------------------- |
| adc_geometric_stats_1 |
(1 row)
然后,您可以通过引用Statistics ID直接 查询计算的统计信息。 下面的示例语句允许您在与Statistics ID或别名一起使用时完整查看输出。
SELECT * FROM adc_geometric_stats_1;
计算的统计信息输出可能与下面的示例类似。
columnName | mean | max | min | standardDeviation | approxDistinctCount | nullCount | dataType
------------------------------------------------------------+----------------+----------------+----------------+-------------------+---------------------+-----------+-----------
marketing.trackingcode | 0.0 | 0.0 | 0.0 | 0.0 | 1213.0 | 0 | String
_experience.analytics.customdimensions.evars.evar13 | 0.0 | 0.0 | 0.0 | 0.0 | 8765.0 | 20 | String
_experience.analytics.customdimensions.evars.evar74 | 0.0 | 0.0 | 0.0 | 0.0 | 11.0 | 0 | String
web.webpagedetails.name | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0 | String
_experience.analytics.event1to100.event8.value | 5.0 | 9077.0 | 123.0 | 10.0 | 1001.0 | 80 | Double
search.ispaid | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0 | Boolean
commerce.productlistviews.value | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 10 | Double
device.typeid | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 10 | String
commerce.purchases.value | 765.0 | 98760.0 | -980.0 | 32.0 | 99.0 | 90 | Double
_experience.analytics.customdimensions.props.prop45 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0 | String
environment.browserdetails.javaenabled | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0 | Boolean
timestamp | 0.0 | 0.0 | 0.0 | 0.0 | 98.0 | 3 | Timestamp
(12 rows)
显示统计分析元数据 show-statistics
您可以使用SHOW STATISTICS命令显示会话中生成的所有临时统计数据的元数据。 此命令可帮助您优化统计分析的范围。
下面显示了SHOW STATISTICS的示例输出。
statsId | tableName | columnSet | filterContext | timestamp
----------------------+---------------+-----------+-----------------------------+--------------------
adc_geometric_stats_1 | adc_geometric | (age) | | 25/06/2023 09:22:26
demo_table_stats_1 | demo_table | (*) | ((age > 25)) | 25/06/2023 12:50:26
age_stats | castedtitanic | (age) | ((age > 25) AND (age < 40)) | 25/06/2023 09:22:26
下面提供了元数据列名的说明。
statsIdCOMPUTE STATISTICS命令生成的临时统计信息表。tableNamecolumnSetfilterContexttimestamp可以使用该统计信息ID或别名在该会话中随时通过SELECT语句查找计算的统计信息。 生成的统计信息ID和统计信息仅对此特定会话有效,不能跨不同的PSQL会话访问。 计算的统计信息当前不是持久的。 有关更多详细信息,请参阅有关如何查看计算统计信息的输出的部分。
限制包含的列 limit-included-columns
要集中分析,您可以通过按名称引用特定数据集列来计算这些列的统计信息。 使用FOR COLUMNS (<col1>, <col2>)语法定位特定列。 以下示例计算数据集tableName的列commerce、id和timestamp的统计信息。
ANALYZE TABLE tableName COMPUTE STATISTICS FOR columns (commerce, id, timestamp);
您可以计算任何根级别或嵌套列的统计信息。 以下示例演示了这些引用。
ANALYZE TABLE adcgeometric COMPUTE STATISTICS FOR columns (commerce, commerce.purchases.value, commerce.productListAdds.value);
添加时间戳筛选条件 filter-condition
要根据时间顺序集中分析列,您可以添加时间戳筛选条件。 此条件可用于过滤掉历史数据或集中特定时段的数据分析。 FILTERCONTEXT命令根据您提供的筛选条件计算数据集子集的统计信息。
在以下示例中,对数据集tableName的所有列计算统计信息,其中列时间戳的值介于指定的范围2023-04-01 00:00:00和2023-04-05 00:00:00之间。
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-04-01 00:00:00') and timestamp <= to_timestamp('2023-04-05 00:00:00')) COMPUTE STATISTICS FOR ALL COLUMNS;
您可以将列限制和过滤器结合使用,为数据集列创建高度特定的计算查询。 例如,以下查询计算数据集tableName的列commerce、id和timestamp的统计信息,其中列时间戳的值介于指定的范围2023-04-01 00:00:00和2023-04-05 00:00:00之间。
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-04-01 00:00:00') and timestamp <= to_timestamp('2023-04-05 00:00:00')) COMPUTE STATISTICS FOR columns (commerce, id, timestamp);
后续步骤 next-steps
通过阅读本文档,您现在可以更好地了解如何使用SQL查询从ADLS数据集生成列级统计信息。 建议您阅读SQl语法指南,以了解Adobe Experience Platform查询服务的更多功能。