Hive:map字段存储和取用 ( str_to_map函数 )

str_to_map(字符串参数, 分隔符1, 分隔符2)

使用两个分隔符将文本拆分为键值对。

分隔符1将文本分成K-V对,分隔符2分割每个K-V对。对于分隔符1默认分隔符是 ‘,‘,对于分隔符2默认分隔符是 ‘=‘

例子:

1. 创建map字段

DROP TABLE IF EXISTS tmp.tmp_str_to_map;
CREATE TABLE IF NOT EXISTS tmp.tmp_str_to_map
(
ocolumn string comment ‘原始字段‘,
rcolumn map<string,string> comment ‘map字段‘
);

  

2. concat + str_to_map函数

用concat + & 取表字段拼接成map类型

insert overwrite table tmp.tmp_str_to_map
SELECT
concat(‘&crowd:‘, m0.id,‘&clicker:‘,m0.dui_leader,‘&sen:‘,m0.application_type) ocolumn,
str_to_map(concat(‘column1:‘, m0.id,‘&column2:‘,m0.dui_leader,‘&column3:‘,m0.application_type), ‘&‘, ‘:‘) rcolumn
FROM tmp.tmp_adhoc_detail_20180927 m0
limit 1
;

  

3. 取用map里的字段,用[""]即可

select
rcolumn,
rcolumn["column1"] column1
from tmp.tmp_str_to_map;

4. 也可以直接转换取用,而不需要存储字段

SELECT
  m0.id column1,
  str_to_map(concat(‘column1:‘, m0.id,‘&column2:‘,m0.dui_leader,‘&column3:‘,m0.application_type), ‘&‘, ‘:‘)["column1"] column1_1
from tmp.tmp_adhoc_detail_20180927 m0 limit 1

  

5. 结果:

rcolumn
column1
{"column1":"1","column2":"李某某","column3":"创新班"} 1

原文地址:https://www.cnblogs.com/skyEva/p/10168402.html

时间: 2024-08-06 15:48:47

Hive:map字段存储和取用 ( str_to_map函数 )的相关文章

Hive表种map字段的查询取用

建表可以用 map<string,string> 查询时可以按照 aaa[bbb], aaa 是map字段名,bbb是其中的参数名,就可以取到这个参数的值了 当参数名bbb是string时,需要加双引号.例: aaa: {"url":"http://Detail?activityId=7"} aaa["url"] 就能获得 http://Detail?activityId=7 了 原文地址:https://www.cnblogs.co

14、Hive压缩、存储原理详解与实战

1.Hive 压缩 1.1数据压缩说明 压缩模式评价: (1)压缩比 (2)压缩时间 (3)已经压缩的是否可以再分割:可以分割的格式允许单一文件有多个Mapper程序处理,才可以更好的并行化. Hadoop编码/解码器方式: 1.2数据压缩使用 压缩模式评价 可使用以下三种标准对压缩方式进行评价 1.压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好 2.压缩时间:越快越好 3.已经压缩的格式文件是否可以再分割:可以分割的格式允许单一文件由多个Mapper程序处理,可以更好的并行化 常见压缩

SQLServer BIT字段存储

SQLServer  BIT字段存储 Author:zfive5 Email:[email protected] 引子 和同事探讨BIT怎么存储,发生了分歧 create  table A1 ( a CHAR(5), b bit, c CHAR(5), d BIT ) 由于之前成天再看<存储引擎>,深知这样定义表字段也会把两个BIT压缩成1个BYTE 而是同事说会分别存2个BYTE 开始证明 正文 在证明前,列出一些工具SQL: CREATE FUNCTION convert_page_num

hadoop笔记之Hive的数据存储(桶表)

Hive的数据存储(桶表) Hive的数据存储(桶表) 桶表 桶表是对数据进行哈希取值,然后放到不同文件中存储. 比如说,创建三个桶,而创建桶的原则可以按照左边表中学生的名字来创建对应的桶.这样子把左边的数据存到桶里面来的时候可以把学生名字经过哈希运算,把相同哈希运算的值的列存放在同一个桶当中.比如Tom.Jerry.Scott经运算以后它们的哈希值是一样的,那么这三个人的信息就会存放在相同的一个桶里面. 有了桶表以后,就能够降低系统的文件块,从而提高查询速度 ○ 如何创建桶表?(用名字进行创建

[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式

我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------> 从左边图转换成右边图,像这种需求,我们难免会遇到. 今天我写了个存储过程来解决这种问题.主要方式是利用master..spt_values表. 具体存储过程如下: -- Author: LHM -- Create date: 2015-01-10 -- Description: 把表中某一个列按照逗号拼接列表 --示例: EXEC [Sp_Str

HIVE RCFile高效存储结构

本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在 MapReduce环境下的大规模数据分析中扮演重要角色. Facebook曾在2010 ICDE(IEEE International Conference on Data Engineering)会议上介绍了数据仓库Hive.Hive存储海量数据在Hadoop系统中,提供了一套类数据库的数据存储和处理机制.它采用类 SQL语言对数据进行自动化管理和处理,经过语句解析和转换,最终生成基于H

Mysql text类型字段存储提示错误信息 String data,right truncated:1406 Data too long for column &#39;content&#39; at row 1

String data,right truncated:1406 Data too long for column 'content' at row 1 当Mysql提示如下时: 1.首先查看存入的文本内容的大小,根据内容大小设置类型 如果超出,根据大小进行更换类型 2.如果还是超出那可能是Mysql根据配置文件限制Server接受数据包大小,有时候大的插入和更新会受max_allowed_packet参数限制,导致写入或者更新失败. 查看目前配置: 代码如下: 以上说明目前的配置是:60 M

set hive.map.aggr=true 时统计PV数据错误

从一个表里group by 之后 计算累加值.去重值: 为了效率设置并行:set hive.exec.parallel=true(可选:set hive.exec.parallel.thread.number=16).set hive.groupby.skewindata=true.set hive.map.aggr=true select plat, pagetype, count(*) pv, count(distinct userkey) uv from client_pv_form wh

利用map和reduce编写一个str2float函数,把字符串&#39;123.456&#39;转换成浮点数123.456:

from functools import reduce CHAR_TO_FLOAT = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '.': -1 } def str2float(s): nums=map(lambda x:CHAR_TO_FLOAT[x],s) #print(list(nums)) point = 0 def str_division(f,n): nonlo