java实现往hive 的map类型字段写数据

 更新时间:2021年07月22日 10:59:42   作者:二十六画生的博客  
这篇文章主要介绍了java实现往hive 的map类型字段写数据操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

往hive 的map类型字段写数据

该表的该字段类型是map<string,string>

对应类的该属性的类型需要定义成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()的字符串写入字段(会有“=”,不能正确组成JSON格式的内容),也不可序列化为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);
    }

得到的则是正确的字段内容!

hive中默认是用“\003”分隔key与value,用“\002”分隔两个键值对!

以上是今天尝试好几种方法整理后的结论!

hive-map类型字段的定义与插入

map类型定义了一种kv结构,在hive中经常使用。

如何定义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的分隔符。

导入数据时,只需要按对应分隔符处理好数据即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解阿里云maven镜像库配置(gradle,maven)

    详解阿里云maven镜像库配置(gradle,maven)

    这篇文章主要介绍了详解阿里云maven镜像库配置(gradle,maven),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • JAVA匿名内部类语法分析及实例详解

    JAVA匿名内部类语法分析及实例详解

    这篇文章主要介绍了JAVA匿名内部类语法分析及实例详解,匿名内部类可以使你的代码更加简洁,它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类。对此感兴趣的可以了解一下
    2020-07-07
  • spring四种依赖注入方式的详细介绍

    spring四种依赖注入方式的详细介绍

    本篇文章主要介绍了spring四种依赖注入方式的详细介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 分享Spring Boot 3.x微服务升级历程

    分享Spring Boot 3.x微服务升级历程

    Spring Boot 3.0.0 GA版已经发布,好多人也开始尝试升级,有人测试升级后,启动速度确实快了不少,这篇文章主要介绍了Spring Boot 3.x微服务升级经历,需要的朋友可以参考下
    2022-12-12
  • java实现合并单元格的同时并导出excel示例

    java实现合并单元格的同时并导出excel示例

    这篇文章主要给大家介绍了关于java实现合并单元格的同时并导出excel的相关资料,文中先进行了简单的介绍,之后给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Java开发基础日期类代码详解

    Java开发基础日期类代码详解

    这篇文章主要介绍了Java开发基础日期类的相关内容,代码通过日期工具类获取指定月份的星期与日期对应关系,以及获取指定月份的所有日期与星期集合等,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    在Spring Boot中使用Spring-data-jpa实现分页查询

    如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。具体实例代码大家参考下本文吧
    2017-07-07
  • IDEA感觉不香了AI智能编程工具Cursor使用图文教程

    IDEA感觉不香了AI智能编程工具Cursor使用图文教程

    这篇文章主要介绍了IDEA感觉不香了AI智能编程工具Cursor使用,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 程序包org.springframework.boot不存在的问题解决

    程序包org.springframework.boot不存在的问题解决

    本文主要介绍了程序包org.springframework.boot不存在的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Spring Cloud 覆写远端的配置属性实例详解

    Spring Cloud 覆写远端的配置属性实例详解

    这篇文章主要介绍了Spring Cloud 覆写远端的配置属性的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论