【问题标题】:Calculate table statistics using scala and spark-sql使用 scala 和 spark-sql 计算表统计信息
【发布时间】:2020-07-07 14:27:20
【问题描述】:

我在公司糟糕的数据环境中使用 Spark 2.4.0 和 scala 2.11.12。在我的项目中,我创建了许多包含大量数据的表。 现在,我想计算我创建的表的统计信息。

我发现以下 scala/spark sql 语句应该这样做:

// example 1
val res = spark.sql("ANALYZE TABLE mytablename COMPUTE STATISTICS FOR COLUMNS col_name1, col_name2")

// example 2
val res = spark.sql("ANALYZE TABLE mytablename COMPUTE STATISTICS FOR COLUMNS col_name1, col_name2").queryExecution.logical
import org.apache.spark.sql.execution.command.AnalyzeColumnCommand

// example 3
val res = spark.sql("ANALYZE TABLE mytablename COMPUTE STATISTICS FOR ALL COLUMNS")

// example 4
val res = spark.sql("ANALYZE TABLE mytablename COMPUTE STATISTICS FOR COLUMNS col_not_exists")

在所有情况下,我都会先使元数据无效,然后再开始检查结果。

在示例 // 1 的情况下,我没有收到任何错误消息,但我也没有在 table stats 中看到任何结果(“show table stats mytablename”)。似乎没有对这些列进行任何计算。 在示例 // 2 的情况下,我得到与 //1 相同的结果。 例如 // 3 我收到错误信息:

org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input 'ALL' expecting <EOF>(line 1, pos 70)

== SQL ==
ANALYZE TABLE mytablename COMPUTE STATISTICS FOR ALL COLUMNS
-------------------------------------------------^^^

在最后一个例子中 // 4 我尝试计算表中不存在的列的表统计信息。在这里,我没有收到任何预期的错误消息。

使用 scala 2.11 和 Spark 2.4 对所有列或至少对其中一些列简单地计算表统计信息的最佳做法是什么?

【问题讨论】:

    标签: scala apache-spark-sql


    【解决方案1】:

    ALL COLUMNS 的支持是从 Spark 3.0 开始的,如您所见 here。在 Spark 3.0 之前,您需要指定要为其计算统计信息的列名。您的示例 1 应该可以工作,如果您想查看可以运行的计算统计信息(对于列级统计信息)

    DESCRIBE EXTENDED table_name table_col
    

    或只是(用于表级统计信息)

    DESCRIBE EXTENDED table_name
    

    有一个col_name 统计与相关信息。如果由于某种原因您仍然看不到它,这也可能会有所帮助:

    refresh table table_name
    

    【讨论】:

    • 这很有帮助。谢谢。但还有一个问题。在 spark-shell 中执行 sql("DESC EXTENDED table_name table_col").show 时,我确实看到了列的计算统计信息。但是在 Hue (Impala) 中执行 SHOW COLUMN STATS table_name 时,我没有看到任何结果。即使使用命令“刷新 table_name”或使元数据无效”。底层 Hive 文件是相同的。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 2019-02-27
    • 1970-01-01
    • 2019-08-10
    • 2017-01-30
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多