【发布时间】:2019-11-06 16:08:00
【问题描述】:
我想在第一次写入之前手动定义 Redshift 表。这是因为我想在定义的列上利用 distkey 和 sortkey。 SQL 查询将是这样的:
my_sql_command = """
create table if not exists my_db.my_schema.my_table(
my_id VARCHAR(MAX) NOT NULL DISTKEY,
type VARCHAR(MAX),
my_timestamp TIMESTAMP,
)
compound sortkey(my_timestamp, my_id);
"""
我将此 SQL 字符串称为 preactions 参数(提到 here,很遗憾找不到更好的文档),如下所示:
my_frame = DynamicFrame.fromDF(my_df, glue_context, "my_frame")
glue_context.write_dynamic_frame.from_jdbc_conf(
frame=my_frame, catalog_connection=params['db_connection_name'],
connection_options={"preactions": my_sql_command, "dbtable": "my_schema.my_table", "database": "my_db"},
redshift_tmp_dir="s3://my_bucket/", transformation_ctx="my_ctx")
但我收到此错误消息:
py4j.protocol.Py4JJavaError: An error occurred while calling o227.pyWriteDynamicFrame.
: java.sql.SQLException: [JDBC Driver]String index out of range: 0
at java.lang.String.charAt(String.java:658)
我真的不知道如何解释。
是什么导致了这个异常?
【问题讨论】:
标签: apache-spark pyspark amazon-redshift aws-glue