database - Redshift 查询数组返回编码值
问题描述
我们在 Redshift 中创建了一个外部表,如下所示:
CREATE EXTERNAL TABLE spectrum.my_table(
insert_id varchar(128),
attribution_ids array<varchar(100)>
PARTITIONED BY (
event_date varchar(128))
STORED AS PARQUET
LOCATION
's3://my_bucket/my_path'
我们做的一切都很完美,但是当我们array<varchar>
按照文档描述查询该字段时:
SELECT c.insert_id, a FROM
spectrum.my_table c, c.attribution_ids a LIMIT 10
Redshiftinsert_id
正确返回,但它返回的数组已编码,请参见下文:
"insert_id", "o"
"0baed794-df11-4032-b13c-aac5d0deced7" "0b8ad4fd9af12804ffaea83f4886672b"
源数据应如下所示:
"0baed794-df11-4032-b13c-aac5d0deced7", [0baed794-df11-4032-b13c-aac5d0deced7, 0baed794-df11-4032-b13c-aac5d0deced7]
当我们在 Athena 中运行相同的查询时,SELECT * FROM my_table
它会返回包含正确数据的数组。
我应该在这里做什么?
解决方案
Redshift 不支持嵌套数据类型。
Redshift 频谱对嵌套数据类型具有简单的支持 - 集合类型,例如array
或map
必须在选择之前取消嵌套(分解)。
取消嵌套基本上是对CROSS JOIN
集合所属行的所有集合项中的一种。
注意语法:... FROM TABLE a, a.collecion_column B ...
- 在经典查询中是CROSS JOIN
.
因此,您在"o"
列中看到的是数组中的一项attribution_ids
。
推荐阅读
- vue.js - 路由到最后一个活动子组件
- xcode-ui-testing - 如何让 XCUITest 应用程序(XCUI 测试应用程序,而不是 SUT)访问照片库?
- java - 随着 Generex lib 使用正则表达式之一获得非人类可读的结果
- c# - 更新到新项目时,uwp sqlite add-migration 崩溃
- sapui5 - SAPUI5 再次写入完整的 DOM 而不是增量?
- algolia - 显示搜索结果时呈现标题
- json - Artifactory 查询语言中的排序属性
- python - Python日期时间到纪元
- python-3.x - 基于距离的分组算法
- c# - 使用带有 UDP 且没有麦克风的 NAudio