寫一個DataFrame與失蹤的紅移表列

寫作時使用“FILLRECORD”來填充缺失列DataFrame紅移表。

寫的何塞·岡薩雷斯

去年發表在:2022年5月23日

問題

編寫紅移表時,如果目標表列比源Apache火花DataFrame你可能得到一個複製錯誤。

複製失敗與錯誤(亞馬遜):(亞馬遜紅移)(1203)錯誤發生在試圖執行一個查詢:錯誤:加載到表的表名失敗了。檢查“stl_load_errors”係統表的詳細信息。“1203 -輸入數據列少於DDL中定義”

導致

源引發DataFrame和目標紅移表需要相同數量的列。

解決方案

選項1:更新筆記本或工作操作添加丟失的火花DataFrame中的列。

可以使用null值填充新列如果沒有數據,或與實際值是否有新數據需要寫入目標紅移表。

這個選項需要手動幹預,可以成為耗費時間如果有大量的筆記本或需要修改的工作,或者如果新列添加到目標定期。

選項2:使用AWS紅移數據轉換參數FILLRECORD

FILLRECORD使用,它允許將數據文件加載最後當相鄰列失蹤的一些記錄。失蹤的列是充滿長度為零的字符串或null值,適當的數據類型的列的問題。

FILLRECORD可以指定使用extracopyoptions在執行的df.write操作。

% scala df。寫\ .format (com.databricks.spark.redshift) \ .option (“url”,“jdbc:紅移:/ / redshifthost: 5439 /數據庫?用戶=用戶名和密碼=通過”)\ .option(“數據表”,“my_table_copy”) \ .option (“tempdir”、“s3n: / /道路/ / temp /數據”)\ .option (“extracopyoptions”、“FILLRECORD”) \ .save ()