【问题标题】:Copy JSON column in Redshift在 Redshift 中复制 JSON 列
【发布时间】:2023-03-09 07:56:01
【问题描述】:

我必须从 s3 导入一个 redshift 中的 csv 文件。 表中的一列是 JSON 格式。

使用 COPY 命令时,我收到以下错误 -

Invalid timestamp format or value [YYYY-MM-DD HH24:MI:SS]   

使用的命令是-

COPY api_log FROM 's3://X/Y' credentials 'aws_access_key_id=;aws_secret_access_key=' delimiter ',' maxerror as 250 TRUNCATECOLUMNS;

提交;

样本数据是 -

c1 c2    c3

  X       Y     {a:b,c:d}

【问题讨论】:

    标签: json copy amazon-redshift


    【解决方案1】:

    如果您在 json 中添加引号并将 REMOVEQUOTES 添加到副本中,那么它可以工作。

    将测试文件放入s3:

    echo x,y,'"{a:b,c:d}"' | aws s3 cp - s3://[bucket]/json/test_file.csv
    

    创建表:

    CREATE TABLE IF NOT EXISTS api_log
    (c1 varchar,
    c2 varchar,
    json_colum varchar(65535));
    

    加载:

    COPY api_log 
    FROM 's3://[bucket]/json/' 
    CREDENTIALS 'aws_access_key_id=;aws_secret_access_key='
    delimiter ',' 
    maxerror as 250 
    TRUNCATECOLUMNS
    REMOVEQUOTES;
    

    或者,如果您不喜欢引号,您可以使用制表符或其他不会出现在数据中的字符。例如:

    echo -e "x\ty\t{a:b,c:d}" | aws s3 cp - s3://[bucket]/json/test_file.csv
    

    然后:

    COPY api_log 
    FROM 's3://[bucket]/json/' 
    CREDENTIALS 'aws_access_key_id=;aws_secret_access_key='
    delimiter '\t' 
    maxerror as 250 
    TRUNCATECOLUMNS
    REMOVEQUOTES;
    

    无论哪种方式,你都会得到:

    select * from api_log;
     c1 | c2 | json_colum 
    ----+----+------------
     x  | y  | {a:b,c:d}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      相关资源
      最近更新 更多