Я хочу определить таблицу 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
(упомянуто здесь , не могу найти лучшую документациюк сожалению) вот так:
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)
, которое я действительно не знаю, как интерпретировать.
Что вызываетэто исключение?