[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 tablecreate 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로 변경하고 싶은 primary키 목록 가져오기
  • 1의 키와 일치하는 원시 데이터의 논리적 삭제 표지 변경
  • 1의 키와 일치하는 업데이트 데이터 추가
  • 제작할 때 이 보도를 참고하였다.
    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
    )
    
    결과 확인 후
    메하라, 하키의 영업열에는 논리를 삭제한다는 표지가 걸려 있다
    역시 메하라와 하키의 이동 지점이다.

    좋은 웹페이지 즐겨찾기