z順序將是無效的,不能收集數據

z順序無效,沒有收集統計錯誤。重新排序表,使要優化的列位於前32列中。

寫的mathan.pillai

最後發布時間:2022年5月10日

問題

您試圖通過z - ordered優化一個Delta表,並收到一個關於沒有收集列的統計信息的錯誤。

AnalysisException: [col1, col2]上的z - ordered將無效,因為我們目前不收集這些列的統計信息。
刪除

信息

請回顧z - ordered(多維聚類)(AWS|Azure|GCP),以了解更多有關數據跳過和z順序的資料。

導致

Delta Lake收集表模式中定義的前32列的統計信息。如果您試圖z順序的列不在前32列中,則不會為這些列收集統計信息。

解決方案

重新排列表中的列,這樣您試圖z順序的列位於表的前32列中。

你可以使用ALTER TABLE語句來重新排列列。

%sql ALTER TABLE table_name CHANGE [COLUMN] col_name col_name data_type [COMMENT col_comment] [FIRST|AFTER colA_name]

例如,該語句將列與<列名稱>到表中的第一列。

sql ALTER TABLE  CHANGE COLUMN < COLUMN -name> < COLUMN -name> 

對表中的列重新排序後,重新計算統計信息。

% scala com.databricks.sql.transaction.tahoe進口。_ import org.apache.spark.sql.catalyst.TableIdentifier import com.databricks.sql.transaction.tahoe.stats.StatisticsCollection val tableName = "<表的名稱>" val deltaLog = deltaLog。forTable(火花,TableIdentifier(表))StatisticsCollection。驗算(火花,deltaLog)

在表格上重新運行z軸順序,應該會成功完成。