写一个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 ()


这篇文章有用吗?