HIVE中map类型操作

2023-11-10

HIVE中map类型操作

前言

今天写了一下hive中map类型字段,如何在原有基础上在增加新的值。

1.建表

代码如下(示例):

create table aa_test(
name string,
age int,
source map<string,string>
)
ROW FORMAT DELIMITED fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':';

2.插入数据

代码如下(示例):

insert into aa_test(name,age,source) values('zhang',15,str_to_map('yuwen:100,shuxue:98,yingyu:88,wuli:89,huaxue:100'));

查询结果:
在这里插入图片描述

3.具体操作

根据上图展示的结果,目前想得到的结果是在source字段原有数据的基础上,增加"name":"zhang:,“age”:"14"这样的结果。sql如下:

select name,age,
str_to_map(CONCAT_WS(',',collect_set(concat(source_key,":",source_value)),collect_set(concat("name",":",name)),collect_set(concat("age",":",age))),",",":")
from
(select name,age,keys_1 source_key,value_1  source_value from aa_test a
LATERAL VIEW explode(a.source) b as keys_1,value_1) t
group by name,age;

#注释:
   1. str_to_map(字符串参数, 分隔符1, 分隔符2)
        使用两个分隔符将文本拆分为键值对。
        分隔符1将文本分成K-V对,分隔符2分割每个K-V对。对于分隔符1默认分隔   符是 ',',对于分隔符2默认分隔符是 '='
    
  2.CONCAT_WS()
        如何指定参数之间的分隔符
        使用函数CONCAT_WS()。
        使用语法为:CONCAT_WS(separator,str1,str2,)
        CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
        
   3.CONCAT(str1,str2,)                       
     返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为  NULL。可以有一个或多个参数。
     
   4. collect_set(col)
   concat_ws常和collect_set和group by结合起来一起用
   collect_set去除重复元素;collect_list不去除重复元素
   collect_set(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
   hive中常存在先通过group by对一字段去重后,还需要对另一字段也去重,这时候就需要collect_set()。
   
   5.explode()
       explode()的功能是行转列.explode作用是处理map结构的字段
       需要注意的是LATERAL VIEW explode(a.source) b as keys_1,value_1 这条语句中的b是虚表的名称,这个字段是必须要有的.
       lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

运行结果:
在这里插入图片描述


总结

对hive中map类型的字段处理完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HIVE中map类型操作 的相关文章

随机推荐

  • 嵌入式数据库知识概括

    嵌入式数据库知识概况 嵌入式数据库 Derby SQLite H2 总结 嵌入式数据库 嵌入式数据库 Embedded Database 简介 从软件角度来说 数据库分类为两种 第一种 数据库服务器 Database Server 第二种
  • Unity控制在面板上显示变量

    unity之定制Inspector Ngui 刚接触Unity时知道脚本的共有变量会在Inspector中显示出来 但是有一些确不行 前些日子添加按钮的音效 我用的是Ngui按钮也基本是UIButton 但是给button一个个挂UIPla
  • Maven配置环境变量

    在上文java在Windows配置Path环境变量 中我们找到了环境变量所在位置我们直接打开环境变量 第一步 在环境变量页面点击新建 第二步 配置MAVEN HOME 在变量名中输入 MAVEN HOME 在变量值中输入jdk安装位置 D
  • C语言qsort函数详解

    目录 一 qsort函数的使用 二 qsort函数的模拟 一 qsort函数的使用 快排函数qsort是C的库函数 它可以对输入的任何类型的数组排序 通过该函数的函数声明我们可以看出它的使用方法 举个栗子 include
  • 还不会部署高可用的kubernetes集群?企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1.23.7...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 原文地址 还不会部署高可用的kubernetes集群 企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1 23 7 本
  • Qt学习笔记1:创建一个QT的空项目

    初始QT 在创建QT项目时系统提供了几个不同的模板 点选模板 系统会自动为用户创建好一个基础框架方便开发 这里 我们试着不适用系统提供的基础框架 自己创建一个空的QT项目 创建工程 1 进入QT界面 选择新建工程 在跳出的选项中选择其他项目
  • Linux·i2c驱动示例

    I2C 是很常用的一个串行通信接口 常用于连接各种外设 传感器等器件 一 Linux I2C 驱动框架 Linux 内核将 I2C 驱动分为两部分 I2C 总线驱动 I2C 总线驱动就是 SOC 的 I2C 控制器驱动 也叫做 I2C 适配
  • 原型和原型链

    1 原型 原型 prototype 一个对象 概念 每一个函数上 都有一个prototype 原型对象 使用场景 一般使用在构造函数上 如果给构造函数的原型prototype添加方法 构造函数构造出来的对象就能共享原型上所有的方法 var
  • 写一篇关于OpenAi基金的介绍

    OpenAI基金是由业界领先的技术领导者组成的非营利性机构 旨在推进人工智能的发展 以此来改善人类的生活 OpenAI的目标是建立开放 可靠的智能机器 能够推动人类的发展 改善生活质量和解决全球性问题 OpenAI通过支持研究和发展人工智能
  • Linux SPI总线和设备驱动架构之一:系统概述

    origin http blog csdn net droidphone article details 23367051 SPI是 Serial Peripheral Interface 的缩写 是一种四线制的同步串行通信接口 用来连接微
  • Linux驱动开发——(使用中断处理)gpio(6)

    Linux内核中断编程 为什么会有中断机制 中断产生的根本原因就是因为外设的数据处理速度远远慢于CPU 比如使用CPU读取UART接收缓冲区的数据 当使用CPU读取UART接收缓冲区的数据时 发现UART接收缓冲区的数据并没有准备就绪 一般
  • 在CentOS / RHEL上安装ThingsBoard CE

    在CentOS RHEL上安装ThingsBoard CE 1 安装之前 硬件要求 要在一台机器上运行ThingsBoard和PostgreSQL 您将至少需要1Gb RAM 要在单台计算机上运行ThingsBoard和Cassandra
  • RocksDB源码分析之db_test LevelReopenWithFIFO

    TEST F DBTest LevelReopenWithFIFO const int kLevelCount 4 const int kKeyCount 5 const int kTotalSstFileCount kLevelCount
  • Python正则表达式入门

    Python3 正则表达式 正则表达式是一个特殊的字符序列 它能帮助你方便的检查一个字符串是否与某种模式匹配 本文主要阐述re包中的主要函数 在阐述re包中的函数之前 我们首先看议案正则表达式的模式 即使用特殊的语法来表示一个正则表达式 1
  • Unity导入模型后模型动画无法勾选loop time

    导入模型后发现动画无法勾选 点击edit跳转到 原因不明 但可以直接选中动画后 ctrl d复制一个 然后就可以编辑
  • 在ubuntu虚拟机环境上搭建nginx服务器

    1 1安装nginx sudo apt install nginx 检查是否安装 nginx v nginx文件安装完成之后的文件位置 usr sbin nginx 主程序 etc nginx 存放配置文件 usr share nginx
  • vue开发,node.js启动报错‘digital envelope routines

    vue开发 node js启动报错 digital envelope routines 最近在学习vue 打算使用node js启动一下自己的vue项目 毕竟 现在主流的都是这个本地服务器 肯定有它的好处 但是启动总是报错 各种错误 耐住性
  • 第三章 搜索策略——博弈树的启发式搜索

    1 概述 博弈是一类具有智能行为的竞争活动 如下棋 打牌 战争等 博弈可分为双人完备信息博弈和机遇性博弈 所谓双人完备信息博弈 就是两位选手对垒 轮流走步 每一方不仅知道对方已经走过的棋步 而且还能估计出对方未来的走步 对弈的结果是一方赢
  • vue生命周期

    vue生命周期学习
  • HIVE中map类型操作

    HIVE中map类型操作 前言 今天写了一下hive中map类型字段 如何在原有基础上在增加新的值 1 建表 代码如下 示例 create table aa test name string age int source map