簡體   English   中英

使用 scala 和 spark-sql 計算表統計信息

[英]Calculate table statistics using scala and spark-sql

我在公司糟糕的數據環境中使用 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 的情況下,我沒有收到任何錯誤消息,但我也沒有在表 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 對所有列或至少對其中一些列簡單地計算表統計信息的最佳實踐是什么?

從 Spark 3.0開始支持ALL COLUMNS ,如您所見。 在 Spark 3.0 之前,您需要指定要為其計算統計信息的列名。 您的示例 1 應該可以工作,如果您想查看可以運行的計算統計信息(對於列級統計信息)

DESCRIBE EXTENDED table_name table_col

或只是(對於表級統計信息)

DESCRIBE EXTENDED table_name

有一個col_name統計與相關信息。 如果由於某種原因您仍然看不到它,這也可能會有所幫助:

refresh table table_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM