hive表增量更新到elasticsearch方案

本文介绍了一种针对大数据量Hive表的增量更新到Elasticsearch的解决方案,以减轻ES集群压力。主要思路是通过主键变化识别增量数据,并利用SQL的JOIN操作找到增删记录。在Elasticsearch中,通过添加is_valid字段标记数据状态,确保数据同步的准确性。
摘要由CSDN通过智能技术生成

目录

1. 背景

2. 总体思路

3. sql

       (1) 增量删除的数据

(2) 增量增加的数据

 

4. elasticsearch 设计

 


1. 背景

     hive表中有大量的业务数据,数据量比加大几千万上亿的量级,业务数据每天会有一部分数据发生变化。如果是每天全量更新到elasticsearch,会造成es集群节点的jvm压力巨大,影响es集群的可用性。所以,需要增量更新数据,降低es集群压力。

2. 总体思路

     首先需要,定义一个主键,当内容变化时对应的主键也发生变化,当数据没有发生变化时,主键保持不变。(主键可以通过md5生产唯一主键)。通过sql的中的加减法(left、right join)来找出每天需要增量删除和增量增加的数据。然后同步到es时,在额外增加一个字段(当前实现增加的是 is_valid 字段,见下面sql, is_valid=0表示无效数据,is_valid=1表示有效数据),该字段是一个标志位,标识同步到es的数据是是否可以业务使用。
 

3. sql

 (1) 增量删除的数据

#!/bin/sh
version_now=$(date -d"-2 day" +%Y-%m-%d)
version_pre=$(date -d"-3 day" +%Y-%m-%d)

hive -e "DROP TABLE IF EXISTS app.tmp_xz_jimi3_sku_description_delete"

hive -e "

CREATE TABLE app.tmp_xz_jimi3_sku_description_delete AS
SELECT
	main_id,
	item_sku,
	item_main_sku,
	a.bot_id,
	vender_id,
	category3,
	category3_id,
	entity_type,
	entity_value,
	entity_source,
	brand_code,
	brand_en,
	is_valid,
	version
FROM
	(
		SELECT
			tmp_pre.main_id,
			item_sku,
			item_main_sku,
			bot_id,
			vender_id,
			category3,
			category3_id,
			entity_type,
			entity_value,
			entity_source,
			brand_code,
			brand_en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值