Redshift Spectrum 在创建嵌套数据时出现语法错误

Posted

技术标签:

【中文标题】Redshift Spectrum 在创建嵌套数据时出现语法错误【英文标题】:Redshift Spectrum gives syntax error on creating nested data 【发布时间】:2019-06-20 16:20:54 【问题描述】:

我正在使用这个查询

CREATE EXTERNAL TABLE test.post(
      edge_media_to_tagged_user struct<
            "edges": array<
            "node": struct<
                "user": struct<
                  id:bigint,
                  username:text
                >,
                x: float(24),
                y: float(24)
            >
        >
      >
  )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://bucket/test';

不知何故,上面的查询给了我

ERROR:  syntax error at or near ":"
LINE 4:             "node": struct<

删除或添加冒号和/或双引号仍然会给我错误。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

我会说这可能是由这个位引起的:

        "edges": array<
        "node": struct<

数组不包含命名项,因此当它在array 定义中发现"node": 时可能会失败。

【讨论】:

【参考方案2】:

Answer from John 给出一个重要提示,此代码有效


CREATE EXTERNAL TABLE likes_schema_test.post88(
      edge_media_to_tagged_user struct<
        "edges": array<struct<      <-- change here
            "node": struct<
                "user": struct<
                  full_name:text,
                  id:bigint,
                  is_verified: boolean,
                  username:text
                >,
                x: float(24),
                y: float(24)
            >>
        >
      >
  )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://follower-dumper-testing/post_test';

"node" 更改为'node' 会产生语法错误。

【讨论】:

【参考方案3】:

不幸的是,Redshift 不支持 struct 数据类型。 Redshift 支持的数据类型的完整列表可以在here 找到。

编辑:正常 Redshift 不支持结构。 Redshift Spectrum 可以。

【讨论】:

Redshift Spectrum 可以,根据docs.aws.amazon.com/redshift/latest/dg/… 啊,我明白了。看起来这个链接说 Redshift 支持单引号,而不是双引号:docs.aws.amazon.com/redshift/latest/dg/… 我刚刚了解到单引号是用于LOCATIONROW FORMAT,详情请参阅我的回答 很高兴你能成功。感谢您向我介绍 Spectrum,这是我第一次听说它! 不客气!请注意,Redshift 和 Redshift Spectrum 之间存在差异。一个是云中的 Postgres 版本,一个是从 S3 解析 JSON 的工具。

以上是关于Redshift Spectrum 在创建嵌套数据时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift Spectrum 中选择带有连字符的字段

洞察 Redshift Spectrum 查询错误

“解析列类型时出错”Redshift Spectrum

Redshift Spectrum 和 Hive Metastore - 模棱两可的错误

从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换

Redshift Spectrum 为查询扫描的数据大小