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都添加雙引號,也會在兩端添加花括號!(為啥為空時需要把value設置成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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot啟動訪問localhost:8080報錯404的解決操作
這篇文章主要介紹了SpringBoot啟動訪問localhost:8080報錯404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
spring boot 3.3.0和mybatis plus 3.5.6版本沖突
這篇文章主要介紹了spring boot 3.3.0和mybatis plus 3.5.6版本沖突的問題解決,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07
SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析
這篇文章主要為大家介紹了SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
解析Java的JNI編程中的對象引用與內(nèi)存泄漏問題
這篇文章主要介紹了Java的JNI編程中的對象引用與內(nèi)存泄漏問題,重點講述了局部和全局引用時一些值得注意的地方,需要的朋友可以參考下2015-11-11
SpringBoot實現(xiàn)固定和動態(tài)定時任務的三種方法
定時器是我們項目中經(jīng)常會用到的,本文主要介紹了SpringBoot實現(xiàn)固定和動態(tài)定時任務的三種方法,具有一定的參考價值,感興趣的可以了解一下2023-09-09
mybatis實現(xiàn)批量插入并返回主鍵(xml和注解兩種方法)
這篇文章主要介紹了mybatis實現(xiàn)批量插入并返回主鍵(xml和注解兩種方法),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

