2014-10-11 152 views
0

我想将我的行数据转换为列。使用循环在HBase中创建多个列限定符

我有状态和访问数据,像这样:

State Visit Month 
AZ  1023 06 
NY  32234 06 
OH  9821 06 
NY  4564 07 
KS  3232 06 
MO  2322 06 
AZ  222  07 

我想我的数据是这样的:

Month AZ KS MO NY  OH 
06  1023 3232 2322 32234 9821 
07  222    4564 

我的数据存储在HBase的

的方式我看到它,我可以按状态过滤数据,然后将新列添加到新表中。 我可以用Pig中的少量列来做到这一点,但没有问题,但我认为这样做很愚蠢,而且我宁愿使用循环。显然,这些都将是同一列家族中的列限定符。

我知道猪没有循环。我一直在试图找到蜂巢问题的解决方案,但目前为止还没有运气。

有没有办法在Pig,Hive,Native Mapreduce或HBase Shell中执行此操作?

回答

0

有一种方法可以在Hive中执行此操作。您可以收集访问次数和月份到地图,然后在新列中引用地图的键。你需要的CollectUDAFhere

查询:

ADD jar /path/to/jar/brickhouse.jar; 
CREATE TEMPORARY FUNCTION collect AS 'brickhouse.udf.collect.CollectUDAF'; 

SELECT month 
    ,state_map['AZ'] AS AZ 
    ,state_map['NY'] AS NY 
    ,state_map['OH'] AS OH 
    ,state_map['KS'] AS KS 
    ,state_map['MO'] AS MO 
FROM (
    SELECT month 
     ,collect(state, visit) AS state_map 
    FROM database.table 
    GROUP BY month 
    ) x 

输出:

06 1023 32234 9821 3232 2322 
07 222  4564  NULL NULL NULL 
+0

我欣赏的答案,但我试图避免明确命名每一个状态。我希望脚本完全自动化,而不必明确指定每列。我以州为例,但是我的真实数据会有数千列,所以我无法实现这个解决方案。 – Michal 2014-10-13 23:55:28