在apachespark中收集配置单元列统计信息

sy5wg1nm  于 2021-06-27  发布在  Hive
关注(0)|答案(0)|浏览(202)

我用 Pyspark 2.1 从配置单元表中计算表和列统计信息。
当我这样做时:

spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS")

我可以用一个 DESCRIBE EXTENDED sql命令:

spark.sql("DESCRIBE EXTENDED <table name>").show()

但是,在这样计算列统计信息时:

spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS FOR COLUMNS")

作业已发送并成功完成,但我无法按照此答案的建议使用sql命令收集统计信息:

spark.sql("DESCRIBE EXTENDED <table name> <column name>").show()

我得到:
parseexception不支持的sql语句
重新发行 DESCRIBE EXTENDED 查询(不带列名)不返回catalogtable中的任何更改:我只能看到表的统计信息(即sizeinbytes和rowcount)。
另一个答案建议从metastore中的“表”中检索spark统计信息,但这对我来说很神秘。。。
如何在spark中访问这些列级统计信息?
编辑:我已经对此进行了进一步调查,这使我能够细化我的问题的范围:
看起来我的配置单元客户端(配置单元视图2.0)和spark sql没有在同一位置写入统计信息。
使用spark sql时 ANALYZE TABLE 方法,-only-表统计信息显示在catalogtable的统计信息键中:

Statistics: sizeInBytes=15196959528, rowCount=39763901, isBroadcastable=false

但是,配置单元视图对这些统计信息视而不见,它们没有列在我的表统计信息中
相反,在hive视图中计算表或列统计信息时,我可以使用sparksql收集表统计信息 DESCRIBE EXTENDED 方法,但它们出现在我的catalogtable的properties键中。它还指示是否计算了某些列统计信息:

Properties: [numFiles=20, transient_lastDdlTime=1540381765, totalSize=15196959528, COLUMN_STATS_ACCURATE={"COLUMN_STATS":{"bubble_level":"true","bubble_level_n1s":"true","timestamp":"true"}}]

因此,这些信息看起来是独立的,我的问题是:spark可以使用哪一部分来优化执行计划?我知道其中一些问题可以通过升级到最新版本的spark来解决,但这不是我目前的日程安排。
jaceklaskowski的上述答案表明,如果可以通过sparksql获得hive的统计数据,就可以使用它们 DESCRIBE EXTENDED 方法。
有人能证实吗?
非常感谢你帮我解决这个问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题