[Bigquery] 파티션 테이블을 동적으로 변경하는 방법

의 목적


Bigquery에서 만든 파티션 테이블을 동적으로 변경하려고 합니다.
Bigquery에 등록된 파티션 테이블 이름 끝에 있는 엔터프라이즈 ID를 변수화하여 Bigquery의 동적 SQL에 임의의 엔터프라이즈 점포 분류를 표시합니다.

전제 조건


● GCP 계정 연결 및 파티션 테이블 생성
• 어느 정도 스타 모델, 파티션 테이블의 상태를 파악
・지역 이용 US
/(BI 도구 metabse를 사용하여 표시)

독자 대상


프로그래밍 초보자
· SQL 초보자
• 빅query 초보자

파티션 테이블 구조


テーブル構造
데이터 소프트웨어 하우스(DWH)의 표 구조로 일반적인 스타크래프트 모드로 제작됐다.간단하게 말하면 관계 데이터베이스(RDB)와 같은 중간 테이블이나 세부 테이블을 만들지 않는다 = 너무 많은 테이블 구조를 분해하지 않는다.
위의 첨부 파일 이미지에서 store마스터라는 테이블과salse 입니다.results_company_xx 단위로 만든 표에서 만든 시간마다 구분표를 만듭니다.xx 1, 2, 3 등companyID가 있습니다.
이거 컴퍼니.목적은 동적 변경 id!
참고로 빅query에서 가장 불안한 요소는 유료이지만 구역과 집합이라는 특유의 구조가 있어 참조된 데이터량을 억제할 수 있다.이번에는 크리에이트.데이터에 따라 섹션 테이블을 만들고 있습니다.
※ 초보자이기 때문에 처음에는 동적, 정적 의미를 잘 몰랐지만 사용자별로 다른 페이지를 전환하고 싶을 때는 동적, 모든 사용자가 공통적으로 사용하는 페이지가 정적이어서 이런 표현이 가장 적합합니다...

실제 조회


Language: SQL

DECLARE company_id INT64 DEFAULT 38;

EXECUTE IMMEDIATE format("""
SELECT
    sales_results
    ,  look_ahead_sales_results
FROM `sample-data`.test.sales_results_company_%d as src
    LEFT JOIN `sample-data`.test.store_master as sm on sm.store_key = src.store_key
WHERE sm.store_id = 445 and
    _PARTITIONTIME >= DATE_SUB(DATE_TRUNC(CURRENT_TIMESTAMP, DAY), INTERVAL 1 DAY)
""", company_id);

해설

DECLARE company_id INT64 DEFAULT 38;DECLARE 지정 유형의 변수 선언을 실행합니다.conpany_id (변수) = 38 (수치형) 을 지정합니다.EXECUTE IMMEDIATE format(""" select文 """, company_id)동적 SQL 구문을 실행합니다.format에 작성된 질의문은 STRING 형식으로 포맷됩니다.여기서%d=숫자형,%s=문자열 등의 매개변수를 지정할 수 있습니다.format의 첫 번째 매개변수에 DECLARE 변수를 대입합니다.'sample-data'.test.sales_results_company_%d as srcformat 매개 변수를 대입하는 데%d를 사용합니다.프로젝트 이름입니다.데이터 세트 이름입니다.표 이름으로 호출하다._PARTITIONTIME >= DATE_SUB(DATE_TRUNC(CURRENT_TIMESTAMP, DAY), INTERVAL 1 DAY)구역을 나누는 시간은 데이터를 만들 때마다 진행된다.CURRENT_TIMESTAMP = 2022-03-16 15:00:01시 상술한 결과는 2022-03-15 00:00:00 UTC로 어제의 수치를 나타냈다.

metabase에서 사용하는 검색어 문장


Language: SQL

DECLARE company_id INT64 DEFAULT {{company_id}};

EXECUTE IMMEDIATE format("""
SELECT
    sales_results
    ,  look_ahead_sales_results
FROM `sample-data`.test.sales_results_company_%d as src
    LEFT JOIN `sample-data`.test.store_master as sm on sm.store_key = src.store_key
WHERE sm.store_id = {{store_id}} and
    _PARTITIONTIME >= DATE_SUB(DATE_TRUNC(CURRENT_TIMESTAMP, DAY), INTERVAL 1 DAY)
""", company_id);
메타베이스에 있는 변수는 {{}로 묶어서 지정할 수 있습니다.이 때 companyid、store_id는 메타베이스 측면의 필터를 통해 변수를 대입합니다.

총결산


빅query가 동적 SQL을 쓸 때는 일본어 기사가 적어 기록을 남겼다.MySQL 위주로 자주 작업하기 때문에 빅query 특유의 쓰기 방식에 적응하기 위해 시간이 좀 걸렸다.다만, 그곳은 역시 구글답게 공식 페이지도 충실해 목적지를 찾을 수 있다면 문제없다.
적당히 지적해 주셨으면 좋겠어요!

문장을 인용하다


사용자를 웃게 하는 BigQuery의 사용이 편리한 SQL의 새로운 기능
스크립트 문
FORMAT
스타크래프트 모드(기본)

좋은 웹페이지 즐겨찾기