AWS Glue 제휴 데이터 세트 만들기
이 문서에서는 AWS Glue의 기존 데이터베이스에 연결된 BigQuery에서 제휴 데이터 세트를 만드는 방법을 설명합니다.
제휴 데이터 세트는 데이터 세트 수준에서 BigQuery와 외부 데이터 소스 간의 연결입니다. 제휴 데이터 세트의 테이블은 해당하는 외부 데이터 소스의 테이블에서 자동으로 채워집니다. 이러한 테이블을 BigQuery에서 직접 쿼리할 수 있지만 수정, 추가, 삭제할 수는 없습니다. 하지만 외부 데이터 소스에서 수행하는 모든 업데이트는 BigQuery에 자동으로 반영됩니다.
시작하기 전에
AWS Glue 데이터에 액세스할 수 있는 연결이 있는지 확인합니다.
연결을 만들거나 수정하려면 Amazon S3에 연결의 안내를 따르세요. 해당 연결을 만들 때 BigQuery용 AWS Identity and Access Management 정책에서 AWS Glue에 다음 정책 문을 포함합니다. AWS Glue 테이블의 데이터가 저장되는 Amazon S3 버킷에 대한 다른 권한 외에도 이 문을 포함합니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:GetTables", "glue:GetPartitions" ], "Resource": [ "arn:aws:glue:REGION:ACCOUNT_ID:catalog", "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME", "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*" ] }
다음을 바꿉니다.
REGION
: AWS 리전(예:us-east-1
).ACCOUNT_ID:
: 12자리 AWS 계정 IDDATABASE_NAME
: AWS Glue 데이터베이스 이름
필수 권한
제휴 데이터 세트를 만드는 데 필요한 권한을 얻으려면 관리자에게 BigQuery 관리자(roles/bigquery.admin
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 제휴 데이터 세트를 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
제휴 데이터 세트를 만들려면 다음 권한이 필요합니다.
-
bigquery.datasets.create
-
bigquery.connections.use
-
bigquery.connections.delegate
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
BigQuery에서 IAM 역할 및 권한에 대한 자세한 내용은 IAM 소개를 참조하세요.
제휴 데이터 세트 만들기
제휴 데이터 세트를 만들려면 다음을 수행합니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지를 엽니다.
탐색기 패널에서 데이터 세트를 만들 프로젝트를 선택합니다.
작업 옵션을 펼치고 데이터 세트 만들기를 클릭합니다.
데이터 세트 만들기 페이지에서 다음을 수행합니다.
- 데이터 세트 ID에 고유한 데이터 세트 이름을 입력합니다.
- 위치 유형에서
aws-us-east-1
과 같은 데이터 세트의 AWS 위치를 선택합니다. 데이터 세트를 만든 후에는 위치를 변경할 수 없습니다. 외부 데이터 세트의 경우 다음을 수행합니다.
- 외부 데이터 세트 링크 옆의 상자를 선택합니다.
- 외부 데이터 세트 유형으로
AWS Glue
를 선택합니다. - 외부 소스에 대해 AWS Glue 데이터베이스의
aws-glue://
와 Amazon 리소스 이름(ARN)을 입력합니다. 예:aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
. - 연결 ID로 AWS 연결을 선택합니다.
다른 기본 설정은 그대로 둡니다.
데이터 세트 만들기를 클릭합니다.
SQL
CREATE EXTERNAL SCHEMA
데이터 정의 언어(DDL) 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
CREATE EXTERNAL SCHEMA DATASET_NAME WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME OPTIONS ( external_source = 'AWS_GLUE_SOURCE', location = 'LOCATION');
다음을 바꿉니다.
DATASET_NAME
: BigQuery의 새 데이터 세트 이름PROJECT_ID
: 프로젝트 IDCONNECTION_LOCATION
: AWS 연결의 위치(예:aws-us-east-1
)CONNECTION_NAME
: AWS 연결의 이름AWS_GLUE_SOURCE
: 소스를 식별하는 프리픽스가 있는 AWS Glue 데이터베이스의 Amazon Resource Name(ARN)(예:aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
)LOCATION
: BigQuery의 새 데이터 세트의 위치(예:aws-us-east-1
). 데이터 세트를 만든 후에는 위치를 변경할 수 없습니다.
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
명령줄 환경에서 bq mk
명령어를 사용하여 데이터 세트를 만듭니다.
bq --location=LOCATION mk --dataset \ --external_source aws-glue://AWS_GLUE_SOURCE \ --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \ DATASET_NAME
다음을 바꿉니다.
LOCATION
: BigQuery에서 새 데이터 세트의 위치입니다(예:aws-us-east-1
). 데이터 세트를 만든 후에는 위치를 변경할 수 없습니다..bigqueryrc
파일을 사용하여 기본 위치 값을 설정할 수 있습니다.AWS_GLUE_SOURCE
: AWS Glue 데이터베이스의 Amazon Resource Name(ARN)입니다(예:arn:aws:glue:us-east-1:123456789:database/test_database
).PROJECT_ID
: BigQuery 프로젝트 ID입니다.CONNECTION_LOCATION
: AWS 연결의 위치입니다(예:aws-us-east-1
).CONNECTION_NAME
: AWS 연결의 이름입니다.DATASET_NAME
: BigQuery의 새 데이터 세트 이름입니다. 기본 프로젝트가 아닌 다른 프로젝트에서 데이터 세트를 만들려면 해당 프로젝트 ID를 다음 형식으로 데이터 세트 이름에 추가하세요.PROJECT_ID
:DATASET_NAME
.
Terraform
google_bigquery_dataset
리소스를 사용합니다.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 예시에서는 AWS Glue 제휴 데이터 세트를 만듭니다.
resource "google_bigquery_dataset" "dataset" { provider = google-beta dataset_id = "example_dataset" friendly_name = "test" description = "This is a test description." location = "aws-us-east-1" external_dataset_reference { external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database" connection = "projects/project/locations/aws-us-east-1/connections/connection" } }
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
AWS Glue 데이터베이스용으로 데이터 세트 리소스 및 externalDatasetReference
필드가 정의된 datasets.insert
메서드를 호출합니다.
제휴 데이터 세트의 테이블 나열
제휴 데이터 세트에서 쿼리에 사용할 수 있는 테이블을 나열하려면 데이터 세트 나열을 참조하세요.
테이블 정보 가져오기
스키마 세부정보와 같은 제휴 데이터 세트의 테이블에 대한 정보를 가져오려면 테이블 정보 가져오기를 참조하세요.
테이블에 대한 액세스 제어
제휴 데이터 세트의 테이블에 대한 액세스를 관리하려면 IAM으로 리소스 액세스 제어를 참조하세요.
AWS Glue 데이터 쿼리
제휴 데이터 세트의 테이블 쿼리는 다른 BigQuery 데이터 세트의 테이블을 쿼리하는 것과 동일합니다.
다음 형식으로 AWS Glue 테이블을 쿼리할 수 있습니다.
- CSV(압축 및 비압축)
- JSON(압축 및 비압축)
- Parquet
- ORC
- Avro
- Iceberg
테이블 매핑 세부정보
AWS Glue 데이터베이스에서 액세스 권한을 부여하는 모든 테이블은 BigQuery 데이터 세트에서 동등한 테이블로 표시됩니다.
형식
각 BigQuery 테이블의 형식은 각 AWS Glue 테이블의 다음 필드에 따라 결정됩니다.
InputFormat
(Table.StorageDescriptor.InputFormat
)OutputFormat
(Table.StorageDescriptor.OutputFormat
)SerializationLib
(Table.StorageDescriptor.SerdeInfo.SerializationLibrary
)
유일한 예외는 TableType
(Table.Parameters["table_type"]
) 필드를 사용하는 Iceberg 테이블입니다.
예를 들어 다음 필드가 포함된 AWS Glue 테이블은 BigQuery의 ORC 테이블에 매핑됩니다.
InputFormat
="org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
OutputFormat
="org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
SerializationLib
="org.apache.hadoop.hive.ql.io.orc.OrcSerde"
위치
각 BigQuery 테이블의 위치는 다음과 같은 기준으로 결정됩니다.
- Iceberg 테이블: AWS Glue 테이블의
Table.Parameters["metadata_location"]
필드 - 비Iceberg 파티션을 나누지 않은 테이블: AWS Glue 테이블의
Table.StorageDescriptor.Location
필드 - 비Iceberg 파티션을 나눈 테이블: AWS Glue GetPartitions API
기타 속성
또한 일부 AWS Glue 테이블 속성은 BigQuery의 형식별 옵션에 자동으로 매핑됩니다.
형식 | SerializationLib | AWS Glue 테이블 값 | BigQuery 옵션 |
---|---|---|---|
CSV | LazySimpleSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] | CsvOptions.fieldDelimiter |
CSV | LazySimpleSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | CsvOptions.encoding |
CSV | LazySimpleSerDe | Table.StorageDescriptor.Parameters["skip.header.line.count"] | CsvOptions.skipLeadingRows |
CSV | OpenCsvSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] | CsvOptions.fieldDelimiter |
CSV | OpenCsvSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] | CsvOptions.quote |
CSV | OpenCsvSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | CsvOptions.encoding |
CSV | OpenCsvSerDe | Table.StorageDescriptor.Parameters["skip.header.line.count"] | CsvOptions.skipLeadingRows |
JSON | Hive JsonSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | JsonOptions.encoding |
제휴 데이터 세트에 뷰 만들기
제휴 데이터 세트에서는 뷰를 만들 수 없습니다. 하지만 제휴 데이터 세트의 테이블을 기반으로 하는 표준 데이터 세트에서 뷰를 만들 수 있습니다. 자세한 내용은 뷰 만들기를 참조하세요.
제휴 데이터 세트 삭제
제휴 데이터 세트를 삭제하는 것은 다른 BigQuery 데이터 세트를 삭제하는 것과 동일합니다. 자세한 내용은 데이터 세트 삭제를 참조하세요.
가격 책정
가격 책정에 대한 자세한 내용은 BigQuery Omni 가격 책정을 참조하세요.
제한사항
- 모든 BigQuery Omni 제한사항이 적용됩니다.
- AWS Glue 제휴 데이터 세트의 테이블에서 데이터 또는 메타데이터를 추가, 삭제, 업데이트할 수 없습니다.
- AWS Glue 제휴 데이터 세트에는 새 테이블, 뷰, 구체화된 뷰를 만들 수 없습니다.
INFORMATION_SCHEMA
뷰는 지원되지 않습니다.- 행 수준 보안, 열 수준 보안, 메타데이터 캐싱, 데이터 마스킹은 지원되지 않습니다.
- 테이블을 수동으로 만들 수 없기 때문에 테이블 만들기 기본값과 관련된 데이터 세트 수준 설정은 제휴 데이터 세트에 영향을 주지 않습니다.
- Apache Hive 데이터 유형
UNION
은 Avro 테이블에서 지원되지 않습니다.
다음 단계
- BigQuery Omni 자세히 알아보기
- AWS에서 BigQuery Omni 실습 사용해보기