HIVE数据导入ES并避免字段空值占用空间

es和hive外部表映射 CREATE EXTERNAL TABLE `dws.外表name`( `id` string COMMENT 'from deserializer', `create_by` string COMMENT 'from deserializer', `create_at` timestamp COMMENT 'from deserializer', `update_by` string COMMENT 'from deserializer', ... 阅读详情

方案一:hive正常表导入ES流程

1、自己下载 elasticsearch-hadoop-6.6.0.jar依赖包,根据自己es版本选择,下载地址:

https://www.elastic.co/pt/downloads/hadoop

2、文件上传HDFS指定位置,我这边放在

/user/hive/jars/elasticsearch-hadoop-6.6.0.jar;

3、hive加载jar包 

ADD JAR hdfs://uat01/user/hive/jars/elasticsearch-hadoop-6.6.0.jar;
ADD JAR hdfs://uat01/user/hive/jars/commons-httpclient-3.1.jar;

--注意,部分不加载“commons-httpclient-3.1.jar”可能会报错error in initSerDe: java.lang.NoClassDefFoundError org/apache/commons/httpclient,可以直接把包放在hive的lib下一样效果

4、准备好数据,数据样例,其中email字段部分内容置为空模拟数据为空效果

 5、ES创建索引mapping

PUT user_info
{
 "mappings": {
 "user":{
 "properties": {
 "id":{
 "type": "long"
 },
 "name":{
 "type": "text"
 },
 "birthday":{
 "type": "text"
 },
 "email":{
 "type": "text"
 }
 }
 }
 }
}

6、建外部表

drop table user_info_es;
create external table user_info_es(
id string,
name string,
birthday string,
gender string,
email string)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.resource' = 'user_info/user', -- 索引名及type
'es.nodes'='192.168.139.101:9200', -- es地址
'es.mapping.id'='id' , -- 声明主键
'es.write.operation'='upsert', -- 声明更新
'es.index.refresh_interval' = '-1', 
'es.index.number_of_replicas' = '0',
'es.batch.write.retry.count' = '6',
'es.batch.write.retry.wait' = '60s',
'es.mapping.name' = 'id:id,name:name,birthday:birthday,gender:gender,email:email' -- 字段映射
);

7、往外部表导入数据

insert overwrite table user_info_es
select id,name,birthday, gender,email  from user_info_es_temp limit 100;

8、查看ES数据,null数据仍占用字段,当表中null值很多,会占用较大空间,优化方案如下

 方案二:以JSON格式数据导入ES

步骤1~5同上

6、建外部表

drop table user_info_es;
create external table user_info_es(
jsonString string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.resource' = 'user_info/user', -- 索引名及type
'es.nodes'='192.168.139.101:9200', -- es地址
'es.mapping.id'='id' , -- 声明主键
'es.write.operation'='upsert', -- 声明更新
'es.index.refresh_interval' = '-1',
'es.index.number_of_replicas' = '0',
'es.batch.write.retry.count' = '6',
'es.batch.write.retry.wait' = '600s',
'es.input.json'  = 'yes' -- 必加 自动识别JSON
);

7、HIVE表数据加工成JSON

-- concat会把value为空的数据,concat置为空
-- 最后一个字段必须不含空值,或者使用concat_ws代替,否则会多个','逗号,导致JSON格式出现问题
select concat_ws('', '{', id, birthday, gender, email, name, '}') jsonString
from (select concat('\"id\":\"', id, '\",')             id,
             concat('\"birthday\":\"', birthday, '\",') birthday,
             concat('\"gender\":\"', gender, '\",')     gender,
             concat('\"email\":\"', email, '\",')       email,
             concat('\"name\":\"', name, '\"')          name
      from user_info_es_temp
     ) t;

8、样例数据

9、往外部表导入数据-导入前记得清空ES原数据,虽然是update,但email原本为null的更新不了

insert overwrite table user_info_es
-- concat会把value为空的数据,concat置为空
-- 最后一个字段必须不含空值,或者使用concat_ws代替,否则会多个','逗号,导致JSON格式出现问题
select concat_ws('', '{', id, birthday, gender, email, name, '}') jsonString
from (select concat('\"id\":\"', id, '\",')             id,
             concat('\"birthday\":\"', birthday, '\",') birthday,
             concat('\"gender\":\"', gender, '\",')     gender,
             concat('\"email\":\"', email, '\",')       email,
             concat('\"name\":\"', name, '\"')          name
      from user_info_es_temp
     ) t;

10、查看ES数据,email为空的已经不显示了 

11、此操作对于update数据时可能存在风险,如原数据有值,需要更新为null,则此方式无法更新

六、海量hive数据写入es优化 场景: 业务部门将客户画像结果表通过hive映射到es表,其中结果表600W条数据,但每条数据接近2W个标签,数据入到es后主要场景是多字段组合过滤查询后聚合求和。 优化思路 es默认最大字段数是1000,需要增大字段数 hive端优化: hive的取数据的速度大于写入到es的速度,es会由于集群规模问题或者资源问题无法同时接收hive过多的并发数。 由此hive端主要优化是减小map数 set... 阅读详情

相关推荐

sqoop导入mysql数据到Hive的各种方案

mysql数据导入数据仓库Hive的各种方案 采用sqoop向hive中导入原始数据形成ODS层,之后可以在原始数据的基础上进行增量备份数据(定时同步)或者通过canal解析binlog(实时同步)日志进行同步数据。 1.sqoop向hive中导数据的原理 sqoop在向hive中导入数据时,是先将数据上传到hdfs中,然后创建表,最后再将hdfs中的数据load到表目录下。 我们采用sqoop直...

XDSXHDYY的博客 1万+

spark配置elasticsearch属性汇总(基于es7)

必要设置 es.resource Elasticsearch资源位置,在该位置读取和写入数据。需要格式 <index>/<type> es.resource.read(默认为es.resource) 用于读取(但不写入)数据的Elasticsearch资源。在同一作业中将数据读取和写入不同的Elasticsearch索引时很有用。通常自动设置(“ Map / Reduce”模块除外,该模块需要手动配置)。 es.rource.write(默认为es.resource) 用于写入

m0_54849873的博客 1612

ES in Hive

ElasticSearch已经可以与YARN、Hadoop、Hive、Pig、Spark、Flume等大数据技术框架整合起来使用,尤其是在添加数据的时候,可以使用分布式任务来添加索引数据,尤其是在数据平台上,很多数据存储在Hive中,使用Hive操作ElasticSearch中的数据,将极大的方便开发人员。这里记录一下Hive与ElasticSearch整合,查询和添加数据的配置使用过程。基于Hi

阿里Darker 2496

【Elasticsearch介绍】

5.愿意参加公益活动,具有爱心和感恩之心。2.成长陪伴:一对一的师徒辅导 3.线上自主学习平台:乐有家学院,专业团队制作,每周大咖分享 4.储备及管理课堂: 干部训练营、月度/季度管理培训会 【晋升发展】 营销【精英】发展规划:A1置业顾问-A6资深置业专家 营销【管理】发展规划:(入职次月后就可竞聘) 置业顾问-置业经理-店长-营销副总经理-营销副总裁-营销总裁 内部【竞聘】公司职能岗位:如市场、渠道拓展中心、法务部、按揭经理等都是内部竞聘 【联系人】 黄媚主任15017903212(微信同号)"

xy_hgtc的博客 1733

CHIP-Seq数据分析流程

文章目录CHIP-Seq数据分析流程相关软件安装数据下载将SRA转化为fastq文件数据质控,过滤数据质控然后进行质控,过滤低质量reads,去接头比对下载小鼠参考基因组的索引和注释文件比对sam文件转bam为bam文件建立索引载入IGV查看用MACS call peak安装MACS结果注释与可视化 CHIP-Seq数据分析流程 相关软件安装 所需要的软件有sratoolkit, fastqc,bowtie2,samtools,macs2,htseq-count,bedtools和前面RNA-seq数据分析

bio_meimei的博客 8791

Qt制作大数据可视化大屏展示电子看板

Qt制作大数据可视化大屏展示电子看板 解决当前最火的大数据可视化大屏展示,整个项目通过Qt开发,集成了QML/QChart/ECharts及自定义控件等模块,所有的可视化控件都可以集成到其中。可以随意增加和减少模块,各个模块可以随意拖拽,整体可以个性化布局。模块标题栏可自定义,包括标题文本信息、文本颜色、宽度/高度、背景颜色、按钮个数等功能,满足各个样式需求。 实例中主要展示了现成的一些仪表盘...

Qt自定义控件及应用开发 7707

Hive空值处理

Hive在使用过程中不可避免需要对NULL、’’(空字符串)进行判断和识别。Hive默认情况下底层存储空值跟其他传统数据库有所不同。1、hive默认存储空值的规则 (1) 不同数据类型对空值的存储规则 Int与String类型,NULL底层默认存储为\N,查询时显示为NULL。String类型的数据如果为”“,存储则是”“,另外往Int类型的字段插入数据””时,结果还是\N。(2) 不同数据类型

williamjame的博客 8433

小红书x-mini签名逆向实战:Frida动态Hook与算法还原

在移动App协议分析中,请求签名机制是保障接口安全的核心技术,其本质是客户端对请求参数、时间戳、设备指纹等要素进行加密认证的过程。理解签名原理需掌握Native层加密流程、JNI调用机制及密钥动态派生逻辑。Frida作为主流动态插桩工具,能绕过符号剥离、字符串加密和控制流混淆等反分析手段,在函数执行瞬间捕获寄存器状态、内存数据与调用上下文,实现签名算法的完整还原。该技术广泛应用于合规内容监测、API自动化调用与竞品协议研究等工程场景。本文聚焦小红书x-mini签名这一典型样本,详解从JNI_OnLoad定位

weixin_31264565的博客 461

hive 补全多个字段的空值(间隔多个空值或连续多个空值),取字段上一条非空记录的值

在实际业务中,有一个需求中有如下要求,对多个字段中出现的空值补上一次非空的值,主要用来默认市场数据平稳,其中可能出现连续多个空值或者多次间隔的空值,LAG函数只能解决一个null的补数问题,不能解决多个连续的null值补数,在网上有使用自定义udf的方法,但是使用并不方便,不利于日常的开发,现推荐一种使用hql代码的方式直接实现上述需求,简洁方便,高效代码如下: 测试数据: 测试代码如下: se...

从此一心向前,别无它念 7240

STM32F103 -- LIN从机通讯 -- 程序代码 -- 详细讲解版(2万字长文)

主要代码分为3个文件,usart文件是对GPIO端口和串口Lin模式的初始化,lin_buffer文件是对串口环形缓冲区的编写,lin_driver文件是Lin从机模式驱动代码。通过这三个文件的代码便可实现STM32F103的LIN从机通讯。

晴朗luo的博客 1万+

Apollo Planning决策规划算法代码详细解析 (2):Scenario执行

上一章节讲Scenario的决策逻辑,当确认当前Scenario后,本章节继续深入讲解在代码中,Scenario的执行过程。Scenario的Process()函数根据配置文件顺序执行stage,并判断目前处于哪个stage。当确认好stage后调用该stage对应的Process()函数,来进行具体的规划任务。 码字不易,喜欢的朋友们麻烦点个关注与赞。 在本文你将学到下面这些内容: Scenario的Process()函数的作用于调用方式; Scenario对象的初始化方法; 如何给每个Scen

自动驾驶Player的博客 5609

Hive数据导入ES的各种坑

