Redshift查询数组<varchar(128)>返回编码值

2023-03-22
前端之家小编收集整理的Redshift查询数组<varchar(128)>返回编码值内容,希望整理的这个开发编程问题Redshift查询数组<varchar(128)>返回编码值能够快速解决!

代码问题

我们在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

Redshift正确返回insert_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]

当我们在雅典娜中以SELECT * FROM my_table运行相同的查询时,它将返回具有正确数据的数组。

我在这里应该做什么?

问题答案

Redshift不支持嵌套数据类型。

Redshift频谱对嵌套数据类型具有简单的支持-选择之前,arraymap之类的集合类型必须取消嵌套(分解)。

取消嵌套基本上对集合所属行的所有集合项进行CROSS JOIN处理。

请注意语法:... FROM TABLE a,a.collecion_column B ...-在经典查询中,它是CROSS JOIN的同义词。

因此,您在"o"列中看到的是attribution_ids数组中的一项。

如果觉得前端之家所整理的内容很不错的话,欢迎点击下方分享按钮,转发给身边开发程序员好友。

编程问答


是否可以将 Python 程序转换为 C/C++? 我需要实现几个算法,我不确定性能差距是否足以证明我在 C/C++ 中执行它时所经历的所有痛苦(我不擅长)).我想写一个简单的算法,并根……
我想使用 NTT 进行快速平方(请参阅快速 bignum 平方计算),但即使对于非常大的数字……超过 12000 位.
C++ 标准在 3.3.2声明点\"中包含一个半著名的令人惊讶\"名称查找示例: int x = x; 这用自身初始化 x,它(作为原始类型)未初始化,因此具有不确定的值(假设它是一个自动变……
以下代码: myQueue.enqueue(\'a\'); myQueue.enqueue(\'b\'); cout << myQueue.dequeue() << myQueue.dequeue();
据我所知,写时复制不是在 C++11 中实现符合标准的 std::string 的可行方法,但是当它最近在讨论中出现时,我发现我自己无法直接支持这种说法.