파티션 및 클러스터 권장사항 적용

이 문서에서는 BigQuery 테이블에 파티션 및 클러스터 권장사항을 적용하는 방법을 보여줍니다.

제한사항

파티션 나누기 및 클러스터링 추천자는 legacy SQL을 사용하는 BigQuery 테이블을 지원하지 않습니다. 권장사항을 생성할 때 추천자는 모든 legacy SQL 쿼리를 분석에서 제외합니다. 또한 legacy SQL로 BigQuery 테이블에 파티션 권장사항을 적용하면 해당 테이블의 legacy SQL 워크플로가 중단됩니다.

파티션 권장사항을 적용하기 전에 legacy SQL 워크플로를 GoogleSQL로 마이그레이션합니다.

파티션 나누기 및 클러스터링 추천자는 다음 리전에 저장된 리소스를 지원하지 않습니다.

  • europe-central2, europe-west8, europe-west9, europe-west12, europe-north1, europe-southwest1
  • us-east1, us-east5, us-south1
  • me-central1, me-central2, me-west1
  • australia-southeast2
  • southamerica-west1

시작하기 전에

  1. Recommender API가 사용 설정되어 있는지 확인합니다.
  2. 필요한 Identity and Access Management(IAM) 권한이 있는지 확인합니다.

클러스터 추천 적용

클러스터를 원본 테이블의 복사본에 적용하거나, 클러스터를 원본 테이블에 직접 적용하거나, 구체화된 뷰를 사용하여 클러스터 권장사항을 적용할 수 있습니다.

복사한 테이블에 클러스터 권장사항 적용

BigQuery 테이블에 클러스터 권장사항을 적용할 때 먼저 원본 테이블을 복사한 다음 복사된 테이블에 권장사항을 적용할 수 있습니다. 이 방법으로 클러스터링 구성에 대한 변경사항을 롤백해야 할 경우 원본 데이터가 보존됩니다.

