파티션을 나눈 테이블 만들기
이 페이지에서는 BigQuery에서 파티션을 나눈 테이블을 만드는 방법을 설명합니다. 파티션을 나눈 테이블의 개요는 파티션을 나눈 테이블 소개를 참조하세요.
시작하기 전에
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.
필수 권한
테이블을 만들려면 다음 IAM 권한이 필요합니다.
bigquery.tables.create
bigquery.tables.updateData
bigquery.jobs.create
또한 테이블에 기록하는 데이터에 액세스하기 위해 bigquery.tables.getData
권한이 필요할 수 있습니다.
다음과 같은 사전 정의된 각 IAM 역할에는 테이블을 만드는 데 필요한 권한이 포함되어 있습니다.
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(bigquery.jobs.create
권한 포함)roles/bigquery.user
(bigquery.jobs.create
권한 포함)roles/bigquery.jobUser
(bigquery.jobs.create
권한 포함)
또한 bigquery.datasets.create
권한이 있으면 만들 데이터 세트에서 테이블을 만들고 업데이트할 수 있습니다.
BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
파티션을 나눈 빈 테이블 만들기
BigQuery에서 파티션을 나눈 테이블을 만드는 단계는 표준 테이블을 만드는 방법과 비슷하지만 다른 테이블 옵션과 함께 파티션 나누기 옵션을 지정한다는 점이 다릅니다.
시간 단위 열로 파티션을 나눈 테이블 만들기
스키마 정의가 있는 시간 단위 열로 파티션을 나눈 빈 테이블을 만들려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
- 탐색기 창에서 프로젝트를 펼친 후 데이터 세트를 선택합니다.
- 데이터 세트 정보 섹션에서 테이블 만들기를 클릭합니다.
- 테이블 만들기 패널에서 다음 세부정보를 지정합니다.
- 소스 섹션의 다음 항목으로 테이블 만들기 목록에서 빈 테이블을 선택합니다.
- 대상 섹션에서 다음 세부정보를 지정합니다.
- 데이터 세트에서 테이블을 만들 데이터 세트를 선택합니다.
- 테이블 필드에 만들려는 테이블의 이름을 입력합니다.
- 테이블 유형 필드가 기본 테이블로 설정되어 있는지 확인합니다.
- 스키마 섹션에 스키마 정의를 입력합니다.
스키마에는 파티션 나누기 열의
DATE
,TIMESTAMP
또는DATETIME
열이 있어야 합니다. 자세한 내용은 스키마 지정을 참조하세요. 다음 방법 중 하나를 사용하여 스키마 정보를 직접 입력할 수 있습니다.- 선택사항 1: 텍스트로 수정을 클릭하고 스키마를 JSON 배열 형식으로 붙여넣습니다. JSON 배열을 사용하는 경우 JSON 스키마 파일 만들기와 동일한 프로세스를 수행하여 스키마를 생성합니다.
다음 명령어를 입력하면 기존 테이블의 스키마를 JSON 형식으로 볼 수 있습니다.
bq show --format=prettyjson dataset.table
- 선택사항 2: 유형, 모드를 지정합니다. 필드 추가를 클릭하고 테이블 스키마를 입력합니다. 각 필드의 이름,
- 선택사항 1: 텍스트로 수정을 클릭하고 스키마를 JSON 배열 형식으로 붙여넣습니다. JSON 배열을 사용하는 경우 JSON 스키마 파일 만들기와 동일한 프로세스를 수행하여 스키마를 생성합니다.
다음 명령어를 입력하면 기존 테이블의 스키마를 JSON 형식으로 볼 수 있습니다.
- 파티션 및 클러스터 설정 섹션의 파티션 나누기 목록에서 필드로 파티션 나누기를 선택한 다음 파티션 나누기 열을 선택합니다. 스키마에
DATE
,TIMESTAMP
또는DATETIME
열이 포함된 경우에만 이 옵션을 사용할 수 있습니다. - 선택사항: 이 테이블의 모든 쿼리에 파티션 필터가 필요하면 파티션 필터 필요 체크박스를 선택합니다. 파티션 필터를 사용하여 비용을 줄이고 성능을 높일 수 있습니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요.
- 파티션 나누기 유형을 선택하여 일일, 시간별, 월간 또는 연간 파티션 나누기를 선택합니다.
- 선택사항: 고급 옵션 섹션에서 고객 관리 암호화 키를 사용하려면 고객 관리 암호화 키(CMEK) 사용 옵션을 선택합니다. 기본적으로 BigQuery는 Google에서 소유한 Google 관리 키를 사용하여 저장된 고객 콘텐츠를 암호화합니다.
- 테이블 만들기를 클릭합니다.
SQL
시간 단위 열로 파티션을 나눈 테이블을 만들려면 PARTITION BY
절이 있는 CREATE TABLE
DDL 문을 사용합니다.
다음 예시에서는 transaction_date
열을 기준으로 일일 파티션이 있는 테이블을 만듭니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
OPTIONS
절을 사용하여 파티션 만료 시간 및파티션 필터 요구사항과 같은 테이블 옵션을 설정합니다.실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
DATE
열의 기본 파티션 나누기 유형은 일일 파티션 나누기입니다. 다른 파티션 나누기 유형을 지정하려면 PARTITION BY
절에 DATE_TRUNC
함수를 포함합니다. 예를 들어 다음 쿼리에서는 월간 파티션이 있는 테이블을 만듭니다.
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY DATE_TRUNC(transaction_date, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
또한 TIMESTAMP
또는 DATETIME
열을 파티션 나누기 열로 지정할 수 있습니다. 이 경우 PARTITION BY
절에 TIMESTAMP_TRUNC
또는 DATETIME_TRUNC
함수를 포함하여 파티션 유형을 지정합니다. 예를 들어 다음 문은 TIMESTAMP
열을 기준으로 일일 파티션이 포함된 테이블을 만듭니다.
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP) PARTITION BY TIMESTAMP_TRUNC(transaction_ts, DAY) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
bq mk
명령어를--table
플래그(또는-t
단축키)와 함께 사용합니다.bq mk \ --table \ --schema SCHEMA \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN PROJECT_ID:DATASET.TABLE
다음을 바꿉니다.
- SCHEMA:
column:data_type,column:data_type
형식의 스키마 정의 또는 로컬 머신의 JSON 스키마 파일 경로입니다. 자세한 내용은 스키마 지정을 참조하세요. - COLUMN: 파티션 나누기 열의 이름입니다. 테이블 스키마에서 이 열은
TIMESTAMP
,DATETIME
또는DATE
유형이어야 합니다. - UNIT_TIME: 파티션 나누기 유형입니다. 지원되는 값은
DAY
,HOUR
,MONTH
또는YEAR
입니다. - EXPIRATION_TIME: 테이블 파티션 만료 시간(초)입니다.
--time_partitioning_expiration
플래그는 선택사항입니다. 자세한 내용은 파티션 만료 시간 설정을 참조하세요. - BOOLEAN:
true
이면 이 테이블의 쿼리에 파티션 필터가 포함되어야 합니다.--require_partition_filter
플래그는 선택사항입니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요. - PROJECT_ID: 프로젝트 ID입니다. 생략하면 기본 프로젝트가 사용됩니다.
- DATASET: 프로젝트의 데이터 세트 이름입니다.
- TABLE: 만들 테이블의 이름입니다.
다른 명령줄 옵션은
bq mk
를 참조하세요.다음 예시에서는 시간별 파티션 나누기를 사용하여
ts
열에서 파티션을 나눈mytable
이라는 테이블을 만듭니다. 파티션 만료 시간은 259,200초(3일)입니다.bq mk \ -t \ --schema 'ts:TIMESTAMP,qtr:STRING,sales:FLOAT' \ --time_partitioning_field ts \ --time_partitioning_type HOUR \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:
Terraform
google_bigquery_table
리소스를 사용합니다.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 예시에서는 일별로 파티션을 나눈 mytable
이라는 테이블을 만듭니다.
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
timePartitioning
속성과 schema
속성을 지정하는 테이블 리소스가 정의된 tables.insert
메서드를 호출합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
수집 시간으로 파티션을 나눈 테이블 만들기
스키마 정의가 있는 수집 시간으로 파티션을 나눈 빈 테이블을 만들려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
탐색기 패널에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
작업 옵션을 펼치고 열기를 클릭합니다.
세부정보 패널에서 테이블 만들기
를 클릭합니다.테이블 만들기 페이지의 소스 섹션에서 빈 테이블을 선택합니다.
대상 섹션에서 다음을 수행합니다.
- 데이터 세트 이름에서 적절한 데이터 세트를 선택합니다.
- 테이블 이름 필드에 테이블 이름을 입력합니다.
- 테이블 유형이 기본 테이블로 설정되어 있는지 확인합니다.
스키마 섹션에 스키마 정의를 입력합니다.
파티션 및 클러스터 설정 섹션에서 파티션 나누기에 수집 시간으로 파티션 나누기를 클릭합니다.
(선택사항) 이 테이블의 모든 쿼리에 파티션 필터가 필요하면 파티션 필터 필요 체크박스를 선택합니다. 파티션 필터를 필수항목으로 설정하면 비용을 줄이고 성능을 향상시킬 수 있습니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요.
테이블 만들기를 클릭합니다.
SQL
수집 시간으로 파티션을 나눈 테이블을 만들려면 _PARTITIONDATE
에서 파티션을 나눈 PARTITION BY
절이 있는 CREATE TABLE
문을 사용합니다.
다음 예시에서는 일일 파티션이 포함된 테이블을 만듭니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY _PARTITIONDATE OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
OPTIONS
절을 사용하여 파티션 만료 시간 및파티션 필터 요구사항과 같은 테이블 옵션을 설정합니다.실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
수집 시간으로 파티션 나누기의 기본 파티션 나누기 유형은 일일 파티션 나누기입니다. 다른 파티션 나누기 유형을 지정하려면 PARTITION BY
절에 DATE_TRUNC
함수를 포함합니다. 예를 들어 다음 쿼리에서는 월간 파티션이 있는 테이블을 만듭니다.
CREATE TABLE mydataset.newtable (transaction_id INT64) PARTITION BY DATE_TRUNC(_PARTITIONTIME, MONTH) OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
bq mk
명령어를--table
플래그(또는-t
단축키)와 함께 사용합니다.bq mk \ --table \ --schema SCHEMA \ --time_partitioning_type UNIT_TIME \ --time_partitioning_expiration EXPIRATION_TIME \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
다음을 바꿉니다.
- SCHEMA:
column:data_type,column:data_type
형식의 정의 또는 로컬 머신의 JSON 스키마 파일 경로입니다. 자세한 내용은 스키마 지정을 참조하세요. - UNIT_TIME: 파티션 나누기 유형입니다. 지원되는 값은
DAY
,HOUR
,MONTH
또는YEAR
입니다. - EXPIRATION_TIME: 테이블 파티션 만료 시간(초)입니다.
--time_partitioning_expiration
플래그는 선택사항입니다. 자세한 내용은 파티션 만료 시간 설정을 참조하세요. - BOOLEAN:
true
이면 이 테이블의 쿼리에 파티션 필터가 포함되어야 합니다.--require_partition_filter
플래그는 선택사항입니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요. - PROJECT_ID: 프로젝트 ID입니다. 생략하면 기본 프로젝트가 사용됩니다.
- DATASET: 프로젝트의 데이터 세트 이름입니다.
- TABLE: 만들 테이블의 이름입니다.
다른 명령줄 옵션은
bq mk
를 참조하세요.다음 예시에서는
mytable
이라는 수집 시간으로 파티션을 나눈 테이블을 만듭니다. 테이블에는 파티션 만료 시간이 259,200초(3일)인 일일 파티션 나누기가 있습니다.bq mk \ -t \ --schema qtr:STRING,sales:FLOAT,year:STRING \ --time_partitioning_type DAY \ --time_partitioning_expiration 259200 \ mydataset.mytable
- SCHEMA:
Terraform
google_bigquery_table
리소스를 사용합니다.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 예시에서는 수집 시간별로 파티션을 나눈 mytable
이라는 테이블을 만듭니다.
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
timePartitioning
속성과 schema
속성을 지정하는 테이블 리소스가 정의된 tables.insert
메서드를 호출합니다.
정수 범위로 파티션을 나눈 테이블 만들기
스키마 정의가 있는 정수 범위로 파티션을 나눈 빈 테이블을 만들려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
탐색기 패널에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
작업 옵션을 펼치고 열기를 클릭합니다.
세부정보 패널에서 테이블 만들기
를 클릭합니다.테이블 만들기 페이지의 소스 섹션에서 빈 테이블을 선택합니다.
대상 섹션에서 다음을 수행합니다.
- 데이터 세트 이름에서 적절한 데이터 세트를 선택합니다.
- 테이블 이름 필드에 테이블 이름을 입력합니다.
- 테이블 유형이 기본 테이블로 설정되어 있는지 확인합니다.
스키마 섹션에 스키마 정의를 입력합니다. 스키마에 파티션 나누기 열의
INTEGER
열이 포함되어 있는지 확인합니다. 자세한 내용은 스키마 지정을 참조하세요.파티션 및 클러스터 설정 섹션의 파티션 나누기 드롭다운 목록에서 필드로 파티션 나누기를 선택하고 파티션 나누기 열을 선택합니다. 스키마에
INTEGER
열이 포함된 경우에만 이 옵션을 사용할 수 있습니다.Start, End, Interval 값을 제공합니다.
- Start는 첫 번째 파티션 범위의 시작입니다(해당 값 포함).
- End는 마지막 파티션 범위의 끝입니다(해당 값 제외).
- Interval은 각 파티션 범위의 너비입니다.
이 범위를 벗어나는 값은 특수
__UNPARTITIONED__
파티션으로 이동합니다.(선택사항) 이 테이블의 모든 쿼리에 파티션 필터가 필요하면 파티션 필터 필요 체크박스를 선택합니다. 파티션 필터를 필수항목으로 설정하면 비용을 줄이고 성능을 향상시킬 수 있습니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요.
테이블 만들기를 클릭합니다.
SQL
정수 범위로 파티션을 나눈 테이블을 만들려면 PARTITION BY
절이 있는 CREATE TABLE
DDL 문을 사용합니다.
다음 예시에서는 start 0, end 100, interval 10으로 customer_id
열에서 파티션을 나눈 테이블을 만듭니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE TABLE mydataset.newtable (customer_id INT64, date1 DATE) PARTITION BY RANGE_BUCKET(customer_id, GENERATE_ARRAY(0, 100, 10)) OPTIONS ( require_partition_filter = TRUE);
OPTIONS
절을 사용하여 파티션 필터 요구사항과 같은 테이블 옵션을 설정합니다.실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
bq mk
명령어를--table
플래그(또는-t
단축키)와 함께 사용합니다.bq mk \ --schema schema \ --range_partitioning=COLUMN_NAME,START,END,INTERVAL \ --require_partition_filter=BOOLEAN \ PROJECT_ID:DATASET.TABLE
다음을 바꿉니다.
- SCHEMA:
column:data_type,column:data_type
형식의 인라인 스키마 정의 또는 로컬 머신의 JSON 스키마 파일 경로입니다. 자세한 내용은 스키마 지정을 참조하세요. - COLUMN_NAME: 파티션 나누기 열의 이름입니다. 테이블 스키마에서 이 열은
INTEGER
유형이어야 합니다. - START: 첫 번째 파티션 범위의 시작입니다(해당 값 포함).
- END: 마지막 파티션 범위의 끝입니다(해당 값 제외).
- INTERVAL: 각 파티션 범위의 너비입니다.
- BOOLEAN:
true
이면 이 테이블의 쿼리에 파티션 필터가 포함되어야 합니다.--require_partition_filter
플래그는 선택사항입니다. 자세한 내용은 파티션 필터 요구사항 설정을 참조하세요. - PROJECT_ID: 프로젝트 ID입니다. 생략하면 기본 프로젝트가 사용됩니다.
- DATASET: 프로젝트의 데이터 세트 이름입니다.
- TABLE: 만들 테이블의 이름입니다.
파티션 범위를 벗어나는 값은 특수
__UNPARTITIONED__
파티션으로 이동합니다.다른 명령줄 옵션은
bq mk
를 참조하세요.다음 예시에서는
customer_id
열에서 파티션을 나눈mytable
이라는 테이블을 만듭니다.bq mk \ -t \ --schema 'customer_id:INTEGER,qtr:STRING,sales:FLOAT' \ --range_partitioning=customer_id,0,100,10 \ mydataset.mytable
- SCHEMA:
Terraform
google_bigquery_table
리소스를 사용합니다.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 예시에서는 정수 범위로 파티션을 나눈 mytable
테이블을 만듭니다.
Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.
Cloud Shell 준비
- Cloud Shell을 실행합니다.
-
Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.
-
Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는
.tf
확장자가 있어야 합니다(예:main.tf
). 이 튜토리얼에서는 파일을main.tf
라고 합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.
샘플 코드를 새로 만든
main.tf
에 복사합니다.필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.
- 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
- 변경사항을 저장합니다.
-
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
변경사항 적용
-
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
-
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
- 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.
API
rangePartitioning
속성과 schema
속성을 지정하는 테이블 리소스가 정의된 tables.insert
메서드를 호출합니다.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
쿼리 결과에서 파티션을 나눈 테이블 만들기
다음 방법으로 쿼리 결과에서 파티션을 나눈 테이블을 만들 수 있습니다.
- SQL에서는
CREATE TABLE ... AS SELECT
문을 사용합니다. 이 방식을 사용하여 수집 시간이 아닌 시간 단위 열이나 정수 범위로 파티션을 나눈 테이블을 만들 수 있습니다. - bq 명령줄 도구나 BigQuery API를 사용하여 쿼리의 대상 테이블을 설정합니다. 쿼리가 실행되면 BigQuery에서 결과를 대상 테이블에 씁니다. 모든 파티션 나누기 유형에 이 방법을 사용할 수 있습니다.
jobs.insert
API 메서드를 호출하고timePartitioning
속성 또는rangePartitioning
속성에 파티션 나누기를 지정합니다.
SQL
쿼리에 SELECT AS
절이 있는 CREATE TABLE
문을 사용합니다. PARTITION BY
절을 포함하여 파티션 나누기를 구성합니다.
다음 예시에서는 transaction_date
열에서 파티션을 나눈 테이블을 만듭니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date AS ( SELECT transaction_id, transaction_date FROM mydataset.mytable );
OPTIONS
절을 사용하여 파티션 필터 요구사항과 같은 테이블 옵션을 설정합니다.실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
쿼리에서 파티션을 나눈 테이블을 만들려면
bq query
명령어를--destination_table
플래그 및--time_partitioning_type
플래그와 함께 사용합니다.시간 단위 열로 파티션 나누기:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_field COLUMN \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
수집 시간으로 파티션 나누기:
bq query \ --use_legacy_sql=false \ --destination_table TABLE_NAME \ --time_partitioning_type UNIT_TIME \ 'QUERY_STATEMENT'
정수 범위로 파티션 나누기:
bq query \ --use_legacy_sql=false \ --destination_table PROJECT_ID:DATASET.TABLE \ --range_partitioning COLUMN,START,END,INTERVAL \ 'QUERY_STATEMENT'
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다. 생략하면 기본 프로젝트가 사용됩니다.
- DATASET: 프로젝트의 데이터 세트 이름입니다.
- TABLE: 만들 테이블의 이름입니다.
- COLUMN: 파티션 나누기 열의 이름입니다.
- UNIT_TIME: 파티션 나누기 유형입니다. 지원되는 값은
DAY
,HOUR
,MONTH
또는YEAR
입니다. - START: 파티션 나누기 범위의 시작입니다(해당 값 포함).
- END: 파티션 나누기 범위의 끝입니다(해당 값 제외).
- INTERVAL: 파티션 내 각 범위의 너비입니다.
- QUERY_STATEMENT: 테이블을 채우는 데 사용되는 쿼리입니다.
다음 예시에서는 월별 파티션 나누기를 사용하여
transaction_date
열에서 파티션을 나눈 테이블을 만듭니다.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --time_partitioning_field transaction_date \ --time_partitioning_type MONTH \ 'SELECT transaction_id, transaction_date FROM mydataset.mytable'
다음 예시에서는 정수 범위 파티션 나누기를 사용하여
customer_id
열에서 파티션을 나눈 테이블을 만듭니다.bq query \ --use_legacy_sql=false \ --destination_table mydataset.newtable \ --range_partitioning customer_id,0,100,10 \ 'SELECT * FROM mydataset.ponies'
수집 시간으로 파티션을 나눈 테이블의 경우 파티션 데코레이터를 사용하여 특정 파티션에 데이터를 로드할 수도 있습니다. 다음 예시에서는 수집 시간으로 파티션을 나눈 새 테이블을 만들고
20180201
(2018년 2월 1일) 파티션에 데이터를 로드합니다.bq query \ --use_legacy_sql=false \ --time_partitioning_type=DAY \ --destination_table='newtable$20180201' \ 'SELECT * FROM mydataset.mytable'
API
쿼리 결과를 파티션을 나눈 테이블에 저장하려면 jobs.insert
메서드를 호출합니다.
query
작업을 구성합니다. destinationTable
에 대상 테이블을 지정합니다. timePartitioning
속성 또는 rangePartitioning
속성에서 파티션 나누기를 지정합니다.
날짜로 샤딩된 테이블을 수집 시간으로 파티션을 나눈 테이블로 변환
이전에 날짜로 샤딩된 테이블을 만든 경우 bq 명령줄 도구에서 partition
명령어를 사용하여 전체 관련 테이블 세트를 수집 시간으로 파티션을 나눈 테이블 하나로 변환할 수 있습니다.
bq --location=LOCATION partition \ --time_partitioning_type=PARTITION_TYPE \ --time_partitioning_expiration INTEGER \ PROJECT_ID:SOURCE_DATASET.SOURCE_TABLE \ PROJECT_ID:DESTINATION_DATASET.DESTINATION_TABLE
다음을 바꿉니다.
- LOCATION: 위치 이름입니다.
--location
플래그는 선택사항입니다. - PARTITION_TYPE: 파티션 유형입니다. 가능한 값은
DAY
,HOUR
,MONTH
또는YEAR
입니다. - INTEGER: 파티션 만료 시간(초)입니다. 최솟값은 없습니다. 만료 시간은 파티션의 UTC 날짜에 정수 값을 더한 값입니다.
time_partitioning_expiration
플래그는 선택사항입니다. - PROJECT_ID: 프로젝트 ID입니다.
- SOURCE_DATASET: 날짜로 샤딩된 테이블이 포함된 데이터 세트입니다.
- SOURCE_TABLE: 날짜로 샤딩된 테이블의 프리픽스입니다.
- DESTINATION_DATASET: 파티션을 나눈 새 테이블의 데이터 세트입니다.
- DESTINATION_TABLE: 만들려는 파티션을 나눈 테이블의 이름입니다.
partition
명령어는 --label
, --expiration
, --add_tags
또는 --description
플래그를 지원하지 않습니다. 파티션을 나눈 테이블이 생성되면 테이블에 라벨, 테이블 만료 시간, 태그, 설명을 추가할 수 있습니다.
partition
명령어를 실행하면 BigQuery가 샤딩된 테이블에서 파티션을 생성하는 복사 작업을 만듭니다.
다음 예시에서는 sourcetable_
프리픽스가 있는 날짜로 샤딩된 테이블 세트에서 mytable_partitioned
라는 수집 시간으로 파티션을 나눈 테이블을 만듭니다. 새 테이블 파티션은 매일 나뉘며 파티션 만료 시간은 259,200초(3일)입니다.
bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned
날짜로 샤딩된 테이블이 sourcetable_20180126
및 sourcetable_20180127
이면 이 명령어는 mydataset.mytable_partitioned$20180126
및 mydataset.mytable_partitioned$20180127
파티션을 만듭니다.
파티션을 나눈 테이블 보안
파티션을 나눈 테이블의 액세스 제어는 표준 테이블의 액세스 제어와 동일합니다. 자세한 내용은 테이블 액세스 제어 소개를 참조하세요.
다음 단계
- 파티션을 나눈 테이블을 관리하고 업데이트하는 방법을 알아보려면 파티션을 나눈 테이블 관리를 참조하세요.
- 파티션을 나눈 테이블 쿼리에 대한 자세한 내용은 파티션을 나눈 테이블 쿼리를 참조하세요.