【发布时间】:2022-01-14 06:12:26
【问题描述】:
我正在尝试使用 JDBC 写入在 PostgreSQL 数据库中编写 AWSGlue DynamicFrame。目标表包含 Enum 类型的一列。
我首先从底层 PySpark DataFrame 中选择感兴趣的列,然后将 DataFrame 转换为 DynamicFrame:
# Select columns of interest
final_df = df.select("id", "my_struct.*")
# Convert back to DynamicFrame
dyf = DynamicFrame.fromDF(final_df, context, "final_dyf")
插入是使用以下代码完成的:
glue_context.write_dynamic_frame.from_options(
frame=dyf,
connection_type="postgresql",
connection_options={
"url": "jdbc:postgresql://my_db_url",
"user": POSTGRES_USER,
"password": POSTGRES_PASSWORD,
"dbtable": table_name,
"stringtype": "unspecified",
},
transformation_ctx=f"write_dyf_to_{table_name}_table",
)
插入数据时,我收到以下错误消息:
ERROR: column "x" is of type x_enum but expression is of type character.
Hint: You will need to rewrite or cast the expression.
我看过这篇文章:Problem writting an enun on PostgreSQL using a PySpark Dataframe with jdbc write,它强调了同样的问题。建议的答案建议在 JDBC 连接选项中添加 "stringtype": "unspecified"。
我做到了,但我仍然遇到问题。我怀疑问题出在这样一个事实,即在这种特殊情况下,整列x 是NULL。 PostgreSQL 表中的枚举列是NULLABLE。
我找到了使用 DropNullFields.apply 的解决方法,但我希望尽可能避免这样做。
以前有没有人遇到过这个问题或有什么建议?
非常感谢您的帮助。
【问题讨论】:
标签: postgresql jdbc pyspark aws-glue