转置蜂巢表

时间:2017-01-30 10:17:21

标签: sql hadoop hive hiveql

我在hive A中有一张表,就像

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

我希望我的输出为:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

没有硬编码就无法在Hive中执行此操作。假设您的hive数据库位于典型的生态系统中,我建议您执行以下步骤:

  1. 加载数据
  2. 使用脚本语言(如python(或R)
  3. )转置数据
  4. 使用相关脚本语言
  5. 创建目标表
  6. 将数据写入目标表