問題
您試圖通過z - ordered優化一個Delta表,並收到一個關於沒有收集列的統計信息的錯誤。
AnalysisException: [col1, col2]上的z - ordered將無效,因為我們目前不收集這些列的統計信息。
導致
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 TABLECHANGE 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軸順序,應該會成功完成。