외부에서 파티션을 나눈 데이터 사용

BigQuery 외부 테이블을 사용하여 다음 데이터 스토어의 파티션을 나눈 데이터를 쿼리할 수 있습니다.

파티션을 나눈 외부 데이터는 기본 Hive 파티션 나누기 레이아웃을 사용해야 하며 다음 형식 중 하나여야 합니다.

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

외부에서 파티션을 나눈 데이터를 쿼리하려면 BigLake 테이블 또는 외부 테이블을 만들어야 합니다. BigLake 테이블을 사용하면 테이블 수준에서 세분화된 보안을 시행할 수 있으므로 이를 사용하는 것이 좋습니다. BigLake 및 외부 테이블에 대한 자세한 내용은 BigLake 테이블 소개외부 테이블 소개를 참조하세요.

테이블 정의 파일에서 적절한 옵션을 설정하여 Hive 파티션 나누기 지원을 사용 설정할 수 있습니다. 관리되는 파티션을 나눈 테이블 쿼리에 대한 상세 안내는 파티션을 나눈 테이블 소개를 참조하세요.

파티션 스키마

다음 섹션에서는 기본 하이브 파티션 나누기 레이아웃 및 BigQuery가 지원하는 스키마 감지 모드를 설명합니다.

불필요한 파일 읽기를 방지하고 성능을 향상시키려면 쿼리의 파티션 키에 조건자 필터를 사용할 수 있습니다.

지원되는 데이터 레이아웃

하이브 파티션 키는 Cloud Storage에서 데이터를 쿼리할 때 일반 열로 표시됩니다. 데이터는 기본 Hive 파티션 나누기 레이아웃을 따라야 합니다. 예를 들어 다음 파일의 키-값 쌍은 기본 레이아웃을 따라 등호 부호(=)를 구분자로 사용하는 디렉터리로 구성되어 있으며, 파티션 키의 순서는 항상 동일합니다.

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename

이 예시에서 공통 소스 URI 프리픽스는 gs://my_bucket/my_table입니다.

지원되지 않는 데이터 레이아웃

파티션 키 이름이 디렉터리 경로에 인코딩되어 있지 않으면 파티션 스키마 감지가 실패합니다. 예를 들어 다음과 같이 파티션 키 이름이 인코딩되지 않은 경로를 가정해 보겠습니다.

gs://my_bucket/my_table/2019-10-31/en/my_filename

파일의 스키마 순서가 일관되지 않으면 감지가 실패합니다. 예를 들어 다음의 두 파일은 파티션 키 인코딩이 반전된 경우입니다.

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename

감지 모드

BigQuery는 다음 세 가지 모드의 Hive 파티션 스키마 감지를 지원합니다.

  • AUTO: 키 이름과 유형이 자동 감지됩니다. 다음 유형을 감지할 수 있습니다.

  • STRINGS: 키 이름이 STRING 유형으로 자동 변환됩니다.

  • CUSTOM: 파티션 키 스키마는 소스 URI 프리픽스에 지정된 대로 인코딩됩니다.

커스텀 파티션 키 스키마

CUSTOM 스키마를 사용하려면 소스 URI 프리픽스 필드에 스키마를 지정해야 합니다. CUSTOM 스키마를 사용하면 각 파티션 키의 유형을 지정할 수 있습니다. 값은 지정된 유형에 유효하도록 파싱해야 하며, 그렇지 않으면 쿼리가 실패합니다.

예를 들어 source_uri_prefix 플래그를 gs://my_bucket/my_table/{dt:DATE}/{val:STRING}로 설정하면 BigQuery가 val을 STRING으로, dt를 DATE로 처리하고, gs://my_bucket/my_table을 일치하는 파일의 소스 URI 프리픽스로 사용합니다.

파티션 프루닝

BigQuery는 가능한 경우 파티션 키의 쿼리 조건자를 사용하여 파티션을 프루닝합니다. 이는 BigQuery가 불필요한 파일을 읽는 것을 방지하고 성능을 향상하는 데 도움이 됩니다.

쿼리에서 파티션 키의 조건자 필터

외부에서 파티션을 나눈 테이블을 만들 때 HivePartitioningOptions에서 requirePartitionFilter 옵션을 사용 설정하여 파티션 키에 조건부 필터를 사용하도록 요구할 수 있습니다.

이 옵션이 사용 설정된 경우 WHERE 절을 지정하지 않고 외부에서 파티션을 나눈 테이블을 쿼리하려면 Cannot query over table <table_name> without a filter over column(s) <partition key names> that can be used for partition elimination과 같은 오류가 발생합니다.

제한사항

  • 하이브 파티션 나누기 지원은 모든 URI에 대해 파티션 인코딩 바로 앞에서 끝나는 공통의 소스 URI 프리픽스를 가정하여 구축됩니다(예: gs://BUCKET/PATH_TO_TABLE/).
  • 파티션을 나눈 Hive 테이블의 디렉터리 구조는 동일한 파티션 나누기 키가 동일한 순서로 표시된다고 가정하며, 이때 파티션 키는 테이블당 최대 10개입니다.
  • 데이터는 기본 Hive 파티션 나누기 레이아웃을 따라야 합니다.
  • 기본 파일에 있는 Hive 파티션 나누기 키와 열은 겹치지 않아야 합니다.
  • GoogleSQL에서만 지원됩니다.

  • Cloud Storage에 저장된 외부 데이터 소스 쿼리에 대한 모든 제한사항이 적용됩니다.

다음 단계