Amazon web services 红移频谱:查询匿名JSON数组结构
我在S3中有一个JSON结构数组,通过Glue成功地对其进行了爬网和编目Amazon web services 红移频谱:查询匿名JSON数组结构,amazon-web-services,amazon-redshift,aws-glue,amazon-redshift-spectrum,Amazon Web Services,Amazon Redshift,Aws Glue,Amazon Redshift Spectrum,我在S3中有一个JSON结构数组,通过Glue成功地对其进行了爬网和编目 [{"key":"value"}, {"key":"value"}] 我正在使用自定义分类器: $[*] $.values[*] 但是,当尝试从频谱查询时,它返回: 顶级Ion/JSON结构必须是匿名数组当且仅当 已设置serde属性“strip.outer.array”。文件中出现不匹配 我在Glue catalog表中手动设置了serde属性,但没有任何更改 无法通过Spectrum查询匿名数组吗?在JSON文
[{"key":"value"}, {"key":"value"}]
我正在使用自定义分类器:
$[*]
$.values[*]
但是,当尝试从频谱查询时,它返回:
顶级Ion/JSON结构必须是匿名数组当且仅当
已设置serde属性“strip.outer.array”。文件中出现不匹配
我在Glue catalog表中手动设置了serde属性,但没有任何更改
无法通过Spectrum查询匿名数组吗?在JSON文件中对数组进行如下命名:
"values":[{"key":"value"},...}
以及更新分类器:
$[*]
$.values[*]
解决了这个问题。。。不过,我想知道是否有办法查询匿名数组。这样存储数据似乎很常见
更新:
最终,这个解决方案不起作用,因为Spectrum实际上永远不会返回任何结果。没有错误,只是没有结果,到目前为止,除了每行使用单个记录外,仍然没有解决方案:
{"key":"value"}
{"key":"value"}
etc.
这似乎确实是一个频谱特定的问题,因为雅典娜仍然有效
想知道是否有其他人能够让它工作…如果您的表的结构如下所示:
CREATE EXTERNAL TABLE spectrum.testjson(struct<id:varchar(25),
columnName<array<struct<key:varchar(20),value:varchar(20)>>>);
有关更多信息,您可以参考AWS文档:
您可以使用json_extract_path_text来提取元素,也可以使用json_extract_array_element_text('json string',pos[,null_if_invalid]) 例如: 对于第二个索引元素 选择json_extract_array_element_text(“[11111 2113]”,2)
输出:113我已经成功地完成了这项工作,但没有数据分类器。我的JSON文件如下所示:
[
{
"col1": "data_from_col1",
"col2": "data_from_col2",
"col3": [
{
"col4": "data_from_col4",
...
{
]
},
{
"col1": "data_from_col1",
"col2": "data_from_col2",
"col3": [
{
"col4": "data_from_col4",
...
{
]
},
...
]
我从一个爬虫开始获取一个基本的表定义。重要提示:无法将Output下爬虫程序的配置选项设置为更新表定义…,否则稍后重新运行爬虫程序将覆盖下面描述的手动更改。我只使用添加新列
我必须添加'strip.outer.array'属性,并手动添加匿名数组中最顶端的列。初始爬网程序运行的原始架构为:
anon_array array<struct<col1:string,col2:string,col3:array<struct<col4...>>>
partition_0 string
直到今天,这仍然是一个问题。除了你在回答中提到的以外,你还发现了什么吗?@HasanJ自这篇文章以来我所做的所有实现我们都选择每行使用一条记录,而不是一个[匿名]数组。。。所以我不知道是否有一个可行的解决方案。@HassanJ我想知道我的答案是否适用于你和@ComfyToday这是一个有趣的解决方案。我没有看到strip.out.array参数。模式中的前两列是什么?你能在回答中举一个JSON的例子,这样就可以清楚地知道你的文件是什么样子了吗?谢谢你的回答!我添加了一个JSON示例。我已经有了上面的模式——最初的爬虫程序想出了什么,以及我如何手动编辑它以使其与strip.outer.array参数一起工作。如果仍有不清楚的地方,请告诉我。我做了同样的事情,但仍然使用了分类器
$[*]
,它工作正常。这里的关键点是,在手动编辑表之后,确保再次运行爬虫程序。这让我可以使用红移光谱查询数据。
select o.partition_0, o.col1, o.col2, t.col4
from db.tablename o
LEFT JOIN o.col3 t on true;