Spark SQL解析流程概述为:
以上整个转换过程都在Spark的Driver端进行,不涉及分布式环境。
Spark 2.2 开始支持CBO优化,触发统计元数据更新的时机如下:
Statistics 统计信息,参考:org.apache.spark.sql.catalyst.plans.logical.Statistics
字段 | 字段名称 |
---|---|
sizeInBytes | 数据文件大小,单位byte |
rowCount | 表行数 |
attributeStats | 字段属性Map |
ColumnStat字段统计信息,字段支持直方图(Histograms)统计:
字段 | 字段名称 |
---|---|
distinctCount | 不同字段值的个数统计 |
min | 字段最小值 |
max | 字段最大值 |
nullCount | 字段为null值的数量 |
avgLen | 字段值平均长度 |
maxLen | 字段值最大长度 |
histogram | 字段值直方图 |
version | 字段统计版本 |
Spark的元数据统计信息的获取有三种方式:
对接外部元数据metastore封装为CatalogStatistics,表的元数据信息从Table#parameters获取,统计信息存储和读取封装分别调用:HiveExternalCatalog#statsToProperties、HiveExternalCatalog#statsFromProperties,HiveClient封装基于Hive Metastore RPC接口,通过调用HiveClient读写保存在Hive Metastore的统计元数据。Spark表统计有如下配置主键:
ANALYZE TABLE table_name [ PARTITION ( partition_col_name [ = partition_col_val ] [ , ... ] ) ]
COMPUTE STATISTICS [ NOSCAN | FOR COLUMNS col [ , ... ] | FOR ALL COLUMNS ]
Analyze命令支持:AnalyzeColumnCommand、AnalyzeTableCommand
统计元数据执行:
统计元数据获取:获取表、分区信息会自动补充上统计元数据信息;
统计元数据更新:SessionCatalog#alterTableStats更新元数据,针对Hive Metastore实现,则调用HiveClient#alterTable方法更新元数据配置信息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。