Skip to main content
 首页 » 编程设计

python之AWS Glue 截断 Redshift 表

2025年05月04日10lautakyan007

我创建了一个 Glue 作业,将数据从 S3(csv 文件)复制到 Redshift。它可以工作并填充所需的表。

但是,我需要在此过程中清除表,因为在过程完成后我留下了重复的记录。

我正在寻找一种方法将此清除添加到 Glue 过程中。任何建议将不胜感激。

谢谢。

请您参考如下方法:

您可以更改 Glue 脚本以在插入之前执行“预操作”,如下所述:

https://aws.amazon.com/premiumsupport/knowledge-center/sql-commands-redshift-glue-job/

datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame 
= datasource0, catalog_connection = "test_red", connection_options = {"preactions":"truncate table target_table;","dbtable": "target_table", "database": "redshiftdb"}, redshift_tmp_dir = 's3://s3path', transformation_ctx = "datasink4") 

例如,对于主要基于默认设置的脚本,我在最后一个 DataSink 之前插入了一个新的 DataSink(我用 {things} 替换了我的一些 deatils):

## @type: DataSink 
## @args: [catalog_connection = "redshift-data-live", connection_options = {"dbtable": "{DBTABLE}", "database": "{DBNAME}"}, redshift_tmp_dir = TempDir, transformation_ctx = "datasink4"] 
## @return: datasink4 
## @inputs: [frame = dropnullfields3] 
datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = dropnullfields3, catalog_connection = "redshift-data-live", connection_options = {"preactions":"truncate table {TABLENAME};","dbtable": "{SCHEMA.TABLENAME}", "database": "{DB}"}, redshift_tmp_dir = args["TempDir"], transformation_ctx = "datasink4") 
## @type: DataSink 
## @args: [catalog_connection = "redshift-data-live", connection_options = {"dbtable": "{SCHEMA.TABLENAME}", "database": "{DB}"}, redshift_tmp_dir = TempDir, transformation_ctx = "datasink4"] 
## @return: datasink5 
## @inputs: [frame = datasink4] 
datasink5 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = datasink4, catalog_connection = "redshift-data-live", connection_options = {"dbtable": "{SCHEMA.TABLENAME}", "database": "{DB}"}, redshift_tmp_dir = args["TempDir"], transformation_ctx = "datasink5") 
job.commit()