从 Hive QL 中的数组获取正确的值

Posted

技术标签:

【中文标题】从 Hive QL 中的数组获取正确的值【英文标题】:Get correct value from array in Hive QL 【发布时间】:2018-09-26 00:49:37 【问题描述】:

我有一个 Wrapped Array,当我使用 LATERAL VIEW EXPLODE 进行查询时,我只想获得对应的 value struct

示例结构:

列名:数组

WrappedArray([null,theVal,valTags,[123,null,null,null,null,null],false], [null,theVar,varTags,[abc,null,null,null,null,null],false])

架构是

array<struct<id:string,name:string,type:string,value:struct<member0:string,member1:bigint,member2:int,member3:double,member4:float,member5:boolean>,shouldIndex:boolean>>

我的查询:

SELECT DISTINCT theName, allValues
FROM table 
LATERAL VIEW EXPLODE(column.name) theTab1 AS theName
LATERAL VIEW EXPLODE(column.value.member0) theTab2 AS allValues
WHERE theName = 'theVal'

我的结果:

___________________________
|**theName**|**allValues**|
___________________________
|theVal     |     123     |
___________________________
| theVal    |     abc     |
___________________________

我需要:

___________________________
|**theName**|**allValues**|
___________________________
|theVal     |     123     |
___________________________

如何修复我的查询以获得上述结果?

【问题讨论】:

【参考方案1】:

不需要在结构顶部进行额外的爆炸。您应该能够像这样执行该操作

SELECT DISTINCT theName, column.value.member0
FROM table 
LATERAL VIEW EXPLODE(column.name) theTab1 AS theName
WHERE theName = 'theVal'

【讨论】:

做同样的事情。它返回 allValues 的所有结果 这没有意义。您可以从您的表格配置单元中打印 select * 吗?此外,在 hive 中运行 describe yourtable 并添加结果。如果你用 1 个元素数组分解记录,结果应该是 1 条记录...

以上是关于从 Hive QL 中的数组获取正确的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 json 数组中获取 hive 中的字符串列表

如何从包含数组的对象数组中获取不同的值

在SQL中如何从数组中获取值再进行查询

如何通过 Microsoft Azure Query 从 json 文件中的数组中获取数据

如何从两个蜂巢数组中获取不匹配的元素

如何获取从 Knex 返回的值(数组中的对象,即数组中的对象)