COLLECT_SET()
は集約関数なので、物事を結合しようとすると実際には有効ではありません。試してみることの1つはCOMBINE()
です。 UDFのこのライブラリhereにあります。
table0:あなたのようないくつかのデータを持っていたと仮定し
idx map_kv
0 {2:[1,2,3,4], 3:[5,6,7,8,9]}
TABLE1:
idx map_kv
0 {2:[5,6,7,8,9], 3:[1,2,3,4]}
次にあなたが
クエリ行うことができます:
ADD JAR /path/to/jar/brickhouse-0.7.1.jar;
CREATE TEMPORARY FUNCTION COLLECT AS 'brickhouse.udf.collect.CollectUDAF';
CREATE TEMPORARY FUNCTION COMBINE AS 'brickhouse.udf.collect.CombineUDF';
SELECT idx
, COLLECT(map_key, arr) AS final_map
FROM (
SELECT a.idx
, a.map_key
, COMBINE(map_val_0, map_val_1) AS arr
FROM (
SELECT idx
, map_key
, map_val_0
FROM database.table0
LATERAL VIEW EXPLODE(map_kv) exptbl0 AS map_key, map_val_0) a
JOIN (
SELECT idx
, map_key
, map_val_1
FROM database.table1
LATERAL VIEW EXPLODE(map_kv) exptbl1 AS map_key, map_val_1) b
ON a.idx=b.idx AND a.map_key=b.map_key) c
GROUP BY idx;
これが生成されます。
出力:
idx final_map
0 {2:[1,2,3,4,5,6,7,8,9], 3:[5,6,7,8,9,1,2,3,4]}
http://stackoverflow.com/questions/26723159/hive-concat-a-map – Andrew
データとの完全な例を追加してください。 (メタデータではない) –