胶水加载作业不保留红移中的默认列值

Posted

技术标签:

【中文标题】胶水加载作业不保留红移中的默认列值【英文标题】:Glue load job not retaining default column value in redshift 【发布时间】:2021-03-25 03:35:33 【问题描述】:

我有一个 Glue 作业,将 S3 中的 CSV 加载到红移表中。有 1 列 (updated_date) 未映射。该列的默认值设置为 UTC 中的 current_timestamp。但是每次 Glue 作业运行时,这个 updated_date 列都是空的。

我尝试从 Glue 元数据表中删除 updated_dt。我尝试从 Glue 脚本中的 SelectFields.apply() 中删除 updated_dt。

当我在 Redshift 中执行正常插入语句而不使用 updated_dt 列时,将为这些行插入默认的 current_timestamp() 值。

谢谢

【问题讨论】:

【参考方案1】:

好吧,我也遇到了同样的问题。 AWS 支持告诉我将 Glue DynamicFrame 转换为 Spark DataFrame 并使用 Spark 编写器将数据加载到 Redshift:

SparkDF = GlueDynFrame.toDF()

SparkDF.write.format('jdbc').options(
        url = ‘<‘JDBC url>’,
        dbtable=‘<schema>.<table>’,
        user=‘<username>’,
        password=‘<password>’).mode(‘append’).save()    

另一方面,我通过使用 preactions 删除和创建目标表或仅使用一些更新来设置 postactions 中的默认值来解决问题。

【讨论】:

以上是关于胶水加载作业不保留红移中的默认列值的主要内容,如果未能解决你的问题,请参考以下文章

监控红移中的数据变化

亚马逊红移中的上次更新查询计数

红移中的 juliandate 到 normaldate

在红移中插入

红移中的长真空

红移中的 PERCENTILE_CONT()