Hive 표 증 량 을 elasticsearch 방안 으로 업데이트
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,
is_valid,
'${version_now}' AS version
FROM
(
SELECT
main_id,
item_sku,
item_main_sku,
bot_id,
vender_id,
category3,
category3_id,
entity_type,
entity_value,
entity_source,
brand_code,
brand_en,
0 AS is_valid
FROM
app.sku_description_corpus
WHERE
dt = '${version_pre}'
)
tmp_pre
LEFT JOIN
(
SELECT main_id FROM app.sku_description_corpus WHERE dt = '${version_now}'
)
tmp_now
ON
tmp_now.main_id = tmp_pre.main_id
WHERE
tmp_now.main_id IS NULL
)
a
"
(2) 증 량 증가 데이터
#!/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_add"
hive -e "
CREATE TABLE app.tmp_xz_jimi3_sku_description_add AS
SELECT
tmp_now.main_id,
item_sku,
item_main_sku,
bot_id,
vender_id,
category3,
category3_id,
entity_type,
entity_value,
entity_source,
brand_code,
brand_en,
is_valid,
'${version_now}' as version
FROM
(
SELECT
main_id,
item_sku,
item_main_sku,
bot_id,
vender_id,
category3,
category3_id,
entity_type,
entity_value,
entity_source,
brand_code,
brand_en ,
1 AS is_valid
FROM
app.sku_description_corpus
WHERE
dt = '${version_now}'
)
tmp_now
LEFT JOIN
(
SELECT main_id FROM app.sku_description_corpus WHERE dt = '${version_pre}'
)
tmp_pre
ON
tmp_now.main_id = tmp_pre.main_id
WHERE
tmp_pre.main_id IS NULL
"
4. elasticsearch 디자인
es 의 색인 디자인 은 다음 과 같 습 니 다. hiv 표 의 데 이 터 를 es 에 삽입 할 때 hiv 표 의 mainid 는 es 의id 이렇게 같은 mainid 는 es 에서 하나의 데이터 만 있 으 면 됩 니 다.데 이 터 를 삭제 해 야 할 때 t - 1 을 비교 할 때 삭제 해 야 할 데이터 mainid 는 같 습 니 다. 이 럴 때 es 에 동기 화하 면 t - 1 시의 데 이 터 를 덮어 쓸 수 있 습 니 다.
{
"settings": {
"index": {
"number_of_shards": "8",
"number_of_replicas": "1"
}
},
"mappings": {
"xz_jimi3_sku_describe_info": {
"dynamic": "false",
"_all": {
"enabled": false
},
"properties": {
"id": {
"type": "keyword"
},
"itemSku": {
"type": "keyword"
},
"itemMainSku": {
"type": "keyword"
},
"botId": {
"type": "keyword"
},
"venderId": {
"type": "keyword"
},
"cate3Id": {
"type": "keyword"
},
"cate3Name": {
"type": "keyword"
},
"entityType": {
"type": "keyword"
},
"entityValue": {
"type": "text",
"analyzer": "whitespace"
},
"entitySource": {
"type": "keyword"
},
"brandEn": {
"type": "keyword"
},
"brandId": {
"type": "keyword"
},
"valid": {
"type": "keyword"
},
"dt": {
"type": "keyword"
}
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
파일 내용 및 파일 경로의 단수 및 복수 대체 텍스트를 사용하여 원본 파일을 대상에 붙여넣기기본 코드로 많은 수의 파일과 폴더를 복사하고 파일 내부의 여러 줄과 파일 및 폴더의 이름을 바꿔야 하는 경우가 많으며 시간이 많이 걸립니다😢. 이 문제를 해결하기 위해 나를 위해 할 수 있는 유틸리티를 작성했습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.