關於hive的transform函數對於集合的輸入輸出

HIVE官方介紹了關於Transform的基礎使用方法,但是對於關於存在集合的情況介紹並不清楚

1. 列的分隔符大家都知道是TAB,但如果列的類型是array<int>,array如何傳遞給transform呢?

array<int>輸出給transform腳本的格式是這樣: [1,null,2]

即前後被中括號括起來,逗號分隔,如果item爲空則輸出字符串null

2. 如果是array<string>呢?怎麼區分字符串null與真正的空?

array<int>輸出給transform腳本的格式是這樣: [“hello”,“null“,null],字符串都被雙引號引起來了,所以字符串null與真正的null可以正確區分。

3. map<int, string>是怎麼輸出呢?

map<int, string>輸出給transform腳本的格式是這樣: {33:"good",4:"bad"},被大括號括起來。

4. struct<a:int, b:string>是怎麼輸出呢?

struct<a:int, b:string>輸出給transform腳本的格式是這樣: {"a":null,"b":null}


其實總結起來就是一句,json格式,與select出來看見的一致。但是,問題來了,我們怎麼輸出一個array<int>,難道也是[1,null,2]這種格式嗎,這是不行的,輸出的時候,不能帶中括號、大括號,而是用\002作爲劃分items的分隔符,\003作爲劃分key value的分隔符(HIVE內部其實還有\004-\008作爲嵌套分隔符)


以上是在HIVE 1.2.1上測試結論。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章