我想将行数据转换为列。
我有状态和访问数据,如下所示:
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中的少量列来完成此任务,但是我认为这样做50次是很愚蠢的,我宁愿使用循环。显然,这些都是同一列族中的列限定符。
我知道Pig没有循环。我一直试图在Hive中找到解决问题的方法,但到目前为止还没有运气。
在Pig,Hive,Native Mapreduce或HBase Shell中是否有办法做到这一点?
最佳答案
Hive中有一种方法可以做到这一点。您可以收集对 map 的访问和月份,然后在新建列时引用 map 的键。您需要here中的CollectUDAF
查询:
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
关于loops - 使用循环在HBase中创建多个列限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309912/