Hadoop 分解配置单元中的结构数组

Hadoop 分解配置单元中的结构数组,hadoop,mapreduce,hive,hiveql,Hadoop,Mapreduce,Hive,Hiveql,这是下面的蜂箱表 CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable ( USER_ID BIGINT, NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> ) 在分解阵列后,有没有办法从HiveQL获得以下输出 **USER_ID** | **PRODUCT_ID** | **TIMESTAMPS** ------------+--------

这是下面的蜂箱表

CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable
(
USER_ID BIGINT,
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
在分解阵列后,有没有办法从HiveQL获得以下输出

**USER_ID**  |  **PRODUCT_ID**  |   **TIMESTAMPS**
 ------------+------------------+----------------
1015826235      220003038067       1340321132000
1015826235      300003861266       1340271857000
已更新

我编写这个查询是为了以上面的格式获得输出,但是它没有以我想要的方式给出结果

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2;

谁能帮我一下我做错了什么?如果您有任何建议,我们将不胜感激。

您只需分解一次(与侧视图结合使用)。分解后,您可以使用一个新列(在我的示例中称为prod_和_ts),它将是struct类型。然后,您可以解析这个新结构列的product_id和timestamps成员,以检索所需的结果

SELECT
   user_id,
   prod_and_ts.product_id as product_id,
   prod_and_ts.timestamps as timestamps
FROM 
   SampleTable 
   LATERAL VIEW explode(new_item) exploded_table as prod_and_ts;

如果您使用的是Hive 0.10或更高版本,还可以使用
inline(ARRAY)
。它将结构数组分解为一个表。

您可以按以下方式分解数组:

select USER_ID,items from Sample_Table lateral view explode(NEW_ITEM) temp_table as items;

像这样的怎么样?选择用户标识、产品标识和产品标识作为产品标识,选择产品标识和时间戳作为时间戳,从可抽样侧视图分解(新项目)分解表中选择产品标识和时间戳作为产品标识@马克,谢谢,马克,成功了,你能把这个作为答案贴出来让我接受吗。你能不能也看看这个问题。因为还没有人回答这个问题。这将对我有很大帮助。谢谢你的时间,很高兴能帮上忙。张贴了答案。我们很快就会看另一个问题!嘿,韦比,我只是想知道你们问了一个很好的问题,但我还停留在第一步,只是我无法在蜂巢中创建结构数组。如果你能帮我创建一系列结构图和一个我已经发布的问题,这将非常有帮助,因为这更像是一个与绩效衡量相关的理论问题。。我很抱歉,如果我打扰你这么多,所以,这里没有那么多大数据专家。这就是我打你的原因。非常感谢你的帮助…嗨,马克,谢谢你的帮助。我已经发布了类似的问题,涉及到蜂巢中结构数组的爆炸,但这次数据有所不同。你能看看这是否可行吗?你好,Mark,我们如何分解和创建多个数组列的视图。你能按我的要求帮忙吗?你知道我们怎么做多重爆炸吗?我的每条记录都有2列结构,我需要对它们进行分解,但当我使用两个连续的分解时,我将通过一个键“分组”。它返回一些错误!这是一个有用的答案,但并不能完全回答这个问题。这样,顶级字段,即
USER\u ID
不在结果中。
select USER_ID,items from Sample_Table lateral view explode(NEW_ITEM) temp_table as items;