1.mapper数量 无论什么博客还是官网,一直强调控制写入ES的mapper数量,那怎么控制mapper的数量? 1)源表的分区数目 因为 mapred.min.split.size  , mapred.max.split.size , dfs.block.size splitSize =  Math.max(minSize, Math.min(maxSize, blockSize...

sydt2011的博客 5192

在Simulink中构建永磁同步电机的网络化控制模型,并分析通信网络对系统性能的影响

核心优势通过仿真验证了网络延迟和丢包对PMSM控制性能的影响。提供了改进PI参数或引入自适应控制的解决方案。扩展方向抗干扰控制:结合卡尔曼滤波或滑模控制抑制网络噪声。时间敏感网络(TSN)建模:参考知识库[2]的中断触发方式,实现确定性通信。网络安全仿真:模拟恶意攻击(如数据篡改)对控制系统的威胁。

xiaoheshang_123的博客 168

将 Hive 空值统一为 \N

Hive在使用过程中不可避免需要对NULL、’’(空字符串)进行判断和识别。Hive默认情况下底层存储空值跟其他传统数据库有所不同。 1、hive默认存储空值的规则 (1) 不同数据类型对空值的存储规则 Int与String类型,NULL底层默认存储为\N,查询...

RayfunC的博客 5418

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

451

基于知识图谱的时空事件关联推理能力培养

随着信息技术的飞速发展,大量的时空事件数据被产生和收集,如交通流量数据、气象观测数据、社交媒体上的地理定位信息等。这些数据蕴含着丰富的知识和规律,但要从中提取有价值的信息并非易事。基于知识图谱的时空事件关联推理旨在通过构建知识图谱,将时空事件数据进行整合和关联,从而实现对事件之间潜在关系的挖掘和推理。本文的目的是系统地介绍基于知识图谱的时空事件关联推理能力的培养方法,包括核心概念、算法原理、数学模型、实际应用等方面。

操作系统内核探秘的博客 751

hive 查询去除空值_Hive的学习,Hive的DDL和DML

Hive数据类型之前文中讲解了Hive的基本的配置,本篇讲解Hive的其他的知识点。基本数据类型对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。集合数据类型Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRU...

weixin_42518981的博客 1783

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hive踩坑——空值、NULL、不等于判断问题

今天遇到了某字段为string类型,但是里面存放了数字,null(空值),‘’(空串)在进行条件过滤时,出现了问题,现在进行一下简单的总结: 数据准备: use default; create table test0613 as select '1' as code union all select '0' as code union all select null as code union all select '' as code ; 查询结果: 筛选不为‘0’,需要

滴水穿石的启示 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Hive 数据倾斜 常用解决办法

来源:https://www.cnblogs.com/qingyunzong/p/8847597.html 1.数据倾斜的原因 数据分布不均匀,造成数据热点问题 2.数据倾斜的现象 Hive任务进度长时间维持在99%或者100%的附近,进度好久没变化。通过查看任务监控页面Web,发现只有一个或者少数的reduce任务未完成,因为其处理的数据量和其他的reduce差异过大。单一reduce处理的记录数和平均记录数相差过多,导致最长时间远大于任务的平均时长。 3.数据倾斜情况...

是个好男人的博客 3926

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

sqoop导入数据到hive为空的解决办法

说下我当时遇到的情况,我在使用sqoop从mysql导入数据到hive,之前都是正常的,突然某一天发现一个字段导入到hive时为空,但是mysql是有值的,仔细观察发现这个字段类型有点特殊,特殊在哪里呢,他是tinyint(1),这种类型是比较少见的 接下来直接说解决办法: 在sqoop连接mysql的url中加上tinyInt1isBit=false, 完整的url示例:jdbc:mysql://localhost/test?tinyInt1isBit=false 解释一下加这个得含义,默认sqo

厚积薄发 1566

Sqoop(一):MySQL导入Hive数据库时NULL值处理

场景: sqoop将mysql的一张表导入到hive中,发现以前is null的字段导入到hive的时候,被转换为了字符串’NULL’或’null’。 原语句: sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true –connect jdbc:mysql://(IP地址):3306/interface –username root –password root –split-by id –target-dir /us

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 6118

sqoop导入mysql避免重复_Sqoop的导入及可能遇到的问题

导入数据原文链接:https://blog.csdn.net/qichangjian/java/article/details/88116434导入到 hdfs例子sqoop import \#--connect jdbc:mysql://hadoop102:3306/$db_name \--connect "jdbc:oracle:thin:@ip:1521:服务名" \--username "...

weixin_35876760的博客 1442

sqoop使用,从hive向oracle导入数据

author: lf sqoop export 使用说明 --export-dir 和 (--table和--call中的一个)是必须的。 指定了将要填充的表(或将要调用的存储过程),以及hdfs包含资源数据的目录 --columns 默认将查询出表中所有的字段。通过这个参数可以选择列的子集并控制它们的顺序,使用逗号分割,例如:–columns “col1,col2,col3”。 注意,col...

hefrankeleyn的博客 4092

hive的踩坑经验1

hive的踩坑经验1 一、hive表中新增字段或者修改字段时,需要使用cascade方式,否则新增字段,回刷数据还是存在为null的情况。 解决方案一: 1、ALTER TABLE tablename ADD COLUMNS (is_delete int COMMENT ‘是否进行删除的标记字段’) cascade; 然后回刷数据即可。 解决方案二: 2、ALTER TABLE tablename...

weixin_41708343的博客 615

sqoop hive to mysql

hive to mysql 有三种模式 1、默认是把hive中的数据插入到进mysql的 表中 2、更新mysql中的数据 3、更新和插入mysql中的数据 mysql 和 hive中空值存储转化 –input-null-string ‘\N’ –input-null-non-string ‘\N’ \ 先把数据导入到临时表中,成功之后 再把临时表中 的数据导入到真正 的表中。 避免导出部分任务...

墨冰 367
上一篇: 用户连续登陆(允许中断)查询sql
下一篇: hive对数据进行随机取样
AA赵师傅
博客等级 码龄9年 89粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值