이 방법을 사용하여 파티션을 나누지 않은 테이블과 파티션을 나눈 테이블 모두에 클러스터 권장사항을 적용할 수 있습니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 쿼리 편집기에서 LIKE 연산자를 사용하여 원본 테이블의 동일한 메타데이터(클러스터링 사양 포함)로 빈 테이블을 만듭니다.

    CREATE TABLE DATASET.COPIED_TABLE
    LIKE DATASET.ORIGINAL_TABLE
    

    다음을 바꿉니다.

    • DATASET: 테이블이 포함된 데이터 세트의 이름(예: mydataset)
    • COPIED_TABLE: 복사된 테이블의 이름(예: copy_mytable)
    • ORIGINAL_TABLE: 원본 테이블의 이름(예: mytable)
  3. Google Cloud 콘솔에서 Cloud Shell 편집기를 엽니다.

    Cloud Shell 활성화

  4. Cloud Shell 편집기에서 bq update 명령어를 사용하여 권장 클러스터링과 일치하도록 복사된 테이블의 클러스터링 사양을 업데이트합니다.

     bq update --clustering_fields=CLUSTER_COLUMN DATASET.COPIED_TABLE 

    CLUSTER_COLUMN을 클러스터링할 열로 바꿉니다(예: mycolumn)

    tables.update 또는 tables.patch API 메서드를 호출하여 클러스터링 사양을 수정할 수도 있습니다.

  5. 파티션 나누기 또는 클러스터링이 있는 경우 쿼리 편집기에서 원본 테이블의 파티션 나누기 및 클러스터링 구성을 사용하여 테이블 스키마를 검색합니다. 원래 테이블의 INFORMATION_SCHEMA.TABLES 뷰를 확인하여 스키마를 검색할 수 있습니다.

    SELECT
      ddl
    FROM
      DATASET.INFORMATION_SCHEMA.TABLES
    WHERE
      table_name = 'DATASET.ORIGINAL_TABLE;'
    

    출력은 PARTITION BY 절을 포함한 ORIGINAL_TABLE의 전체 데이터 정의 언어(DDL) 문입니다. DDL 출력의 인수에 대한 자세한 내용은 CREATE TABLE을 참조하세요.

    DDL 출력은 원본 테이블의 파티션 나누기 유형을 나타냅니다.

    파티션 나누기 유형 결과 예시
    파티션을 나누지 않음 PARTITION BY 절이 없습니다.
    테이블 열로 파티션 나누기 PARTITION BY c0
    PARTITION BY DATE(c0)
    PARTITION BY DATETIME_TRUNC(c0, MONTH)
    수집 시간으로 파티션 나누기 PARTITION BY _PARTITIONDATE
    PARTITION BY DATETIME_TRUNC(_PARTITIONTIME, MONTH)
  6. 복사된 테이블에 데이터를 수집합니다. 사용하는 프로세스는 파티션 유형을 기반으로 합니다.

    • 원본 테이블에서 테이블 열로 파티션을 나누지 않거나 파티션을 나눈 경우 원본 테이블의 데이터를 복사된 테이블로 수집합니다.
      INSERT INTO DATASET.COPIED_TABLE
      SELECT * FROM DATASET.ORIGINAL_TABLE
      
    • 수집 시간으로 원본 테이블의 파티션을 나눈 경우 다음 단계를 따르세요.

      1. INFORMATION_SCHEMA.COLUMNS 뷰를 사용하여 데이터 수집 표현식을 구성할 열 목록을 검색합니다.

        SELECT
        ARRAY_TO_STRING((
        SELECT
          ARRAY(
          SELECT
            column_name
          FROM
            DATASET.INFORMATION_SCHEMA.COLUMNS
          WHERE
            table_name = 'ORIGINAL_TABLE')), ", ")
        

        출력은 쉼표로 구분된 열 이름 목록입니다.

      2. 원본 테이블의 데이터를 복사 테이블로 수집합니다.

        INSERT DATASET.COPIED_TABLE (COLUMN_NAMES, _PARTITIONTIME)
        SELECT *, _PARTITIONTIME FROM DATASET.ORIGINAL_TABLE
        

        COLUMN_NAMES를 쉼표로 구분된 이전 단계에서 출력된 열 목록(예: col1, col2, col3)으로 바꿉니다.

    이제 원본 테이블과 동일한 데이터가 포함된 클러스터링된 복사 테이블이 있습니다. 다음 단계에서는 원본 테이블을 새로 클러스터링된 테이블로 바꿉니다.

  7. 원본 테이블의 이름을 백업 테이블로 바꿉니다.

    ALTER TABLE DATASET.ORIGINAL_TABLE
    RENAME TO DATASET.BACKUP_TABLE
    

    BACKUP_TABLE을 백업 테이블 이름(예: backup_mytable)으로 바꿉니다.

  8. 복사 테이블의 이름을 원본 테이블로 바꿉니다.

    ALTER TABLE DATASET.COPIED_TABLE
    RENAME TO DATASET.ORIGINAL_TABLE
    

    이제 클러스터 권장사항에 따라 원본 테이블이 클러스터링됩니다.

클러스터링된 테이블을 검토하여 모든 테이블 함수가 의도한 대로 작동하는지 확인하는 것이 좋습니다. 많은 테이블 함수가 테이블 이름이 아닌 테이블 ID에 연결되어 있을 수 있으므로 계속하기 전에 다음 테이블 함수를 검토하는 것이 가장 좋습니다.

문제가 발생하면 영향을 받는 아티팩트를 새 테이블로 수동으로 마이그레이션해야 합니다.

클러스터링된 테이블을 검토한 후 다음 명령어를 사용하여 백업 테이블을 선택적으로 삭제할 수 있습니다.
    DROP TABLE DATASET.BACKUP_TABLE
    

클러스터 권장사항 직접 적용

기존 BigQuery 테이블에 클러스터 권장사항을 직접 적용할 수 있습니다. 이 방법은 복사된 테이블에 권장사항을 적용하는 것보다 빠르지만 백업 테이블을 보존하지 않습니다.

파티션을 나누지 않거나 파티션을 나눈 테이블에 새 클러스터링 사양을 적용하려면 다음 단계를 따르세요.

  1. bq 도구에서 새 클러스터링과 일치하도록 테이블의 클러스터링 사양을 업데이트합니다.

     bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE 

    다음을 바꿉니다.

    • CLUSTER_COLUMN: 클러스터링된 열(예: mycolumn)
    • DATASET: 테이블이 포함된 데이터 세트의 이름(예: mydataset)
    • ORIGINAL_TABLE: 원본 테이블의 이름(예: mytable)

    tables.update 또는 tables.patch API 메서드를 호출하여 클러스터링 사양을 수정할 수도 있습니다.

  2. 새로운 클러스터링 사양에 따라 모든 행을 클러스터링하려면 다음 UPDATE 문을 실행합니다.

    UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true
    

