根据地图列中的键选择数据

Posted

技术标签:

【中文标题】根据地图列中的键选择数据【英文标题】:Selecting data based on key in map column 【发布时间】:2021-07-06 09:36:12 【问题描述】:

我有一个复杂的数据类型作为列,它是一个带有嵌套数组的映射:map<int,array<int>>。数据如下所示:

| date       | id | info                      |
|------------|----|---------------------------|
| 2021-07-01 | 1  | 123:[a,b,c],111:[3,6,9] |
| 2021-07-01 | 2  | null                      |
| 2021-07-01 | 3  | 123:[1,3]               |
| 2021-07-01 | 4  | 40:[2]                  |

如何根据 info 列的 key 进行过滤?例如,要返回所有以123 为键的行?我看到的文档似乎没有示例 - https://cwiki.apache.org/confluence/display/hive/languagemanual+types#LanguageManualTypes-ComplexTypes

预期的输出如下所示:

| date       | id | info                      |
|------------|----|---------------------------|
| 2021-07-01 | 1  | 123:[a,b,c],111:[3,6,9] |
| 2021-07-01 | 3  | 123:[1,3]               |

【问题讨论】:

【参考方案1】:

只需过滤info[123] is not null:

select * 
from table
where info[123] is not null

【讨论】:

以上是关于根据地图列中的键选择数据的主要内容,如果未能解决你的问题,请参考以下文章

在火花数据框中的每一行的地图类型列中按键排序

根据Excel中的逻辑从2列中检索最大数据

熊猫根据索引标签选择特定列中的值[重复]

根据单个列中的多个条件选择多个列

如何根据其他列中的条件从某个 ID 中选择所有值?

如何根据列中的逗号分隔值进行选择