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 删除。