구체화된 뷰를 사용하여 클러스터 권장사항 적용

권장사항이 적용된 원본 테이블의 데이터를 저장하기 위해 테이블의 구체화된 뷰를 만들 수 있습니다. 구체화된 뷰를 사용하여 권장사항을 적용하면 자동 새로고침을 사용하여 클러스터링된 데이터를 최신 상태로 유지할 수 있습니다. 구체화된 뷰를 쿼리, 유지보수 및 저장할 때는 가격 책정 고려사항이 있습니다. 클러스터링된 구체화된 뷰(materialized view)를 만드는 방법을 알아보려면 클러스터링된 구체화된 뷰를 참조하세요.

파티션 권장사항 적용

원본 테이블의 사본에 파티션을 적용하여 파티션 권장사항을 적용할 수 있습니다.

복사한 테이블에 파티션 권장사항 적용

BigQuery 테이블에 파티션 권장사항을 적용할 때 먼저 원본 테이블을 복사한 다음 복사된 테이블에 권장사항을 적용할 수 있습니다. 파티션을 롤백해야 하는 경우 이 방식을 사용하면 원본 데이터가 보존됩니다.

다음 절차에서는 권장사항 예시를 사용하여 파티션 시간 단위 DAY로 테이블의 파티션을 나눕니다.

  1. 파티션 권장사항을 사용하여 복사된 테이블을 만듭니다.

    CREATE TABLE DATASET.COPIED_TABLE
    PARTITION BY DATE_TRUNC(PARTITION_COLUMN, DAY)
    AS SELECT * FROM DATASET.ORIGINAL_TABLE
    

    다음을 바꿉니다.

    • DATASET: 테이블이 포함된 데이터 세트의 이름(예: mydataset)
    • COPIED_TABLE: 복사된 테이블의 이름(예: copy_mytable)
    • PARTITION_COLUMN: 파티션을 나눌 열(예: mycolumn)

    파티션을 나눈 테이블 만들기에 대한 자세한 내용은 파티션을 나눈 테이블 만들기를 참조하세요.

  2. 원본 테이블의 이름을 백업 테이블로 바꿉니다.

    ALTER TABLE DATASET.ORIGINAL_TABLE
    RENAME TO DATASET.BACKUP_TABLE
    

    BACKUP_TABLE을 백업 테이블 이름(예: backup_mytable)으로 바꿉니다.

  3. 복사 테이블의 이름을 원본 테이블로 바꿉니다.

    ALTER TABLE DATASET.COPIED_TABLE
    RENAME TO DATASET.ORIGINAL_TABLE
    

    이제 파티션 권장사항에 따라 원본 테이블의 파티션이 나눠집니다.

파티션을 나눈 테이블을 검토하여 모든 테이블 함수가 의도한 대로 작동하는지 확인하는 것이 좋습니다. 많은 테이블 함수가 테이블 이름이 아닌 테이블 ID에 연결되어 있을 수 있으므로 계속하기 전에 다음 테이블 함수를 검토하는 것이 가장 좋습니다.

문제가 발생하면 영향을 받는 아티팩트를 새 테이블로 수동으로 마이그레이션해야 합니다.

파티션을 나눈 테이블을 검토한 후 다음 명령어를 사용하여 백업 테이블을 선택적으로 삭제할 수 있습니다.
    DROP TABLE DATASET.BACKUP_TABLE
    

가격 책정

테이블에 권장사항을 적용하면 다음 비용이 발생할 수 있습니다.

  • 처리 비용. 권장사항을 적용할 때 BigQuery 프로젝트에 데이터 정의 언어(DDL) 또는 데이터 조작 언어(DML) 쿼리를 실행합니다.
  • 스토리지 비용. 테이블 복사 방법을 사용하면 복사된(또는 백업) 테이블에 추가 스토리지를 사용합니다.

표준 처리 및 스토리지 요금은 프로젝트와 연결된 결제 계정에 따라 적용됩니다. 자세한 내용은 BigQuery 가격 책정을 참조하세요.