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/… 我刚刚了解到单引号是用于LOCATION
和ROW FORMAT
,详情请参阅我的回答
很高兴你能成功。感谢您向我介绍 Spectrum,这是我第一次听说它!
不客气!请注意,Redshift 和 Redshift Spectrum 之间存在差异。一个是云中的 Postgres 版本,一个是从 S3 解析 JSON 的工具。以上是关于Redshift Spectrum 在创建嵌套数据时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Redshift Spectrum 中选择带有连字符的字段
Redshift Spectrum 和 Hive Metastore - 模棱两可的错误