Parquet File中的Redshift COPY将JSON列解释为多列

时间:2019-03-29 00:01:23

标签: json amazon-web-services amazon-redshift parquet

我正在将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文件。

0 个答案:

没有答案