【问题标题】:How to create column jsonb on AWS-Redshift如何在 AWS-Redshift 上创建列 jsonb
【发布时间】:2022-01-05 10:41:40
【问题描述】:

我的演示数据库中有一个表。

CREATE TABLE airports_data (
    airport_code character(3) NOT NULL,
    airport_name text NOT NULL,
    city text NOT NULL,
    coordinates super NOT NULL,
    timezone text NOT NULL
); 

在 Postgres 数据库中,坐标列中的数据是 POINT 作为数据类型的,是这样的:

{"x":129.77099609375,"y":62.093299865722656}

将表格复制到 csv 文件时,数据在 csv 文件中表示如下:

“(129.77099609375,62.093299865722656)”

由于我将 SUPER 定义为 redshift 中列坐标的数据类型,我如何将数据类型 POINT 从数据库 postgres 复制到 csv 文件,并将 csv 文件加载到 redshift?

【问题讨论】:

    标签: amazon-redshift amazon-redshift-spectrum


    【解决方案1】:

    在 Amazon Redshift 中,SUPER 数据类型用于存储半结构化数据。

    This 是使用 SUPER 数据类型加载和操作半结构化数据的 Amazon Redshift 指南。

    例如,如果您有:

    CREATE TABLE "public"."tmp_super2"
      ("id" VARCHAR(255) NULL, "data1" SUPER NULL, "data2" SUPER NULL)
      BACKUP Yes;
    

    使用名为 somefile.csv 的 CSV 文件,如下所示:

    a|{}|{}
    b|{\"a\":\"Hello World\", \"b\":100}|{\"z\":\"Hello Again\"}
    

    然后你可以使用这样的 COPY 命令加载它:

    COPY "public"."tmp_super2"
    FROM 's3://yourbucket/yourfolder/somefile.csv'
    REGION 'us-west-1'
    IAM_ROLE 'arn:aws:iam::123456789012:role/RedshiftRole'
    DELIMITER '|' ESCAPE
    

    COPY 命令在从 CSV 加载 SUPER 时对双引号很挑剔,因此使用管道字段分隔符并转义双引号。

    【讨论】:

    • 嗨@shepo 谢谢。这是正确的。 csv 文件中的两列 (airport_name, city) 具有数据 json 格式。将csv文件复制到redshift时如何复制特定列的数据json格式?
    • 更新添加示例
    • 我有一个错误,即分隔符无效,在表 stl_load_errors 中。我的 csv 文件中有一行数据:YKS,Yakutsk Airport,"(129.77099609375,62.093299865722656)",Asia/Yakutsk
    • 在您的示例中,双引号内的值不是有效的 JSON。我认为您只需要一个 VARCHAR 或 GEOMETRY 即可:不是 SUPER
    猜你喜欢
    • 2019-07-17
    • 2021-07-07
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多