Datastore 내보내기에서 데이터 로드
BigQuery는 Datastore 관리형 가져오기 및 내보내기 서비스를 사용하여 만든 Datastore 내보내기에서 데이터를 로드하는 기능을 지원합니다. 관리형 가져오기 및 내보내기 서비스를 사용하여 Datastore 항목을 Cloud Storage 버킷으로 내보낼 수 있습니다. 그런 다음 내보내기를 BigQuery에 테이블로 로드할 수 있습니다.
Datastore 내보내기 파일을 만드는 방법은 Datastore 문서에서 항목 내보내기 및 가져오기를 참조하세요. 내보내기 예약에 대한 자세한 내용은 내보내기 예약을 참조하세요.
API에서 projectionFields 속성을 설정하거나 bq 명령줄 도구에서 --projection_fields 플래그를 사용하여 BigQuery에서 로드할 속성을 제어할 수 있습니다.
로드 프로세스를 건너뛰려면 내보내기를 외부 데이터 소스로 설정하여 직접 쿼리합니다. 자세한 내용은 외부 데이터 소스를 참조하세요.
제한사항
Datastore 내보내기에서 BigQuery로 데이터를 로드할 때는 다음 제한사항에 유의하세요.
- Datastore 내보내기 파일을 지정할 때 Cloud Storage URI에 와일드 카드를 사용할 수 없습니다.
- Datastore 내보내기에서 데이터를 로드할 때 Cloud Storage URI를 하나만 지정할 수 있습니다.
- Datastore 내보내기 데이터를 정의된 스키마가 있는 기존 테이블에 추가할 수 없습니다.
- Datastore 내보내기를 올바르게 로드하려면 내보내기 데이터의 항목이 고유한 속성 이름이 10,000개 미만인 일관된 스키마를 공유해야 합니다.
- 항목 필터를 지정하지 않고 내보낸 데이터는 BigQuery에 로드할 수 없습니다. 내보내기 요청의 항목 필터에는 종류 이름이 한 개 이상 포함되어야 합니다.
- Datastore 내보내기의 최대 필드 크기는 64KB입니다. Datastore 내보내기를 로드할 때 64KB보다 큰 필드는 모두 잘립니다.
시작하기 전에
사용자에게 이 문서의 각 작업을 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.
필수 권한
데이터를 BigQuery로 로드하려면 로드 작업을 실행하고 데이터를 BigQuery 테이블과 파티션으로 로드할 수 있는 IAM 권한이 필요합니다. Cloud Storage에서 데이터를 로드할 경우 데이터가 포함된 버킷에 액세스할 수 있는 IAM 권한도 필요합니다.
데이터를 BigQuery로 로드할 수 있는 권한
데이터를 새 BigQuery 테이블이나 파티션으로 로드하거나 기존 테이블 또는 파티션을 추가하거나 덮어쓰려면 다음 IAM 권한이 필요합니다.
bigquery.tables.createbigquery.tables.updateDatabigquery.tables.updatebigquery.jobs.create
다음과 같이 사전 정의된 각 IAM 역할에는 데이터를 BigQuery 테이블이나 파티션에 로드하기 위해 필요한 권한이 포함되어 있습니다.
roles/bigquery.dataEditorroles/bigquery.dataOwnerroles/bigquery.admin(bigquery.jobs.create권한 포함)bigquery.user(bigquery.jobs.create권한 포함)bigquery.jobUser(bigquery.jobs.create권한 포함)
또한 bigquery.datasets.create 권한이 있으면 만들 데이터 세트에서 로드 작업을 사용하여 테이블을 만들고 업데이트할 수 있습니다.
BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.
Cloud Storage에서 데이터를 로드할 수 있는 권한
Cloud Storage 버킷에서 데이터를 로드하는 데 필요한 권한을 얻으려면 관리자에게 버킷의 스토리지 관리자 (roles/storage.admin) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 Cloud Storage 버킷에서 데이터를 로드하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
Cloud Storage 버킷에서 데이터를 로드하려면 다음 권한이 필요합니다.
-
storage.buckets.get -
storage.objects.get -
storage.objects.list (required if you are using a URI wildcard)
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
Datastore 내보내기 서비스 데이터 로드
Datastore 내보내기 메타데이터 파일에서 데이터를 로드하려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
- 왼쪽 창에서 탐색기를 클릭합니다.
- 탐색기 창에서 프로젝트를 펼치고 데이터 세트를 클릭한 후 데이터 세트를 선택합니다.
- 데이터 세트 정보 섹션에서 테이블 만들기를 클릭합니다.
- 테이블 만들기 창에서 다음 세부정보를 지정합니다.
- 소스 섹션의 다음 항목으로 테이블 만들기 목록에서 Google Cloud Storage를 선택합니다.
그런 후 다음 작업을 수행합니다.
- Cloud Storage 버킷에서 파일을 선택하거나 Cloud Storage URI를 입력합니다.
Google Cloud 콘솔에는 URI 여러 개가 포함될 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성, 추가 또는 덮어쓰려는 테이블이 포함된 데이터 세트와 동일한 위치에 있어야 합니다.
Datastore 내보내기 파일의 URI는KIND_NAME.export_metadata또는export[NUM].export_metadata로 끝나야 합니다. 예를 들어default_namespace_kind_Book.export_metadata에서Book은 종류 이름이고default_namespace_kind_Book은 Datastore에서 생성된 파일 이름입니다.
- 파일 형식으로 Cloud Datastore 백업을 선택합니다.
- Cloud Storage 버킷에서 파일을 선택하거나 Cloud Storage URI를 입력합니다.
Google Cloud 콘솔에는 URI 여러 개가 포함될 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성, 추가 또는 덮어쓰려는 테이블이 포함된 데이터 세트와 동일한 위치에 있어야 합니다.
- 대상 섹션에서 다음 세부정보를 지정합니다.
- 데이터 세트에서 테이블을 만들 데이터 세트를 선택합니다.
- 테이블 필드에 만들려는 테이블의 이름을 입력합니다.
- 테이블 유형 필드가 기본 테이블로 설정되어 있는지 확인합니다.
- 스키마 섹션은 그대로 놔둡니다. 스키마는 Datastore 내보내기에 대해 유추됩니다.
- (선택사항) 파티션 및 클러스터 설정을 지정합니다. 자세한 내용은 파티션을 나눈 테이블 만들기 및 클러스터링된 테이블 만들기 및 사용을 참조하세요.
- 고급 옵션을 클릭하고 다음을 수행합니다.
- 쓰기 환경설정에서 비어 있으면 쓰기를 선택한 상태로 둡니다. 이 옵션은 새 테이블을 만들어 데이터를 로드합니다.
- 테이블 스키마에 없는 행의 값을 무시하려면 알 수 없는 값을 선택합니다.
- Cloud Key Management Service 키를 사용하려면 암호화에서 고객 관리 키를 클릭합니다. Google-managed key 설정을 그대로 두면 BigQuery에서 저장 데이터를 암호화합니다. 사용 가능한 옵션에 대한 자세한 내용은 Datastore 옵션을 참조하세요.
- 테이블 만들기를 클릭합니다.
bq
source_format이 DATASTORE_BACKUP으로 설정된 bq load 명령어를 사용합니다.
--location 플래그를 지정하고 값을 사용자 위치로 설정합니다.
bq --location=LOCATION load \
--source_format=FORMAT \
DATASET.TABLE \
PATH_TO_SOURCE
다음을 바꿉니다.
LOCATION: 사용자 위치입니다.--location플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용한다면 플래그 값을asia-northeast1로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.FORMAT:DATASTORE_BACKUP.DATASET: 데이터를 로드할 테이블이 포함된 데이터 세트입니다.TABLE: 데이터를 로드할 대상 테이블입니다. 테이블이 없는 경우에는 만들어집니다.PATH_TO_SOURCE: Cloud Storage URI입니다.
예를 들어 다음 명령어는 Datastore 내보내기 파일 gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata를 book_data라는 테이블로 로드합니다.
mybucket과 mydataset는 US 멀티 리전 위치에서 생성되었습니다.
bq --location=US load \
--source_format=DATASTORE_BACKUP \
mydataset.book_data \
gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
API
API를 사용하여 Datastore 내보내기 데이터를 로드하려면 다음 속성을 설정합니다.
Cloud Storage의 소스 데이터를 가리키는 로드 작업을 만듭니다.
소스 URI는 gs://[BUCKET]/[OBJECT] 형식으로 정규화되어야 합니다. 파일(객체) 이름은
[KIND_NAME].export_metadata로 끝나야 합니다. Datastore 내보내기에는 URI 한 개만 허용되며, 와일드 카드를 사용할 수 없습니다.JobConfigurationLoad.sourceFormat속성을DATASTORE_BACKUP으로 설정하여 데이터 형식을 지정합니다.
Datastore 데이터로 테이블 추가 또는 덮어쓰기
Datastore 내보내기 데이터를 BigQuery로 로드할 때 데이터를 저장할 새 테이블을 만들거나 기존 테이블을 덮어쓸 수 있습니다. Datastore 내보내기 데이터를 기존 테이블에 추가할 수는 없습니다.
Datastore 내보내기 데이터를 기존 테이블에 추가하려고 하면 Cannot append a datastore backup to a table
that already has a schema. Try using the WRITE_TRUNCATE write disposition to
replace the existing table 오류가 발생합니다.
기존 테이블을 Datastore 내보내기 데이터로 덮어쓰려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
- 왼쪽 창에서 탐색기를 클릭합니다.
- 탐색기 창에서 프로젝트를 펼치고 데이터 세트를 클릭한 후 데이터 세트를 선택합니다.
- 데이터 세트 정보 섹션에서 테이블 만들기를 클릭합니다.
- 테이블 만들기 창에서 다음 세부정보를 지정합니다.
- 소스 섹션의 다음 항목으로 테이블 만들기 목록에서 Google Cloud Storage를 선택합니다.
그런 후 다음 작업을 수행합니다.
- Cloud Storage 버킷에서 파일을 선택하거나 Cloud Storage URI를 입력합니다.
Google Cloud 콘솔에는 URI 여러 개가 포함될 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성, 추가 또는 덮어쓰려는 테이블이 포함된 데이터 세트와 동일한 위치에 있어야 합니다.
Datastore 내보내기 파일의 URI는KIND_NAME.export_metadata또는export[NUM].export_metadata로 끝나야 합니다. 예를 들어default_namespace_kind_Book.export_metadata에서Book은 종류 이름이고default_namespace_kind_Book은 Datastore에서 생성된 파일 이름입니다.
- 파일 형식으로 Cloud Datastore 백업을 선택합니다.
- Cloud Storage 버킷에서 파일을 선택하거나 Cloud Storage URI를 입력합니다.
Google Cloud 콘솔에는 URI 여러 개가 포함될 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성, 추가 또는 덮어쓰려는 테이블이 포함된 데이터 세트와 동일한 위치에 있어야 합니다.
- 대상 섹션에서 다음 세부정보를 지정합니다.
- 데이터 세트에서 테이블을 만들 데이터 세트를 선택합니다.
- 테이블 필드에 만들려는 테이블의 이름을 입력합니다.
- 테이블 유형 필드가 기본 테이블로 설정되어 있는지 확인합니다.
- 스키마 섹션은 그대로 놔둡니다. 스키마는 Datastore 내보내기에 대해 유추됩니다.
- 선택사항: 파티션 및 클러스터 설정을 지정합니다. 자세한 내용은 파티션을 나눈 테이블 만들기 및 클러스터링된 테이블 만들기 및 사용을 참조하세요. 추가하거나 덮어쓰는 방법으로 파티션을 나눈 테이블 또는 클러스터링된 테이블로 변환할 수 없습니다. Google Cloud 콘솔은 로드 작업에서 파티션을 나눈 테이블 또는 클러스터링된 테이블 추가 또는 덮어쓰기를 지원하지 않습니다.
- 고급 옵션을 클릭하고 다음을 수행합니다.
- 쓰기 환경설정에서 테이블에 추가 또는 테이블 덮어쓰기를 선택합니다.
- 테이블 스키마에 없는 행의 값을 무시하려면 알 수 없는 값을 선택합니다.
- Cloud Key Management Service 키를 사용하려면 암호화에서 고객 관리 키를 클릭합니다. Google-managed key 설정을 그대로 두면 BigQuery에서 저장 데이터를 암호화합니다. 사용 가능한 옵션에 대한 자세한 내용은 Datastore 옵션을 참조하세요.
- 테이블 만들기를 클릭합니다.
bq
--replace 플래그가 지정되고 source_format이 DATASTORE_BACKUP으로 설정된 bq load 명령어를 사용합니다. --location 플래그를 지정하고 값을 사용자 위치로 설정합니다.
bq --location=LOCATION load \
--source_format=FORMAT \
--replace \
DATASET.TABLE \
PATH_TO_SOURCE
다음을 바꿉니다.
LOCATION: 사용자 위치입니다.--location플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용한다면 플래그 값을asia-northeast1로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.FORMAT:DATASTORE_BACKUP.DATASET: 데이터를 로드할 테이블이 포함된 데이터 세트입니다.TABLE: 덮어쓰려는 테이블입니다.PATH_TO_SOURCE: Cloud Storage URI입니다.
예를 들어 다음 명령어는 Datastore 내보내기 파일 gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata를 로드하여 book_data라는 테이블을 덮어씁니다.
bq load --source_format=DATASTORE_BACKUP \
--replace \
mydataset.book_data \
gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
API
API에서 데이터를 로드하려면 속성을 다음과 같이 설정합니다.
Cloud Storage의 소스 데이터를 가리키는 로드 작업을 만듭니다.
소스 URI는 gs://[BUCKET]/[OBJECT] 형식으로 정규화되어야 합니다. 파일(객체) 이름은
[KIND_NAME].export_metadata로 끝나야 합니다. Datastore 내보내기에는 URI 한 개만 허용되며, 와일드 카드를 사용할 수 없습니다.JobConfigurationLoad.sourceFormat속성을DATASTORE_BACKUP으로 설정하여 데이터 형식을 지정합니다.JobConfigurationLoad.writeDisposition속성을WRITE_TRUNCATE로 설정하여 쓰기 방식을 지정합니다.
Datastore 옵션
BigQuery가 Datastore 내보내기 데이터를 파싱하는 방법을 변경하려면 다음 옵션을 지정합니다.
| Console 옵션 | bq 도구 플래그 | BigQuery API 속성 | 설명 |
|---|---|---|---|
| 사용 불가 | --projection_fields |
projectionFields | Datastore 내보내기에서 BigQuery로 로드할 항목 속성을 나타내는 쉼표로 구분된 목록입니다. 속성 이름은 대소문자를 구분하며 최상위 수준 속성이어야 합니다. 속성을 지정하지 않으면 BigQuery가 모든 속성을 로드합니다. Datastore 내보내기에서 지정된 속성을 찾을 수 없으면 작업 결과에 잘못된 오류가 반환됩니다. 기본값은 ''입니다. |
데이터 유형 변환
BigQuery는 Datastore 내보내기 파일에 있는 각 항목의 데이터를 BigQuery 데이터 유형으로 변환합니다. 다음 표에서는 데이터 유형 간의 변환을 설명합니다.
| Datastore 데이터 유형 | BigQuery 데이터 유형 |
|---|---|
| 배열 | ARRAY |
| Blob | BYTES |
| 불리언 | BOOLEAN |
| 날짜 및 시간 | TIMESTAMP |
| 내장 항목 | RECORD |
| 부동 소수점 수 | FLOAT |
| 지리적 지점 |
[{"lat","DOUBLE"},
{"long","DOUBLE"}]
|
| 정수 | INTEGER |
| 키 | RECORD |
| Null | STRING |
| 텍스트 문자열 | STRING(64KB로 자름) |
Datastore 키 속성
Datastore의 각 항목에는 네임스페이스, 경로와 같은 정보가 포함된 고유한 키가 있습니다. BigQuery는 다음 표와 같이 각 정보의 중첩된 필드와 함께 키의 RECORD 데이터 유형을 만듭니다.
| 키 속성 | 설명 | BigQuery 데이터 유형 |
|---|---|---|
__key__.app |
Datastore 앱 이름입니다. | STRING |
__key__.id |
항목의 ID이거나 __key__.name이 설정된 경우에는 null입니다. |
정수 |
__key__.kind |
항목의 종류입니다. | STRING |
__key__.name |
항목의 이름이거나 __key__.id가 설정된 경우에는 null입니다. |
STRING |
__key__.namespace |
Datastore 앱에서 커스텀 네임스페이스를 사용하는 경우 항목의 네임스페이스입니다. 그렇지 않으면 기본 네임스페이스가 빈 문자열로 표시됩니다. | STRING |
__key__.path |
평면화된 항목의 상위 경로이며, 루트 항목에서 항목 자체까지의 일련의 종류 식별자 쌍으로 구성됩니다. 예를 들면 "Country", "USA", "PostalCode",
10011, "Route", 1234입니다. |
STRING |