AWS Glue ETL 到 Redshift:日期

Posted

技术标签:

【中文标题】AWS Glue ETL 到 Redshift:日期【英文标题】:AWS Glue ETL to Redshift: DATE 【发布时间】:2021-05-14 17:25:49 【问题描述】:

我正在使用 AWS Glue 将 ETL 数据传输到 Redshift。我遇到了一个问题,我的日期在 Redshift 中加载为 null。

我的设置:

将 csv 上传到 S3,查看示例数据:

项目 |颜色 |价格 |日期

衬衫|棕色 | 25.05 | 03-01-2018

裤子|黑色 | 20.99 | 02-14-2017

抓取 S3 对象

创建一个 Redshift 表,查看架构:

项目:字符串 颜色:字符串 价格:十进制/数字 日期:日期

将数据加载到 Redshift 的脚本,请参见脚本:


    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    from pyspark.sql.functions import to_date, col
    from awsglue.dynamicframe import DynamicFrame
    
    glueContext = GlueContext(SparkContext.getOrCreate())
    
    items_dynamicframe = glueContext.create_dynamic_frame.from_catalog(
           database = "rdshft-test",
           table_name = "items")
    items_dynamicframe.printSchema()
    
    #Attempt to get date loaded correctly to Redshift
    data_frame = items_dynamicframe.toDF()
    data_frame.show()
    data_frame = data_frame.withColumn("date",
              to_date(col("date"),"d-M-Y"))
    data_frame.show()

感谢任何反馈。谢谢。

【问题讨论】:

在将数据类型转换为 MM/DD/YYYY 格式后检查数据类型,让胶水创建一个新的红移表,而无需手动创建它 【参考方案1】:

我能够通过转换回动态框架来解决此问题。将数据移植到笔记本时,我使用的是动态框架。但是,要将字符串转换为日期,我必须使用数据框(更具体地说是 pyspark sql 函数)。要加载到 Redshift,我必须转换回动态帧。假设这是 Glue 的要求?

【讨论】:

以上是关于AWS Glue ETL 到 Redshift:日期的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue:SQL Server 多个分区数据库 ETL 到 Redshift

何时通过 AWS Glue ETL 使用 Amazon Redshift 频谱来查询 Amazon S3 数据

AWS 在 VPC 中访问 Redshift

AWS Glue 检查文件内容的正确性

将 Parquet 文件从 AWS Glue 加载到 Redshift

如何在数据加载之前截断 AWS Glue 作业中的 RDS 表?