亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

對(duì)應(yīng)類的該屬性的類型需要定義成String,不可定義成Map<String,String> ??!

方法1:

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

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

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

字符串是不帶雙引號(hào)和兩端花括號(hào)的字符串,這樣插入到字段時(shí),hive會(huì)自動(dòng)為key和value都添加雙引號(hào),也會(huì)在兩端添加花括號(hào)?。樯稙榭諘r(shí)需要把value設(shè)置成NULL?如果為空不寫時(shí),怕hive處理時(shí)出錯(cuò),可能會(huì)處理成帶四個(gè)雙引號(hào)的NULL,所以手動(dòng)指定空為"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中默認(rèn)是用“\003”分隔key與value,用“\002”分隔兩個(gè)鍵值對(duì)!

以上是今天嘗試好幾種方法整理后的結(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是每個(gè)kv對(duì)的分隔符,map keys是k與v的分隔符。

導(dǎo)入數(shù)據(jù)時(shí),只需要按對(duì)應(yīng)分隔符處理好數(shù)據(jù)即可。

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

相關(guān)文章

  • springboot 接收List 入?yún)⒌膸追N方法

    springboot 接收List 入?yún)⒌膸追N方法

    本文主要介紹了springboot 接收List 入?yún)⒌膸追N方法,本文主要介紹了7種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Java 中運(yùn)行字符串表達(dá)式的方法

    Java 中運(yùn)行字符串表達(dá)式的方法

    這篇文章主要介紹了Java 中運(yùn)行字符串表達(dá)式的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Java連接六類數(shù)據(jù)庫技巧全攻略

    Java連接六類數(shù)據(jù)庫技巧全攻略

    本文主要為大家介紹了Java與Oracle、DB2、Sql Server、Sybase、MySQL、PostgreSQL等數(shù)據(jù)庫連接的方法。
    2015-09-09
  • Java構(gòu)造函數(shù)通透理解篇

    Java構(gòu)造函數(shù)通透理解篇

    這篇文章主要介紹了Java構(gòu)造函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 最新評(píng)論