我已经通过胶水作业动态创建了一个表格,并且它成功地工作正常。但根据新要求,我需要添加一个生成唯一值的新列,并且应该是 redshift 中的主键。
我已经使用 rownum() 函数实现了相同的功能,并且工作正常。但是最新的要求是特定列应该是主键。
当我尝试这样做时,它要求该列不为空。你知道如何通过粘合作业使列不为空吗?或任何使其不为空的红移查询。我尝试了所有方法都没有运气。
w = Window().orderBy(lit('A'))
df = timestampedDf.withColumn("row_num", row_number().over(w))
rowNumDf = DynamicFrame.fromDF(df1, glueContext, "df1")
postStep = "begin; ALTER TABLE TAB_CUSTOMER_DATA ALTER COLUMN row_num INTEGER NOT NULL; ALTER TABLE TAB_CUSTOMER_DATA ADD CONSTRAINT PK_1 PRIMARY KEY (row_num); end;"
## @type: DataSink
## @args: [catalog_connection = "REDSHIFT_CONNECTION", connection_options = {"dbtable": "tab_customer_data", "database": "randomdb"}, redshift_tmp_dir = TempDir, transformation_ctx = "datasink4"]
## @return: datasink4
## @inputs: [frame = rowNumDf]
datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = rowNumDf, catalog_connection = "REDSHIFT_CONNECTION", connection_options = {"dbtable": "TAB_CUSTOMER_DATA", "database": "randomdb", "postactions": postStep}, redshift_tmp_dir = args["TempDir"], transformation_ctx = "datasink4")
job.commit()