파티션을 나눈 테이블 소개

이 페이지에서는 BigQuery의 파티션을 나눈 테이블 지원에 대해 간략히 설명합니다.

파티션을 나눈 테이블은 파티션이라고 하는 세그먼트로 분할된 특수한 테이블로, 데이터를 보다 쉽게 관리하고 쿼리할 수 있게 해줍니다. 큰 테이블을 작은 파티션으로 나누면 쿼리 성능을 높일 수 있으며 쿼리에서 읽는 바이트 수를 줄여 비용을 제어할 수 있습니다.

BigQuery에는 두 가지 유형의 테이블 파티션 나누기가 있습니다.

  • 내부 데이터화 시간으로 파티션을 나눈 테이블: 데이터의 내부 데이터화(로드) 날짜 또는 도착 날짜를 기준으로 파티션을 나눈 테이블입니다.
  • 파티션을 나눈 테이블: TIMESTAMP 또는 DATE 열을 기준으로 파티션을 나눈 테이블입니다.

내부 데이터화 시간으로 파티션을 나눈 테이블

내부 데이터화 시간으로 파티션을 나눈 테이블을 만들면 BigQuery에서 자동으로 데이터의 내부 데이터화 또는 도착 날짜를 반영하는 일 단위의 날짜 기준 파티션으로 데이터를 로드합니다. 유사 열 및 서픽스 식별자를 사용하면 특정 날짜의 데이터를 수정(교체)하고 데이터를 파티션으로 리디렉션할 수 있습니다.

내부 데이터화 시간으로 파티션을 나눈 테이블에는 테이블에 로드되는 데이터의 날짜 기반 타임스탬프가 포함된 이름이 _PARTITIONTIME인 유사 열이 포함됩니다. 시간으로 파티션을 나눈 테이블에 대한 쿼리는 파티션의 위치를 나타내는 _PARTITIONTIME 필터를 제공하여 데이터 읽기를 제한할 수 있습니다. 지정된 파티션의 모든 데이터는 쿼리에 의해 읽히지만 조건부 필터인 _PARTITIONTIME이 스캔되는 파티션의 수를 제한합니다.

내부 데이터화 시간으로 파티션을 나눈 테이블을 만들 때 파티션에는 테이블과 동일한 스키마 정의가 포함됩니다. 테이블과 다른 스키마를 사용하여 파티션에 데이터를 로드해야 하는 경우에는 데이터를 로드하기 전에 테이블의 스키마를 업데이트해야 합니다. 또는 스키마 업데이트 옵션을 사용하여 로드 작업 또는 쿼리 작업에서 테이블의 스키마를 업데이트합니다.

파티션을 나눈 테이블

BigQuery에서는 파티션을 나눈 테이블도 허용합니다. 파티션을 나눈 테이블에서는 파티션 나누기 스키마를 특정 TIMESTAMP 또는 DATE 열에 바인딩할 수 있습니다. 파티션을 나눈 테이블에 기록된 데이터는 파티션 나누기 열의 날짜 값(UTC로 표시됨)에 따라 자동으로 적절한 파티션에 전달됩니다.

파티션을 나눈 테이블에는 _PARTITIONTIME 유사 열이 필요하지 않습니다. 파티션을 나눈 테이블을 대상으로 쿼리를 사용하면 파티션을 나눈 열을 기준으로 조건부 필터를 지정하여 스캔되는 데이터의 양을 줄일 수 있습니다.

파티션을 나눈 테이블을 만들면 두 개의 특수 파티션이 만들어집니다.

  • __NULL__ 파티션 - 파티션을 나눈 열에 NULL 값이 있는 행을 나타냅니다.
  • __UNPARTITIONED__ 파티션 - 허용된 날짜 범위 밖에 있는 데이터를 나타냅니다.

__NULL____UNPARTITIONED__ 파티션을 제외하고 파티션 열의 모든 데이터는 파티션 식별자의 날짜와 일치합니다. 따라서 쿼리를 통해 필터 조건을 충족하는 데이터가 없는 파티션을 확인할 수 있습니다. 파티션 나누기 열에서 데이터를 필터링하는 쿼리는 값을 제한하고 불필요한 파티션을 완전히 프루닝할 수 있습니다.

파티션 나누기와 분할 비교

파티션을 나눈 테이블의 대안으로 [PREFIX]_YYYYMMDD와 같은 시간에 기반한 명명 방식을 사용해 테이블을 분할할 수도 있습니다. 이러한 방법을 날짜로 분할된 테이블 만들기라고 합니다. 표준 SQL 또는 이전 SQL을 사용하면 UNION 연산자가 포함된 쿼리를 지정하여 쿼리로 스캔하는 테이블을 제한할 수 있습니다.

