2017-01-30 129 views
1

我有蜂巢表格中的这好比移调蜂巢表

| ID | Code | Proc1 | Proc2 | 
| i | A  | B  | C  | 
| i | 1  | 2  | 3  | 

我希望我的输出是:

| i | A  | 1  | 
| i | B  | 2  | 
| i | C  | 3  | 

我已经阅读了很多其他文章,并找出存在没有直接的方法在蜂巢中进行转置。任何帮助,将不胜感激。

+0

的[简单的方法来转在SQL列和行?(可能的复制http://stackoverflow.com/questions/13372276/simple-way -to-转柱和-rows-in-sql) – Ollaw

+0

[有没有办法在Hive中转置数据](http://stackoverflow.com/questions/37436710/is-there-a-way-to-transpose-data-in -hive) – gobrewers14

+0

@ gobrewers14 - 这不是我要找的。不过,我可以尝试使用地图功能,看看我是否可以达到任何解决方案。 – salmanbw

回答

1

这是一种方法来做你正在请求。但是,我必须说,对于任何合理数量的行来说,写这些都是不切实际的。

查询

SELECT id 
    , new[0] AS col0 
    , new[1] AS col1 
FROM (
    SELECT id 
    , COLLECT_LIST(code) AS a 
    , COLLECT_LIST(proc1) AS b 
    , COLLECT_LIST(proc2) AS c 
    FROM database.table 
    GROUP BY id) x 
LATERAL VIEW EXPLODE(ARRAY(a, b, c)) exptbl AS new 

输出

id  col0 col1 
i  A  1 
i  B  2 
i  C  3 
+0

我想,作为我的答案的替代方案,您可以使用函数来生成此代码,以测试更好的性能。请注意,这也将超越仅使用HQL。 (使用普通的HQL,你将被迫在这个答案中显示硬编码) –

+0

@ gobrewers14 - 谢谢你,这正是我所寻找的。 – salmanbw

0

有没有办法做到这一点在蜂巢没有硬编码。假设你的蜂巢数据库是一个典型的生态系统,我建议以下步骤:

  1. 加载数据
  2. 使用脚本语言如Python(或R)
  3. 创建目标表移调数据相关的脚本语言
  4. 将数据写入到目标表