将带有 JSON 字段的 CSV 文件中的 COPY Redshift 复制到 SUPER 列
Redshift COPY from CSV file with JSON field into SUPER column
我正在尝试使用从 S3 到 Redshift 的 COPY 命令和一个如下所示的 CSV 文件:
uuid,new_json_column
a3299e1e-f45a-11e9-99cc-12b09cbafc98,"{""this"": ""is a json"", ""file"": 0}"
c9a31bb9d15fd5d9abe38f28fb2c824e,"{""this"": ""is a json"", ""file"": 0}"
在 Redshift 方面,我有一个 table 结构,如下所示:
CREATE TABLE IF NOT EXISTS testing_table (
uuid VARCHAR(150) NOT NULL,
json_field SUPER
)
我的 COPY 命令如下所示:
COPY testing_table
FROM 's3://some_s3_bucket/folder1/'
with credentials
'aws_access_key_id=***;aws_secret_access_key=***'
DELIMITER ','
EMPTYASNULL
BLANKSASNULL
TRUNCATECOLUMNS
REMOVEQUOTES
TRIMBLANKS
GZIP
DATEFORMAT 'auto'
TIMEFORMAT 'auto'
ACCEPTINVCHARS;
我无法加载 CSV 文件,错误是:
Load into table 'testing_table' failed. Check 'stl_load_errors' system table for details.
stl_load_errors
table中的行是这样的:
|userid|slice|tbl|starttime|session|query|filename|line_number|colname|type|col_length|position|raw_line|raw_field_value|err_code|err_reason|
|------|-----|---|---------|-------|-----|--------|-----------|-------|----|----------|--------|--------|---------------|--------|----------|
|100|3|805168|2021-06-15 16:00:56|28051|3897481|s3://some_s3_bucket/folder1/input_csv_file.csv.gz|1|json_field|super |1048470 |5|uuid,new_json_column|new_json_column|1224|Invalid sequence for null constant|
知道我需要如何格式化 CSV 列或我必须在 COPY 命令中更改的选项吗?
我终于意识到发生了什么。第一个问题是我没有使用 IGNOREHEADER 1
选项,这导致 COPY 由于错误的值而失败。
这是最后一个有效的 COPY 命令:
COPY testing_table
FROM 's3://some_s3_bucket/folder1/'
with credentials
'aws_access_key_id=***;aws_secret_access_key=***'
CSV
IGNOREHEADER 1
DELIMITER ','
EMPTYASNULL
BLANKSASNULL
TRUNCATECOLUMNS
TRIMBLANKS
GZIP
DATEFORMAT 'auto'
TIMEFORMAT 'auto'
ACCEPTINVCHARS;
我正在尝试使用从 S3 到 Redshift 的 COPY 命令和一个如下所示的 CSV 文件:
uuid,new_json_column
a3299e1e-f45a-11e9-99cc-12b09cbafc98,"{""this"": ""is a json"", ""file"": 0}"
c9a31bb9d15fd5d9abe38f28fb2c824e,"{""this"": ""is a json"", ""file"": 0}"
在 Redshift 方面,我有一个 table 结构,如下所示:
CREATE TABLE IF NOT EXISTS testing_table (
uuid VARCHAR(150) NOT NULL,
json_field SUPER
)
我的 COPY 命令如下所示:
COPY testing_table
FROM 's3://some_s3_bucket/folder1/'
with credentials
'aws_access_key_id=***;aws_secret_access_key=***'
DELIMITER ','
EMPTYASNULL
BLANKSASNULL
TRUNCATECOLUMNS
REMOVEQUOTES
TRIMBLANKS
GZIP
DATEFORMAT 'auto'
TIMEFORMAT 'auto'
ACCEPTINVCHARS;
我无法加载 CSV 文件,错误是:
Load into table 'testing_table' failed. Check 'stl_load_errors' system table for details.
stl_load_errors
table中的行是这样的:
|userid|slice|tbl|starttime|session|query|filename|line_number|colname|type|col_length|position|raw_line|raw_field_value|err_code|err_reason|
|------|-----|---|---------|-------|-----|--------|-----------|-------|----|----------|--------|--------|---------------|--------|----------|
|100|3|805168|2021-06-15 16:00:56|28051|3897481|s3://some_s3_bucket/folder1/input_csv_file.csv.gz|1|json_field|super |1048470 |5|uuid,new_json_column|new_json_column|1224|Invalid sequence for null constant|
知道我需要如何格式化 CSV 列或我必须在 COPY 命令中更改的选项吗?
我终于意识到发生了什么。第一个问题是我没有使用 IGNOREHEADER 1
选项,这导致 COPY 由于错误的值而失败。
这是最后一个有效的 COPY 命令:
COPY testing_table
FROM 's3://some_s3_bucket/folder1/'
with credentials
'aws_access_key_id=***;aws_secret_access_key=***'
CSV
IGNOREHEADER 1
DELIMITER ','
EMPTYASNULL
BLANKSASNULL
TRUNCATECOLUMNS
TRIMBLANKS
GZIP
DATEFORMAT 'auto'
TIMEFORMAT 'auto'
ACCEPTINVCHARS;