寫一個帶有列列的數據框到紅移表

在將dataframe寫入紅移表時,請使用`fillRecord`填充缺失的列。

寫的何塞·岡薩雷斯(Jose Gonzalez)

上次出版於:2022年5月23日

問題

在寫入紅移表時,如果目標表具有比源Apache Spark DataFrame更多的列,則可能會得到複製錯誤。

副本失敗,錯誤:[Amazon] [Amazon Redshift](1203)嚐試執行查詢時發生了錯誤:錯誤:加載到表格名稱中失敗。檢查“ stl_load_errors”係統表以獲取詳細信息。“ 1203-輸入數據的列少於DDL中定義的列””

原因

源火花數據框和目標紅移表需要具有相同數量的列。

解決方案

選項1:更新筆記本或作業操作,以在Spark DataFrame中添加丟失的列。

如果沒有數據,則可以填充帶有空值的新列,或者如果需要將新數據寫入目標紅移表,則可以使用實際值。

此選項需要手動幹預,如果需要修改大量筆記本或工作,或者定期將新列添加到目標中,則可能會變得耗時。

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

什麼時候填充使用,它允許在某些記錄末尾缺少連續列時加載數據文件。缺失的列中填充了零長度字符串或空值,適用於所討論的列的數據類型。

填充可以使用副本執行DF.Write手術。

%scala df.write \ .format(“ com.databricks.spark.redshift”)\ .option(“ url”,“ jdbc:redshift:// redshift:// redshiftost:5439/database:5439/database?user = username&passern&passwor = pass = pass”)(“ dbtable”,“ my_table_copy”)\ .option(“ tempdir”,“ s3n:// path/for/temp/data”)\ .option(“ frompopyoptions”,“ fillRecord”,“ fillRecord”)\ .save()\ .save()