파티션을 나눈 테이블이 날짜로 분할된 테이블보다 성능이 뛰어납니다. 날짜로 이름이 지정된 테이블을 만들 때 BigQuery는 날짜로 이름이 지정된 각 테이블의 스키마 및 메타데이터의 복사본을 유지해야 합니다. 또한 날짜로 이름이 지정된 테이블을 사용하는 경우에는 BigQuery에서 쿼리된 각 테이블의 권한을 확인해야 할 수 있습니다. 이렇게 하면 쿼리 오버헤드가 추가되고 쿼리 성능에 영향을 미칩니다. 가장 좋은 방법은 날짜로 분할된 테이블 대신 파티션을 나눈 테이블을 사용하는 것입니다.

파티션 나누기 옵션 비교

아래 테이블에서는 분할된 테이블과 파티션을 나눈 테이블을 비교합니다.

기능 분할된 테이블 내부 데이터화 시간으로 파티션을 나눈 테이블 파티션을 나눈 테이블
파티션 나누기 방법 없음: 테이블을 분할하고 UNION 연산자를 사용하여 테이블을 쿼리하면 파티션 나누기를 시뮬레이션할 수 있습니다. 데이터의 내부 데이터화 또는 도착 날짜를 기준으로 파티션을 나눕니다. 파티션 정보는 유사 열을 사용하여 참조할 수 있습니다. 지정한 TIMESTAMP 또는 DATE 열의 데이터를 기준으로 파티션을 나눕니다.
파티션 식별자 없음 0001-01-01과 9999-12-31 사이의 유효한 날짜를 사용할 수 있지만 DML 문은 1970-01-01 이전 또는 2159-12-31 이후의 날짜를 참조할 수 없습니다. 바인딩된 DATE 또는 TIMESTAMP 열의 유효한 항목. 현재 1970-01-01 이전의 날짜 값과 2159-12-31 이후의 날짜 값은 공유된 UNPARTITIONED 파티션에 배치됩니다. NULL 값은 명시적인 NULL 파티션에 상주합니다.
스캔된 데이터 제한 쿼리에서 불필요한 열을 제외하여 필요한 분할만 참조하고 데이터를 제한합니다. _PARTITIONTIME 유사 열을 사용하여 파티션을 프루닝합니다. 파티션을 나눈 열에서 조건자 필터를 사용합니다.
파티션 개수 테이블의 개수는 무제한이지만, 쿼리는 최대 1,000개의 테이블만 참조할 수 있습니다. 최대 4,000개의 파티션 최대 4,000개의 파티션
업데이트 작업 업데이트는 하루에 1,000회로 제한됩니다. 개별 작업을 단일 파티션에 커밋할 수 있습니다. 가장 최근의 파티션(기본값) 또는 [TABLE]$[DATE]와 같은 파티션 데코레이터를 사용하여 지정된 파티션에 커밋합니다. 개별 작업이 데이터를 최대 2,000개의 개별 파티션에 커밋할 수 있습니다.
스트리밍 삽입 테이블에 하나의 글로벌 버퍼 사용. 파티션 서픽스를 사용하여 현재 UTC 시간의 현재 날짜를 기준으로 지난 31일 및 향후 16일 이내의 파티션으로 스트리밍할 수 있습니다. 지난 1년에서 향후 6개월 사이의 데이터를 스트리밍할 수 있습니다. 이 범위를 벗어나는 날짜는 거부됩니다. 데이터가 스트리밍되면 지난 7일에서 향후 3일 사이의 데이터는 스트리밍 버퍼에 배치된 다음 해당 파티션으로 추출됩니다. 이 시간대를 벗어나는(단, 1년 이내의 6개월 범위) 데이터는 UNPARTITIONED 파티션에 배치됩니다. 파티션으로 나누어지지 않은 데이터가 충분하면 해당 파티션으로 로드됩니다.
시간대 평가 사용자 의미 체계로 정의됨 UTC UTC

파티션을 나눈 테이블의 할당량 및 한도

파티션을 나눈 테이블은 BigQuery에 한도가 정의되어 있습니다.

할당량과 한도는 다음을 포함하여 파티션을 나눈 테이블을 대상으로 실행할 수 있는 여러 작업 유형에도 적용됩니다.

모든 할당량 및 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.

파티션을 나눈 테이블 가격

BigQuery에서 파티션을 나눈 테이블을 만들고 사용할 때 부과되는 비용은 파티션에 저장되는 데이터와 데이터를 대상으로 실행하는 쿼리의 양에 따라 결정됩니다.

  • 저장소 가격에 대한 자세한 내용은 저장소 가격을 참조하세요.
  • 쿼리 가격에 대한 자세한 내용은 쿼리 가격을 참조하세요.

파티션에 데이터 로드하기, 파티션 복사, 파티션에서 데이터 내보내기를 포함하여 파티션을 나눈 테이블 작업 중 많은 작업이 무료입니다. 이러한 작업은 무료지만 BigQuery의 할당량 및 한도가 적용됩니다. 모든 무료 작업에 대한 자세한 내용은 가격 페이지의 무료 작업을 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.