BigQuery 연결 - AWS Glue

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

BigQuery 연결

AWS Glue for Spark를 사용하여 AWS Glue 4.0 이상 버전에서 Google BigQuery의 테이블에서 읽고 쓸 수 있습니다. Google SQL 쿼리를 사용하여 BigQuery에서 읽을 수 있습니다. AWS Glue 연결을 통해 AWS Secrets Manager에 저장된 보안 인증 정보를 사용하여 BigQuery에 연결합니다.

Google BigQuery에 대한 자세한 내용은 Google Cloud BigQuery 웹사이트를 참조하세요.

BigQuery 연결 구성

AWS Glue에서 Google BigQuery에 연결하려면 AWS Secrets Manager 보안 암호에서 Google Cloud Platform 보안 인증 정보를 생성하고 저장한 다음 해당 보안 암호를 Google BigQuery AWS Glue 연결에 연결해야 합니다.

BigQuery에 대한 연결 구성하기:
  1. Google Cloud Platform에서 관련 리소스를 생성하고 식별합니다.

  2. Google Cloud Platform에서 서비스 계정 보안 인증 정보를 생성하고 내보냅니다.

    BigQuery 보안 인증 마법사를 사용하여 보안 인증 정보 생성하기 단계를 신속하게 처리할 수 있습니다.

    GCP에서 서비스 계정을 생성하려면 서비스 계정 생성하기에서 제공되는 튜토리얼을 따르세요.

    • 프로젝트를 선택할 때 BigQuery 테이블이 포함된 프로젝트를 선택합니다.

    • 서비스 계정의 GCP IAM 역할을 선택할 때 BigQuery 작업을 실행하여 BigQuery 테이블을 읽고, 쓰고, 생성할 수 있는 적절한 권한을 부여하는 역할을 추가하거나 생성하세요.

    서비스 계정의 보안 인증 정보를 생성하려면 서비스 계정 키 생성하기에서 제공되는 튜토리얼을 따르세요.

    • 키 유형을 선택할 때 JSON을 선택합니다.

    이제 서비스 계정의 보안 인증 정보가 포함된 JSON 파일을 다운로드했어야 합니다. 예를 들면 다음과 같아야 합니다.

    { "type": "service_account", "project_id": "*****", "private_key_id": "*****", "private_key": "*****", "client_email": "*****", "client_id": "*****", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "*****", "universe_domain": "googleapis.com" }
  3. base64는 다운로드한 보안 인증 파일을 인코딩합니다. AWS CloudShell 세션 또는 유사한 사항인 경우 명령줄에서 cat credentialsFile.json | base64 -w 0을(를) 실행하여 이 작업을 수행할 수 있습니다. 이 명령의 출력인 credentialString을 유지합니다.

  4. AWS Secrets Manager에서 Google Cloud Platform 보안 인증 정보를 사용하여 보안 암호를 생성합니다. Secrets Manager에서 보안 암호를 생성하려면 AWS Secrets Manager 설명서의 Create an AWS Secrets Manager secret에서 제공하는 자습서를 따릅니다. 보안 암호를 생성한 후에는 다음 단계를 위해 보안 암호 이름, secretName을 유지합니다.

    • 키/값 페어를 선택하면 값 credentialString이 포함된 키 credentials에 대한 페어를 생성합니다.

  5. AWS Glue 데이터 카탈로그에서 AWS Glue 연결 추가의 단계에 따라 연결을 생성합니다. 연결을 생성한 후에는 다음 단계를 위해 연결 이름, connectionName을 유지합니다.

    • 연결 유형을 선택할 때 Google BigQuery를 선택합니다.

    • AWS 보안 암호를 선택할 때 secretName을 입력합니다.

  6. AWS Glue 작업과 연결된 IAM 역할에 secretName을 읽을 수 있는 권한을 부여합니다.

  7. AWS Glue 작업 구성에서 추가 네트워크 연결connectionName을 제공합니다.

BigQuery 테이블에서 읽기

사전 조건:

  • 읽으려는 BigQuery 테이블. 양식 [dataset].[table]에 있는 BigQuery 테이블 및 데이터 세트 이름이 필요합니다. 이 tableName이라고 부르겠습니다.

  • BigQuery 테이블의 청구 프로젝트. 프로젝트 이름인 parentProject가 필요합니다. 결제 상위 프로젝트가 없는 경우 테이블이 포함된 프로젝트를 사용합니다.

  • BigQuery 인증 정보. AWS Glue로 연결 보안 인증 관리하기 단계를 완료하여 인증 정보를 구성합니다. AWS Glue 연결의 이름인 connectionName이 필요합니다.

예:

bigquery_read = glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "sourceType": "table", "table": "tableName", }

DynamicFrame에 반환되는 결과를 필터링하는 쿼리를 제공할 수도 있습니다. query, sourceType, viewsEnabledmaterializationDataset을(를) 구성해야 합니다.

예:

추가 사전 조건:

BigQuery가 쿼리에 대한 구체화된 뷰를 작성할 수 있는 BigQuery 데이터 세트인 materializationDataset를 생서하거나 식별해야 합니다.

materializationDataset에서 테이블을 생성하려면 서비스 계정에 적절한 GCP IAM 권한을 부여해야 합니다.

glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "materializationDataset": materializationDataset, "parentProject": "parentProject", "viewsEnabled": "true", "sourceType": "query", "query": "select * from bqtest.test" } )

BigQuery 테이블에 쓰기

이 예시는 BigQuery 서비스에 직접 작성합니다. BigQuery는 '간접' 쓰기 메서드도 지원합니다. 간접 쓰기 구성에 대한 자세한 내용은 Google BigQuery를 통한 간접 쓰기 사용을(를) 참조하세요.

사전 조건:

  • 쓰려는 BigQuery 테이블. 양식 [dataset].[table]에 있는 BigQuery 테이블 및 데이터 세트 이름이 필요합니다. 자동으로 생성되는 새 테이블 이름을 제공할 수도 있습니다. 이 tableName이라고 부르겠습니다.

  • BigQuery 테이블의 청구 프로젝트. 프로젝트 이름인 parentProject가 필요합니다. 결제 상위 프로젝트가 없는 경우 테이블이 포함된 프로젝트를 사용합니다.

  • BigQuery 인증 정보. AWS Glue로 연결 보안 인증 관리하기 단계를 완료하여 인증 정보를 구성합니다. AWS Glue 연결의 이름인 connectionName이 필요합니다.

예:

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "writeMethod": "direct", "table": "tableName", } )

BigQuery연결 옵션 참조

  • project— 기본값: Google Cloud 서비스 계정 기본값. 읽기 및 쓰기에 사용됩니다. 테이블과 연결된 Google Cloud 프로젝트의 이름.

  • table -- (필수) 읽기 및 쓰기에 사용됩니다. [[project:]dataset.] 형식에 따른 BigQuery 테이블의 이름.

  • datasettable 옵션을 통해 정의되지 않은 경우 필수입니다. 읽기 및 쓰기에 사용됩니다. BigQuery 테이블을 포함하는 데이터 세트의 이름.

  • parentProject— 기본값: Google Cloud 서비스 계정 기본값. 읽기 및 쓰기에 사용됩니다. 청구에 사용되는 project와(과) 연결된 Google Cloud 프로젝트의 이름.

  • sourceType — 읽기에 사용됩니다. 읽을 때 필요합니다. 유효한 값:table, query은(는) 테이블로 읽을 것인지 쿼리로 읽을 것인지 AWS Glue에 알립니다.

  • materializationDataset — 읽기에 사용됩니다. 유효한 값: 문자열. 보기의 구체화를 저장하는 데 사용되는 BigQuery 데이터 세트의 이름.

  • viewsEnabled — 읽기에 사용됩니다. 기본값: false. 유효한 값: 참, 거짓. BigQuery에서 보기를 사용할지 여부를 구성합니다.

  • query — 읽기에 사용됩니다. viewsEnabled이(가) 참일 때 사용됩니다. GoogleSQL DQL 쿼리.

  • temporaryGcsBucket— 쓰기에 사용됩니다. writeMethod이(가) 기본값(indirect)으로 설정된 경우에 필요합니다. BigQuery에 쓰는 동안 중간 형식의 데이터를 저장하는 데 사용되는 Google Cloud Storage 버킷의 이름.

  • writeMethod - 기본값: indirect. 유효한 값: direct, indirect. 쓰기에 사용됩니다. 데이터를 쓰는 데 사용되는 메서드를 지정합니다.

    • direct(으)로 설정하면 커넥터가 BigQuery Storage 쓰기 API를 사용하여 데이터를 작성합니다.

    • indirect(으)로 설정하면 커넥터가 Google Cloud Storage에 쓴 다음 로드 작업을 사용하여 BigQuery로 전송합니다. Google Cloud 서비스 계정에는 적절한 GCS 권한이 필요합니다.

Google BigQuery를 통한 간접 쓰기 사용

이 예시에서는 Google Cloud Storage에 데이터를 쓰고 Google BigQuery에 데이터를 복사하는 간접 쓰기를 사용합니다.

사전 조건:

임시 Google Cloud Storage 버킷인 temporaryBucket이 필요합니다.

AWS Glue GCP 서비스 계정의 GCP IAM 역할에는 temporaryBucket에 액세스하는 적절한 GCS 권한이 필요합니다.

추가 구성:

BigQuery를 사용하여 간접 쓰기 구성하기:
  1. BigQuery 연결 구성을(를) 평가하고, GCP 보안 인증 JSON 파일을 찾거나 다시 다운로드합니다. 작업에 사용되는 Google BigQuery AWS Glue 연결의 AWS Secrets Manager 보안 암호인 secretName을(를) 식별합니다.

  2. 보안 인증 JSON 파일을 적절하게 안전한 Amazon S3 위치에 업로드합니다. 향후 단계를 위해 파일 경로인 s3secretpath를 유지합니다.

  3. secretName을(를) 편집하고 spark.hadoop.google.cloud.auth.service.account.json.keyfile 키를 추가합니다. 값을 s3secretpath에 설정합니다.

  4. AWSGlue 작업 Amazon S3 IAM에 s3secretpath에 액세스할 수 있는 권한을 부여합니다.

이제 쓰기 메서드에 임시 GCS 버킷 위치를 제공할 수 있습니다. indirect은(는) 이전에는 기본값이었기 때문에 writeMethod을(를) 제공하지 않아도 됩니다.

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "temporaryGcsBucket": "temporaryBucket", "table": "tableName", } )