【问题标题】:RDS Table update using Dynamic Frame in AWS Glue在 AWS Glue 中使用动态框架更新 RDS 表
【发布时间】:2021-10-04 06:16:15
【问题描述】:

我有一个粘合工作,我将数据从 csv 插入到 postgresql 表中。现在我需要更新 postgresql DB 表中的一行。我已经这样做了,但所需的行将作为表中的新条目出现,而不是更新现有的。我怎样才能做到这一点?请帮忙...

【问题讨论】:

    标签: python postgresql amazon-web-services aws-glue


    【解决方案1】:

    Glue 目前不支持覆盖模式。您需要将您的DynamicFrame 转换为DataFrame,然后使用mode = overwrite 编写如下:

    dynamic_frame.toDF()
      .write
      .mode("overwrite")
    

    【讨论】:

    • 当然,应该没问题
    【解决方案2】:

    Spark 还不支持更新记录。您只能覆盖(删除现有记录并添加新记录)或追加(与现有记录一起添加新记录)。

    但是,如果您想更新特定行,您可以使用 python 库 pg8000。

    glue 2.0和python 3的步骤如下:

    1. 下载并解压 pg8000、asn1crypto 和 scamp tar 文件,然后将它们全部压缩为一个。

    2. 将文件上传到 s3 存储桶

    3. 在python库路径中,添加压缩后的pg8000文件的路径。 例如:s3://bucketname/foldername/pg8000-1.19.2.zip

    4. 仅导入 pg8000.native 并使用以下代码直接连接到数据库。

      import ssl
      import pg8000.native
      
      conn = pg8000.native.Connection(database="database", host="xxxxxxrds.amazonaws.com", port=xxxx, user="user", password="password",ssl_context=ssl._create_unverified_context())
      
      insert_query = "your update query that you would generally write in postgresql"
      
      conn.run(insert_query)
      conn.run("COMMIT")
      conn.close()
      

    PS:您还可以使用 python '.format' 使您的查询通用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2018-07-20
      • 2018-04-17
      相关资源
      最近更新 更多