我正在将S3中的实木复合地板文件导入Redshift。该文件有3列。最后一列是具有多个列的JSON对象。使用以下代码:
CREATE TABLE database_name.table_name (
text_field_1 VARCHAR(255)
, text_field_2 VARCHAR(255),
, json_field_1 VARCHAR(255));
然后我执行复制命令:
copy parquet.raw_jamcityads_purchase from 's3://my-bucket/my-file.parquet'
iam_role 'arn:aws:iam::1###########2:role/R######S3'
parquet;
问题是COPY命令将实木复合地板文件中的json_field_1
解释为多列,并给了我这个错误:
Query execution failed
Reason:
SQL Error [500310] [XX000]: [Amazon](500310) Invalid operation: S3 Query Exception (Fetch)
Details:
-----------------------------------------------
error: S3 Query Exception (Fetch)
code: 15001
context: Task failed due to an internal error. Unmatched number of columns between table and file. Table columns: 3, Data columns: 5, File name: ####
query: 4384070
location: dory_util.cpp:872
process: query1_56_4384070 [pid=18317]
-----------------------------------------------;
我不确定如何告诉Redshift json_field_1
是实木复合地板文件中的一个字段。
我更喜欢使用COPY
命令来实现此目标,而不是探索Redshift Spectrum / Athena / etc,因为这是我们加载客户数据的方式。
我希望能够将JSON列作为字符串加载并处理。我不需要里面的东西。现在,它阻止了我完全加载PARQUET文件。