最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)往hive 的map類型字段寫數(shù)據(jù)

 更新時間:2021年07月22日 10:59:42   作者:二十六畫生的博客  
這篇文章主要介紹了java實現(xiàn)往hive 的map類型字段寫數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

往hive 的map類型字段寫數(shù)據(jù)

該表的該字段類型是map<string,string>

對應類的該屬性的類型需要定義成String,不可定義成Map<String,String> ?。?/p>

方法1:

建表語句定義map的分隔符:

row format delimited
  fields terminated by '|'
  collection items terminated by ','
  map keys terminated by ':'
  NULL DEFINED AS ''

然后在java中封裝好map后,不可直接把map.toString()的字符串寫入字段(會有“=”,不能正確組成JSON格式的內(nèi)容),也不可序列化為JSON格式的字符串后寫入字段(會加很多“\”)!需要自己定義toString的方法:

    public static String insertToMap(Map<String, String> map) {
        StringBuilder sb = new StringBuilder();
        Set<String> set = map.keySet();
        for (String s : set) {
            sb.append(s).append(":").append(StringUtils.isBlank(map.get(s)) ? "NULL" : map.get(s)).append(",");
        }
        String str = sb.toString();
        return str.substring(0, str.length() - 1);
    }

字符串是不帶雙引號和兩端花括號的字符串,這樣插入到字段時,hive會自動為key和value都添加雙引號,也會在兩端添加花括號?。樯稙榭諘r需要把value設(shè)置成NULL?如果為空不寫時,怕hive處理時出錯,可能會處理成帶四個雙引號的NULL,所以手動指定空為"NULL"字符串)

方法2:

建表語句不用定義map的分隔符:

然后在java中封裝好map后,不可直接把map.toString()的字符串寫入字段,也不可序列化為JSON格式的字符串后寫入字段!需要自己定義toString的方法:

    public static String insertToMap(Map<String, String> map) {
        StringBuilder sb = new StringBuilder();
        Set<String> set = map.keySet();
        for (String s : set) {
            sb.append(s).append("\003").append(StringUtils.isBlank(map.get(s)) ? "NULL" : map.get(s)).append("\002");
        }
        String str = sb.toString();
        return str.substring(0, str.length() - 1);
    }

得到的則是正確的字段內(nèi)容!

hive中默認是用“\003”分隔key與value,用“\002”分隔兩個鍵值對!

以上是今天嘗試好幾種方法整理后的結(jié)論!

hive-map類型字段的定義與插入

map類型定義了一種kv結(jié)構(gòu),在hive中經(jīng)常使用。

如何定義map類型呢?

create table employee(id string, perf map<string, int>)     
ROW FORMAT DELIMITED                                        
FIELDS TERMINATED BY '\t'                              
COLLECTION ITEMS TERMINATED BY ','                     
MAP KEYS TERMINATED BY ':';    

其中fields是字段分隔符,collection是每個kv對的分隔符,map keys是k與v的分隔符。

導入數(shù)據(jù)時,只需要按對應分隔符處理好數(shù)據(jù)即可。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

凭祥市| 桃江县| 科技| 德钦县| 梅河口市| 灵石县| 定州市| 大兴区| 靖西县| 彭水| 柘城县| 台山市| 文化| 清新县| 秦皇岛市| 黄浦区| 准格尔旗| 江安县| 庆元县| 赤水市| 虹口区| 阿拉善左旗| 四平市| 长武县| 荣昌县| 玉屏| 大丰市| 房产| 依安县| 武山县| 东宁县| 于都县| 罗平县| 信宜市| 江油市| 合阳县| 且末县| 文成县| 平顶山市| 五寨县| 河北省|