외부에서 파티션을 나눈 데이터 사용
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에 저장된 외부 데이터 소스 쿼리에 대한 모든 제한사항이 적용됩니다.
다음 단계
- 파티션을 나눈 테이블 알아보기
- BigQuery에서 SQL을 사용하는 방법 알아보기