目录
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