[BigQuery] 논리 삭제 플래그 업데이트, 차분 데이터 추가
8155 단어 BigQuery
배경.
인재 관리 도구로 현황을 관리할 수 있는 부서이지만, 전근 전환을 보지 못했다.
나는 이전과 차이가 있는 경우에만 이 기록을 추가하는 코드를 썼다.
게다가 이론적 삭제로 현재 사용되고 있는 데이터는 출력하기 쉽다.
논리적 삭제란 무엇입니까?
이를 참고로 프로젝트 이름은 is_deleted
이고 1이면 논리가 삭제된 것으로 간주됩니다.
https://qiita.com/wanko5296/items/f1af9c7bf020e867c2dd
데이터 준비
두 개의 데이터를 준비하다.
실제로 PK의 id가 있지만 이름은 간단합니다.
원시 데이터create table `test.db1`
(name string,
departmanet string,
update_date date,
is_deleted int64);
insert into `test.db1`
values
('ウメハラ', '営業', date_add(current_date(), interval -20 day), 0),
('タカハシ', '営業', date_add(current_date(), interval -20 day), 0),
('ムカイ', '営業', date_add(current_date(), interval -20 day), 0)
날짜를 줄이는 방법은 공식 홈페이지를 참조하세요.
https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions?hl=ja
위 데이터에 대한 부서 이동에 대한 구상입니다.
양식 데이터를 다시 작성하려는 경우create table
를 create or repalce table
로 변경한 경우
다시 만들 수 있어요.
새로운 데이터create table `test.db2`
(name string,
departmanet string,
update_date date,
is_deleted int64);
insert into `test.db2`
values
('ウメハラ', 'エンジニア', current_date(), 0),
('タカハシ', 'マネージャー', current_date(), 0),
('ムカイ', '営業', current_date(), 0)
실행 방법
단계는 다음과 같습니다.
두 개의 데이터를 준비하다.
실제로 PK의 id가 있지만 이름은 간단합니다.
원시 데이터
create table `test.db1`
(name string,
departmanet string,
update_date date,
is_deleted int64);
insert into `test.db1`
values
('ウメハラ', '営業', date_add(current_date(), interval -20 day), 0),
('タカハシ', '営業', date_add(current_date(), interval -20 day), 0),
('ムカイ', '営業', date_add(current_date(), interval -20 day), 0)
날짜를 줄이는 방법은 공식 홈페이지를 참조하세요.
https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions?hl=ja
위 데이터에 대한 부서 이동에 대한 구상입니다.
양식 데이터를 다시 작성하려는 경우
create table
를 create or repalce table
로 변경한 경우다시 만들 수 있어요.
새로운 데이터
create table `test.db2`
(name string,
departmanet string,
update_date date,
is_deleted int64);
insert into `test.db2`
values
('ウメハラ', 'エンジニア', current_date(), 0),
('タカハシ', 'マネージャー', current_date(), 0),
('ムカイ', '営業', current_date(), 0)
실행 방법
단계는 다음과 같습니다.
DECLARE pramary_keys ARRAY<STRING>;
-- ここで一致しない(部署移動したkeyを取得)
set pramary_keys = (
select ARRAY_AGG(name)
from `test.db2` as s --最新データ
where not exists(
select *
from `test.db1` as t --変更するデータ
where t.departmanet = s.departmanet
-- 他の項目も確認したい場合はand条件でいくらでも追加可能
-- and t.column = s.column
)
);
-- keysを元に論理削除のフラグをつける
update `test.db1` as t
set is_deleted = 1
where exists(
select name
from UNNEST(pramary_keys) as pramary_keys
where t.name = pramary_keys
);
-- keysを元に必要なデータを追加する
insert `test.db1`
select *
from `test.db2` as s
where exists(
select *
from UNNEST(pramary_keys) as pramary_keys
where s.name = pramary_keys
)
결과 확인 후메하라, 하키의 영업열에는 논리를 삭제한다는 표지가 걸려 있다
역시 메하라와 하키의 이동 지점이다.
Reference
이 문제에 관하여([BigQuery] 논리 삭제 플래그 업데이트, 차분 데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/plumfield56/items/84fa02bd5c4fd75b0a95텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)