테이블 데이터를 Cloud Storage로 내보내기
이 페이지에서는 BigQuery 테이블에서 Cloud Storage로 데이터를 내보내거나 추출하는 방법을 설명합니다.
데이터를 BigQuery에 로드한 후에 여러 가지 형식으로 데이터를 내보낼 수 있습니다. BigQuery는 최대 1GB의 데이터를 하나의 파일로 내보낼 수 있습니다. 1GB가 넘는 데이터를 내보내려면 데이터를 여러 파일로 내보내야 합니다. 데이터를 여러 파일로 내보내면 파일 크기가 달라집니다.
Dataflow와 같은 서비스를 사용하면 데이터를 수동으로 내보내지 않고 BigQuery에서 읽을 수 있습니다. Dataflow를 사용하여 BigQuery에서 데이터를 읽고 쓰는 방법에 대한 자세한 내용은 Apache Beam 문서의 BigQuery I/O를 참조하세요.
EXPORT DATA
문을 사용하여 쿼리 결과를 내보낼 수도 있습니다. EXPORT DATA OPTIONS
를 사용하여 뷰를 Cloud Storage로 내보낼 수 있습니다.
내보내기 제한
BigQuery에서 데이터를 내보낼 때 다음 사항에 유의하세요.
- 테이블 데이터를 로컬 파일, Google Sheets 또는 Google Drive로 내보낼 수 없습니다. 유일하게 지원되는 내보내기 위치는 Cloud Storage입니다. 쿼리 결과 저장에 대한 정보는 쿼리 결과 다운로드 및 저장을 참조하세요.
- 최대 1GB의 테이블 데이터를 단일 파일로 내보낼 수 있습니다. 1GB가 넘는 데이터를 내보내려면 와일드 카드를 사용하여 데이터를 여러 파일로 내보내세요. 데이터를 여러 파일로 내보내면 파일 크기가 달라집니다. 내보낸 파일 크기를 제한하려면 데이터를 파티션으로 나누고 각 파티션을 내보내면 됩니다.
EXPORT DATA
문을 사용할 때 생성되는 파일 크기는 보장되지 않습니다.- 내보내기 작업에서 생성되는 파일 수는 다를 수 있습니다.
- 중첩되거나 반복되는 데이터는 CSV 형식으로 내보낼 수 없습니다. Avro, JSON, Parquet 내보내기에는 중첩 및 반복되는 데이터가 지원됩니다.
- 데이터를 JSON 형식으로 내보내는 경우 다른 시스템에서 데이터를 읽을 때 64비트 정밀도를 유지하기 위해서 INT64(정수) 데이터 유형이 JSON 문자열로 인코딩됩니다.
- 여러 테이블의 데이터를 단일 내보내기 작업으로 내보낼 수 없습니다.
- Google Cloud 콘솔을 사용하여 데이터를 내보내는 경우에는
GZIP
이외의 압축 유형을 선택할 수 없습니다. - 보관 정책이 사용 설정된 Cloud Storage 버킷으로 데이터를 내보내지 않는 것이 좋습니다. BigQuery는 버킷에 파일을 쓰는 작업을 다시 시도할 수 있으며, 버킷의 보관 정책으로 인해 파일이 덮어쓰기되지 않는 경우 이러한 재시도가 실패할 수 있습니다. 보관 정책이 있는 Cloud Storage 버킷으로 데이터를 내보내야 하는 경우 내보내기를 시작하기 전에 정책을 사용 중지합니다.
- JSON 형식으로 테이블을 내보낼 때
<
,>
,&
기호는 유니코드 표기법\uNNNN
을 사용하여 변환됩니다. 여기서N
은 16진수입니다. 예를 들어profit&loss
는profit\u0026loss
가 됩니다. 이 유니코드 변환은 보안 취약점을 방지하기 위해 수행됩니다. - 내보낸 테이블 데이터의 순서는
EXPORT DATA
문을 사용하고query_statement
에서ORDER BY
절을 지정하지 않는 한 보장되지 않습니다. - BigQuery는 처음 이중 슬래시 다음에 슬래시 여러 개가 연속으로 포함된 Cloud Storage 리소스 경로를 지원하지 않습니다.
Cloud Storage 객체 이름에는 연속된 슬래시('/') 문자 여러 개가 포함될 수 있습니다. 하지만 BigQuery는 연속된 슬래시 여러 개를 단일 슬래시로 변환합니다. 예를 들어
gs://bucket/my//object//name
리소스 경로는 Cloud Storage에서는 유효하지만 BigQuery에서는 작동하지 않습니다. - 내보내기 작업이 진행 중일 때 BigQuery에 로드되는 모든 새 데이터는 해당 내보내기 작업에 포함되지 않습니다 새 데이터를 내보내려면 새 내보내기 작업을 만들어야 합니다.
시작하기 전에
사용자에게 이 문서의 각 태스크를 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.
필수 권한
이 문서의 태스크를 수행하려면 다음 권한이 필요합니다.
BigQuery 테이블에서 데이터를 내보내는 권한
BigQuery 테이블에서 데이터를 내보내려면 bigquery.tables.export
IAM 권한이 필요합니다.
사전 정의된 다음 각 IAM 역할에는 bigquery.tables.export
권한이 포함되어 있습니다.
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
내보내기 작업을 실행할 수 있는 권한
내보내기 작업을 실행하려면 bigquery.jobs.create
IAM 권한이 필요합니다.
다음과 같은 사전 정의된 각 IAM 역할에는 내보내기 작업을 실행하는 데 필요한 권한이 포함되어 있습니다.
roles/bigquery.user
roles/bigquery.jobUser
roles/bigquery.admin
데이터를 Cloud Storage 버킷에 쓸 수 있는 권한
데이터를 기존 Cloud Storage 버킷에 쓰려면 다음과 같은 IAM 권한이 필요합니다.
storage.objects.create
storage.objects.delete
다음과 같은 사전 정의된 각 IAM 역할에는 기존 Cloud Storage 버킷에 데이터를 쓰는 데 필요한 권한이 포함되어 있습니다.
roles/storage.objectAdmin
roles/storage.admin
BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
위치 고려사항
데이터를 내보내기 위한 Cloud Storage 버킷을 같은 위치에 배치합니다.- BigQuery 데이터 세트가
EU
멀티 리전에 있는 경우 내보내는 데이터가 포함된 Cloud Storage 버킷이 동일한 멀티 리전이나 멀티 리전 내에 포함된 위치에 있어야 합니다. 예를 들어 BigQuery 데이터 세트가EU
멀티 리전에 있으면 Cloud Storage 버킷은 EU 내에 있는europe-west1
벨기에 리전에 있을 수 있습니다.데이터 세트가
US
멀티 리전에 있는 경우 데이터를 모든 위치의 Cloud Storage 버킷으로 내보낼 수 있습니다. - 데이터 세트가 한 리전에 있으면 Cloud Storage 버킷은 같은 리전에 있어야 합니다. 예를 들어 데이터 세트가
asia-northeast1
도쿄 리전에 있으면 Cloud Storage 버킷은ASIA
멀티 리전에 있을 수 없습니다.
- BigQuery 데이터 세트 또는 Cloud Storage 버킷과 같은 리전 내 스토리지 리소스를 선택한 경우 데이터를 지리적으로 관리하기 위한 계획을 세웁니다.
Cloud Storage 위치에 대한 자세한 내용은 Cloud Storage 문서의 버킷 위치를 참조하세요.
다른 위치 간 BigQuery 데이터 이동
데이터 세트가 생성된 후에는 데이터 세트 위치를 변경할 수 없지만 데이터 세트를 복사할 수 있습니다. 한 위치에서 다른 위치로 데이터 세트를 옮길 수 없지만 수동으로 데이터 세트를 이동(재생성)할 수는 있습니다.
내보내기 형식 및 압축 유형
BigQuery는 내보낸 데이터에 대해 다음과 같은 데이터 형식 및 압축 유형을 지원합니다.
데이터 형식 | 지원되는 압축 유형 | 세부정보 |
---|---|---|
CSV | GZIP |
중첩 및 반복되는 데이터가 지원되지 않습니다. |
JSON | GZIP | 중첩 및 반복되는 데이터가 지원됩니다. |
Avro | DEFLATE, SNAPPY | Avro 내보내기에는 GZIP 압축이 지원되지 않습니다. 중첩 및 반복되는 데이터가 지원됩니다. Avro 내보내기 세부정보를 참조하세요. |
Parquet | SNAPPY, GZIP, ZSTD | 중첩 및 반복되는 데이터가 지원됩니다. Parquet 내보내기 세부정보를 참조하세요. |
데이터 내보내기
테이블 데이터를 내보내는 방법은 다음과 같습니다.
- Google Cloud 콘솔 사용
- bq 명령줄 도구에서
bq extract
명령어 사용 - API 또는 클라이언트 라이브러리를 사용하여
extract
작업 제출
테이블 데이터 내보내기
BigQuery 테이블에서 데이터를 내보내는 방법은 다음과 같습니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.
세부정보 패널에서 내보내기를 클릭하고 Cloud Storage로 내보내기를 선택합니다.
테이블을 Google Cloud Storage로 내보내기 대화상자에서
- Google Cloud Storage 위치 선택에서 데이터를 내보낼 버킷, 폴더 또는 파일을 찾습니다.
- 내보내기 형식에서 내보낸 데이터 형식, CSV, JSON(줄바꿈으로 구분), Avro 또는 Parquet를 선택합니다.
- 압축에 압축 형식을 선택하거나 압축하지 않음에
None
을 선택합니다. - 내보내기를 클릭하여 테이블을 내보냅니다. google3/googledata/devsite/site-cloud/en/bigquery/docs/introduction-sql.md 작업 진행 상황을 확인하려면 내보내기 작업의 작업 기록 탐색창에서 맨 위쪽을 확인하세요.
뷰를 Cloud Storage로 내보내려면 EXPORT DATA OPTIONS
문이 필요합니다.
SQL
EXPORT DATA
문을 사용합니다.
다음 예시에서는 mydataset.table1
이라고 하는 테이블에서 선택한 필드를 내보냅니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
EXPORT DATA OPTIONS ( uri = 'gs://bucket/folder/*.csv', format = 'CSV', overwrite = true, header = true, field_delimiter = ';') AS ( SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 );
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq extract
명령어를 --destination_format
플래그와 함께 사용합니다.
(선택사항) --location
플래그를 지정하고 값을 사용자 위치로 설정합니다.
다른 선택적 플래그에는 다음이 포함됩니다.
--compression
: 내보내는 파일에 사용할 압축 유형입니다.--field_delimiter
: CSV 내보내기의 출력 파일에서 열 사이의 경계를 나타내는 문자입니다.\t
와tab
모두 탭 구분 기호로 사용할 수 있습니다.--print_header
: 이 플래그를 지정하면 헤더가 있는 형식(예: CSV)의 헤더 행이 인쇄됩니다.
bq extract --location=location \ --destination_format format \ --compression compression_type \ --field_delimiter delimiter \ --print_header=boolean \ project_id:dataset.table \ gs://bucket/filename.ext
각 항목의 의미는 다음과 같습니다.
- location은 사용자 위치의 이름입니다.
--location
플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용한다면 플래그 값을asia-northeast1
로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다. - format은 내보낸 데이터 형식입니다(
CSV
,NEWLINE_DELIMITED_JSON
,AVRO
또는PARQUET
). - compression_type은 데이터 형식에 지원되는 압축 유형입니다. 내보내기 형식 및 압축 유형을 참조하세요.
- delimiter는 CSV 내보내기의 열 사이의 경계를 나타내는 문자입니다.
\t
및tab
은 탭에 허용되는 이름입니다. - boolean은
true
또는false
입니다.true
로 설정하면 헤더 행은 데이터 형식이 헤더를 지원하는 경우 내보낸 데이터에 인쇄됩니다. 기본값은true
입니다. - project_id는 프로젝트 ID입니다.
- dataset는 소스 데이터 세트의 이름입니다.
- table은 내보내는 테이블입니다. 파티션 데코레이터를 사용할 경우 작은 따옴표를 사용해서 테이블 경로를 묶거나
$
문자를 이스케이프해야 합니다. - bucket은 데이터를 내보내는 Cloud Storage 버킷 이름입니다. BigQuery 데이터 세트와 Cloud Storage 버킷은 같은 위치에 있어야 합니다.
- filename.ext는 내보낸 데이터 파일의 이름 및 확장자입니다. 와일드 카드를 사용하여 여러 파일로 내보낼 수 있습니다.
예를 들면 다음과 같습니다.
예를 들어 다음 명령어는 mydataset.mytable
을 myfile.csv
라는 gzip 압축 파일로 내보냅니다. myfile.csv
는 example-bucket
이라는 Cloud Storage 버킷에 저장됩니다.
bq extract \ --compression GZIP \ 'mydataset.mytable' \ gs://example-bucket/myfile.csv
기본 대상 형식은 CSV입니다. JSON 또는 Avro로 내보내려면 destination_format
플래그를 사용하고 형식을 NEWLINE_DELIMITED_JSON
또는 AVRO
로 설정합니다. 예를 들면 다음과 같습니다.
bq extract \ --destination_format NEWLINE_DELIMITED_JSON \ 'mydataset.mytable' \ gs://example-bucket/myfile.json
다음 명령어는 mydataset.mytable
을 Snappy를 사용하여 압축된 Avro 파일로 내보냅니다. 파일 이름은 myfile.avro
입니다. myfile.avro
는 example-bucket
라는 Cloud Storage 버킷으로 내보내집니다.
bq extract \ --destination_format AVRO \ --compression SNAPPY \ 'mydataset.mytable' \ gs://example-bucket/myfile.avro
다음 명령어는 mydataset.my_partitioned_table
의 단일 파티션을 Cloud Storage의 CSV 파일로 내보냅니다.
bq extract \ --destination_format CSV \ 'mydataset.my_partitioned_table$0' \ gs://example-bucket/single_partition.csv
API
데이터를 내보내려면 extract
작업을 만들고 작업 구성을 게재합니다.
(선택사항) 작업 리소스의 jobReference
섹션에 있는 location
속성에 사용자 위치를 지정합니다.
BigQuery 소스 데이터와 Cloud Storage 대상을 가리키는 추출 작업을 만듭니다.
프로젝트 ID, 데이터 세트 ID, 테이블 ID를 포함하는
sourceTable
구성 객체를 사용하여 소스 테이블을 지정합니다.destination URI(s)
속성은gs://bucket/filename.ext
형식으로 정규화되어야 합니다. 각 URI에 와일드 카드 문자 '*' 하나가 포함될 수 있으며 이 문자는 버킷 이름 다음에 있어야 합니다.configuration.extract.destinationFormat
속성을 설정하여 데이터 형식을 지정합니다. 예를 들어 JSON 파일을 내보내려면 이 속성을NEWLINE_DELIMITED_JSON
값으로 설정합니다.작업 상태를 확인하려면 초기 요청이 반환한 작업 ID를 사용하여 jobs.get(job_id)을 호출합니다.
status.state = DONE
이면 작업이 성공적으로 완료된 것입니다.status.errorResult
속성이 있으면 요청이 실패한 것이며 해당 객체에 문제를 설명하는 정보가 포함됩니다.status.errorResult
가 없으면 작업은 성공적으로 끝났지만 심각하지 않은 오류가 발생했을 수 있다는 의미입니다. 심각하지 않은 오류는 반환된 작업 객체의status.errors
속성에 나열됩니다.
API 참고:
jobs.insert
를 호출하여 작업을 만들 때 고유 ID를 생성하여jobReference.jobId
로 전달하는 것이 가장 좋습니다. 클라이언트가 알려진 작업 ID로 폴링하거나 재시도할 수 있으므로 이 방법은 네트워크 장애 시에 더 안정적입니다.특정한 작업 ID에 대한
jobs.insert
호출은 멱등성을 지닙니다. 즉, 같은 작업 ID로 원하는 만큼 다시 시도할 수 있으며 최대 한 번만 성공합니다.
C#
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 BigQuery C# API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
PHP
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 BigQuery PHP API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Ruby
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 BigQuery Ruby API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Avro 내보내기 세부정보
BigQuery는 Avro 형식의 데이터를 다음과 같은 방식으로 표현합니다.
- 결과 내보내기 파일은 Avro 컨테이너 파일입니다.
- 각 BigQuery 행은 Avro 레코드로 표시됩니다. 중첩된 데이터는 중첩된 레코드 객체로 표현됩니다.
REQUIRED
필드는 해당 Avro 유형으로 표현됩니다. 예를 들어 BigQueryINTEGER
유형은 AvroLONG
유형에 매핑됩니다.NULLABLE
필드는 해당 유형과 'null'의 Avro 통합으로 표현됩니다.REPEATED
필드는 Avro 배열로 표현됩니다.TIMESTAMP
데이터 유형은 기본적으로 추출 작업과 내보내기 데이터 SQL 모두에서timestamp-micros
논리 유형(AvroLONG
유형 주석 처리)으로 표시됩니다. (주의:Export Data Options
에use_avro_logical_types=False
를 추가하여 논리 유형을 사용 중지하여 타임스탬프 열 대신string
유형을 사용하도록 할 수 있지만 추출 작업에서는 항상 Avro 논리 유형을 사용합니다.)DATE
데이터 유형은 데이터 내보내기 SQL에서 기본적으로date
논리 유형(AvroINT
유형 주석 처리)으로 표시되지만 추출 작업에서는 기본적으로string
유형으로 표시됩니다. (참고:Export Data Options
에use_avro_logical_types=False
를 추가하여 논리 유형을 사용 중지하거나--use_avro_logical_types=True
플래그를 사용하여 추출 작업에서 논리 유형을 사용 설정할 수 있습니다.)TIME
데이터 유형은 데이터 내보내기 SQL에서 기본적으로timestamp-micro
논리 유형(AvroLONG
유형 주석 처리)으로 표시되지만 추출 작업에서는 기본적으로string
유형으로 표시됩니다. (참고:Export Data Options
에use_avro_logical_types=False
를 추가하여 논리 유형을 사용 중지하거나--use_avro_logical_types=True
플래그를 사용하여 추출 작업에서 논리 유형을 사용 설정할 수 있습니다.)DATETIME
데이터 유형은 데이터 내보내기 SQL에서 기본적으로 AvroSTRING
유형(논리 유형이 커스텀으로 명명된datetime
인 문자열 유형)으로 표시되지만 추출 작업에서는 기본적으로string
로 표시됩니다. (참고:Export Data Options
에use_avro_logical_types=False
를 추가하여 논리 유형을 사용 중지하거나--use_avro_logical_types=True
플래그를 사용하여 추출 작업에서 논리 유형을 사용 설정할 수 있습니다.)- Avro 내보내기에서는 범위 유형이 지원되지 않습니다.
매개변수화된 NUMERIC(P[, S])
및 BIGNUMERIC(P[, S])
데이터 유형은 정밀도 및 확장 유형 매개변수를 Avro 10진수 논리 유형으로 전송합니다.
Avro 형식은 GZIP 압축에 사용될 수 없습니다. Avro 데이터를 압축하려면 bq 명령줄 도구 또는 API를 사용하고 Avro 데이터에 대해 지원되는 압축 유형(DEFLATE
또는 SNAPPY
) 중 하나를 지정하세요.
Parquet 내보내기 세부정보
BigQuery는 GoogleSQL 데이터 유형을 다음과 같은 Parquet 데이터 유형으로 변환합니다.
BigQuery 데이터 유형 | Parquet 기본 유형 | Parquet 논리 유형 |
---|---|---|
정수 | INT64 |
NONE |
숫자 | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 38, scale = 9) |
숫자(P[, S)] | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
BigNumeric | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 76, scale = 38) |
BigNumeric(P[, S]) | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
부동 소수점 | FLOAT |
NONE |
불리언 | BOOLEAN |
NONE |
문자열 | BYTE_ARRAY |
STRING (UTF8) |
바이트 | BYTE_ARRAY |
NONE |
날짜 | INT32 |
DATE |
날짜/시간 | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
시간 | INT64 |
TIME (isAdjustedToUTC = true, unit = MICROS) |
타임스탬프 | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
지역 | BYTE_ARRAY |
GEOGRAPHY (edges = spherical) |
Parquet 스키마는 중첩된 데이터를 그룹으로 나타내고 반복 레코드를 반복 그룹으로 나타냅니다. BigQuery에서 중첩 및 반복 데이터 사용에 대한 자세한 내용은 중첩 및 반복 열 지정을 참조하세요.
DATETIME
유형에 대해 다음 해결 방법을 사용할 수 있습니다.
- 파일을 스테이징 테이블에 로드합니다. 그런 다음 SQL 쿼리를 사용하여 필드를
DATETIME
으로 변환하고 결과를 새 테이블에 저장합니다. 자세한 내용은 열의 데이터 유형 변경을 참조하세요. - 로드 작업에서
--schema
플래그를 사용하여 테이블의 스키마를 제공합니다. 날짜/시간 열을col:DATETIME
으로 정의합니다.
GEOGRAPHY
논리적 유형은 내보낸 파일에 추가된 GeoParquet 메타데이터로 표시됩니다.
데이터를 하나 이상의 파일로 내보내기
destinationUris
속성은 BigQuery가 파일을 내보내는 하나 이상의 위치 및 파일 이름을 나타냅니다.
BigQuery는 각 URI에서 와일드 카드 연산자 하나(*)를 지원합니다. 와일드 카드는 버킷 이름의 일부인 경우를 제외하고 URI의 아무 곳에나 나타날 수 있습니다. 와일드 카드 연산자를 사용하면 BigQuery에 제공된 패턴을 기반으로 분할된 파일을 여러 개 만들도록 지시합니다. 와일드 카드 연산자는 숫자(0에서 시작)로 대체되고 왼쪽으로 12자리까지 채워집니다. 예를 들어 파일 이름 끝에 와일드 카드가 있는 URI는 첫 번째 파일에 000000000000
을 추가하고 두 번째 파일에 000000000001
을 추가하는 식으로 파일을 만듭니다.
다음 테이블에서는 destinationUris
속성에 사용 가능한 몇 가지 옵션을 설명합니다.
destinationUris 옵션 |
|
---|---|
단일 URI |
1GB 이하인 테이블 데이터를 내보내는 경우 단일 URI를 사용합니다. 내보낸 데이터는 일반적으로 최댓값인 1GB보다 작기 때문에 이 옵션은 가장 일반적인 사용 사례입니다. 속성 정의:
생성: gs://my-bucket/file-name.json |
단일 와일드 카드 URI |
내보내는 데이터가 최댓값인 1GB보다 크다고 생각되면 단일 와일드 카드 URI를 사용합니다. BigQuery는 제공된 패턴을 기반으로 데이터를 여러 파일로 샤딩합니다. 내보낸 파일 크기는 다양합니다. 파일 이름이 아닌 URI 구성요소에 와일드 카드를 사용하는 경우 데이터를 내보내기 전에 경로 구성요소가 존재하지 않는지 확인하세요. 속성 정의:
생성: gs://my-bucket/file-name-000000000000.json gs://my-bucket/file-name-000000000001.json gs://my-bucket/file-name-000000000002.json ... |
내보내는 파일 크기 제한
내보내기 한 번으로 1GB를 초과하는 데이터를 내보낼 때는 와일드 카드를 사용하여 데이터를 여러 파일로 내보내야 하며, 파일 크기는 다양합니다. 내보낸 각 파일의 최대 크기를 제한해야 하는 경우, 데이터를 무작위로 파티션을 나눈 후 각 파티션을 파일로 내보내는 방법이 있습니다.
- 필요한 총 파티션 수를 결정합니다. 이는 총 데이터 크기를 선택한 내보낸 파일 크기로 나눈 값입니다. 예를 들어 8,000MB의 데이터가 있고 내보낸 각 파일이 약 20MB가 되도록 하려면 400개의 파티션이 필요합니다.
무작위로 생성된 새로운 열인
export_id
로 파티션을 나누고 클러스터링한 새 테이블을 만듭니다. 다음 예시에서는 선택한 파일 크기를 달성하기 위해n
파티션이 필요한source_table
이라는 기존 테이블에서 새processed_table
을 만드는 방법을 보여줍니다.CREATE TABLE my_dataset.processed_table PARTITION BY RANGE_BUCKET(export_id, GENERATE_ARRAY(0, n, 1)) CLUSTER BY export_id AS ( SELECT *, CAST(FLOOR(n*RAND()) AS INT64) AS export_id FROM my_dataset.source_table );
0에서
n-1
사이의 각 정수i
에 대해 다음 쿼리에서EXPORT DATA
문을 실행합니다.SELECT * EXCEPT(export_id) FROM my_dataset.processed_table WHERE export_id = i;
압축된 테이블 추출
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Java
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
테이블 메타데이터 내보내기
BigLake 관리형 테이블에서 테이블 메타데이터를 내보내려면 다음 SQL 문을 사용합니다.
EXPORT TABLE METADATA FROM `[[PROJECT_NAME.]DATASET_NAME.]TABLE_NAME`;
다음을 바꿉니다.
- PROJECT_NAME: 테이블의 프로젝트 이름입니다. 값은 기본적으로 이 쿼리를 실행하는 프로젝트로 지정됩니다.
- DATASET_NAME: 테이블의 데이터 세트 이름입니다.
- TABLE_NAME: 테이블의 이름입니다.
내보낸 메타데이터는 STORAGE_URI/metadata
폴더에 저장되며, 여기서 STORAGE_URI는 옵션에 설정된 테이블의 스토리지 위치입니다.
사용 사례
이 예에서는 Cloud Storage로 데이터를 내보내는 방법을 보여줍니다.
엔드포인트 로그에서 Cloud Storage로 데이터를 지속적으로 스트리밍한다고 가정해 보겠습니다. 백업 및 보관처리 목적으로 일일 스냅샷을 Cloud Storage로 내보냅니다. 가장 좋은 방법은 특정 할당량 및 제한사항이 적용되는 추출 작업입니다.
API 또는 클라이언트 라이브러리로 추출 작업을 제출하여 고유 ID를 jobReference.jobId
로 전달합니다. 추출 작업은 비동기식입니다.
작업을 만드는 데 사용된 고유한 작업 ID를 사용하여 작업 상태를 확인합니다. status.status
가 DONE
이면 작업이 성공적으로 완료된 것입니다. status.errorResult
가 있으면 작업이 실패하며 다시 시도해야 합니다.
일괄 데이터 처리
야간 일괄 작업이 고정된 기한까지 데이터를 로드하는 데 사용된다고 가정해 보겠습니다. 이 로드 작업이 완료되면 이전 섹션의 설명대로 통계가 있는 테이블이 쿼리에서 구체화됩니다. 이 테이블의 데이터를 검색 후 PDF 보고서로 컴파일하여 규제 기관에 전송합니다.
읽어야 하는 데이터 양이 적으므로 tabledata.list
API를 사용하여 JSON 사전 형식으로 테이블의 모든 행을 검색합니다. 1페이지를 초과하는 데이터가 있으면 결과에 pageToken
속성이 설정됩니다. 결과의 다음 페이지를 검색하려면 다른 tabledata.list
를 호출하고 토큰 값을 pageToken
파라미터로 포함합니다. API 호출이 5xx 오류로 실패하면 지수 백오프로 다시 시도합니다. 대부분의 4xx 오류는 다시 시도할 수 없습니다. BigQuery 내보내기와 보고서 생성을 더욱 효과적으로 분리하려면 결과를 디스크에 유지해야 합니다.
할당량 정책
내보내기 작업 할당량에 대한 자세한 내용은 할당량 및 한도 페이지의 내보내기 작업을 참조하세요.
내보내기 작업의 사용량은 INFORMATION_SCHEMA
에서 확인할 수 있습니다.
내보내기 작업의 JOBS_BY_*
시스템 테이블에 있는 작업 항목에는 일일 50TB 미만으로 유지되도록 집계 사용량을 모니터링하는 데 사용할 수 있는 total_processed_bytes
값이 포함됩니다. INFORMATION_SCHEMA.JOBS
뷰를 쿼리하여 total_processed_bytes
값을 가져오는 방법을 알아보려면 INFORMATION_SCHEMA.JOBS
스키마를 참고하세요.
현재 할당량 사용량 보기
INFORMATION_SCHEMA
쿼리를 실행하여 지정된 기간 동안 실행된 작업에 대한 메타데이터를 확인하여 쿼리, 로드, 추출, 복사 작업의 현재 사용량을 볼 수 있습니다. 현재 사용량을 할당량 한도와 비교하여 특정 유형 작업의 할당량 사용량을 결정할 수 있습니다. 다음 예시 쿼리는 INFORMATION_SCHEMA.JOBS
뷰를 사용하여 프로젝트별로 쿼리, 로드, 추출, 복사 작업 수를 나열합니다.
SELECT sum(case when job_type="QUERY" then 1 else 0 end) as QRY_CNT, sum(case when job_type="LOAD" then 1 else 0 end) as LOAD_CNT, sum(case when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT, sum(case when job_type="COPY" then 1 else 0 end) as CPY_CNT FROM `region-eu`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE date(creation_time)= CURRENT_DATE()
내보낸 바이트 수에 대한 알림을 제공하는 Cloud Monitoring 알림 정책을 설정할 수 있습니다.
Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.
탐색창에서 측정항목 탐색기를 선택합니다.
MQL 쿼리 편집기에서 다음 예시와 같이 하루에 내보낸 바이트를 모니터링하도록 알림을 설정합니다.
fetch consumer_quota | filter resource.service == 'bigquery.googleapis.com' | { metric serviceruntime.googleapis.com/quota/rate/net_usage | align delta_gauge(1m) | group_by [resource.project_id, metric.quota_metric, resource.location], sum(value.net_usage) ; metric serviceruntime.googleapis.com/quota/limit | filter metric.limit_name == 'ExtractBytesPerDay' | group_by [resource.project_id, metric.quota_metric, resource.location], sliding(1m), max(val()) } | ratio | every 1m | condition gt(val(), 0.01 '1')
알림을 설정하려면 쿼리 실행을 클릭합니다.
자세한 내용은 MQL을 사용한 알림 정책을 참조하세요.
문제 해결
추출 작업 관련 문제를 진단하려면 로그 탐색기를 사용하여 특정 추출 작업의 로그를 검토하고 발생할 수 있는 오류를 식별하면 됩니다. 다음 로그 탐색기 필터는 추출 작업에 관한 정보를 반환합니다.
resource.type="bigquery_resource"
protoPayload.methodName="jobservice.insert"
(protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.query.query=~"EXPORT" OR
protoPayload.serviceData.jobCompletedEvent.eventName="extract_job_completed" OR
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query=~"EXPORT")
가격 책정
데이터 내보내기 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정 페이지를 참조하세요.
데이터를 내보낸 후 Cloud Storage에 데이터를 저장하면 요금이 청구됩니다. 자세한 내용은 Cloud Storage 가격 책정을 참조하세요.
테이블 보안
BigQuery에서 테이블에 대한 액세스를 제어하려면 테이블 액세스 제어 소개를 참조하세요.
다음 단계
- Google Cloud 콘솔에 대한 자세한 내용은 Google Cloud 콘솔 사용을 참조하세요.
- bq 명령줄 도구에 대한 자세한 내용은 bq 명령줄 도구 사용을 참고하세요.
- BigQuery API 클라이언트 라이브러리를 사용하여 애플리케이션을 만드는 방법은 클라이언트 라이브러리 빠른 시작을 참조하세요.