我正在使用gzipped JSON編碼文件在Amazon的Elastic MapReduce上創建Hive表。我用這JSON SERDE:http://code.google.com/p/hive-json-serde/Hive:將逗號分隔的字符串轉換爲數組以生成表格功能
未編碼文件看起來是這樣的:
{"id":"101", "items":"A:231,234,119,12"}
{"id":"102", "items":"B:13,89,121"}
...
我想打造的「項目」列的排列與用戶一個表格生成功能。我想要的數組將是整數的「分解」CSV,忽略「:」和之前的字母。我希望能夠GROUP BY項目整數(231,234等)或加入他們對其他表。改變這個文件的格式會很困難,我所有的舊數據都以這種格式存儲,所以我想在Hive中解決這個問題,而不需要改變如何存儲數據。
有沒有辦法讓我這樣做?
編輯:
感謝@ mark-grover,這工作!
我做了這樣的事情:
SELECT id, item FROM my_table LATERAL VIEW explode(split(substr(items, 3, length(items) - 2), ',')) t1 AS item
獲得:
101 231
101 234
101 119
101 12
102 13
102 89
102 121
在這一過程中,我發現了我想要做的多一點。我還想選擇每個項目在CSV中的位置。所以我想輸出看起來像:
101 231 0
101 234 1
101 119 2
101 12 3
102 13 1
102 89 2
102 121 3
這裏的任何想法?再次
編輯:
我想出了我的後續問題做這樣的事情:
SELECT id, item, find_in_set(item, substr(items, 3, length(items) - 2)) AS position
FROM my_table LATERAL VIEW explode(split(substr(items, 3, length(items) - 2), ',')) t1 AS item
謝謝,馬克!我有一個後續問題,可能很難或不可能(請參閱我對原始問題的編輯)。如果您有任何想法,請告訴我。 – dubois
我編輯了我的答案來回答你的第二個問題。祝你好運! –
啊,謝謝,馬克 - 尤其是指向UDF代碼的指針。我最終找出了使用find_in_set()的東西,所以我不必編寫自己的UDF。非常感謝您的幫助。 – dubois