이 문서에서는 BigQuery 구독을 만드는 방법을 설명합니다. Google Cloud 콘솔, Google Cloud CLI, 클라이언트 라이브러리, Pub/Sub API를 사용하여 BigQuery 구독을 만들 수 있습니다.
시작하기 전에
이 문서를 읽기 전 다음 내용을 숙지해야 합니다.
구독 활용 방법
BigQuery 구독의 워크플로입니다.
메시지 오류 처리를 위해 데드 레터 주제를 구성하는 방법
Pub/Sub 및 BigQuery에 대한 기본 지식 외에도 BigQuery 구독을 만들기 전에 다음 기본 요건을 충족해야 합니다.
BigQuery 테이블이 있어야 합니다. 또는 이 문서의 뒷부분에 설명된 대로 BigQuery 구독을 만들 때 만들어도 됩니다.
Pub/Sub 주제의 스키마와 BigQuery 테이블 간 호환성이 있어야 합니다. 호환되지 않는 BigQuery 테이블을 추가하면 호환성 관련 오류 메시지가 표시됩니다. 자세한 내용은 스키마 호환성을 참조하세요.
필수 역할 및 권한
다음은 역할 및 권한과 관련된 가이드라인 목록입니다.
구독을 만들려면 프로젝트 수준에서 액세스 제어를 구성해야 합니다.
또한 이 섹션의 뒷부분에서 설명하는 것처럼 구독과 주제가 다른 프로젝트에 있는 경우 리소스 수준 권한도 필요합니다.
BigQuery 구독을 만들려면 Pub/Sub 서비스 계정에 특정 BigQuery 테이블에 쓰기 권한이 있어야 합니다. 이러한 권한을 부여하는 방법에 대한 자세한 내용은 이 문서의 다음 섹션을 참조하세요.
프로젝트에 BigQuery 구독을 구성하여 다른 프로젝트의 BigQuery 테이블에 쓸 수 있습니다.
BigQuery 구독을 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Pub/Sub 편집자(roles/pubsub.editor
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
이 사전 정의된 역할에는 BigQuery 구독을 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
BigQuery 구독을 만들려면 다음 권한이 필요합니다.
-
구독에서 가져오기:
pubsub.subscriptions.consume
- 구독 만들기:
pubsub.subscriptions.create
- 구독 삭제:
pubsub.subscriptions.delete
- 구독 가져오기:
pubsub.subscriptions.get
-
구독 나열:
pubsub.subscriptions.list
- 구독 업데이트:
pubsub.subscriptions.update
-
주제에 구독 연결:
pubsub.topics.attachSubscription
- 구독의 IAM 정책 가져오기:
pubsub.subscriptions.getIamPolicy
- 구독의 IAM 정책 구성:
pubsub.subscriptions.setIamPolicy
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
한 프로젝트에서 다른 프로젝트의 주제와 연결된 BigQuery 구독을 만들어야 하는 경우 주제 관리자에게 주제에 대한 Pub/Sub 편집자 (roles/pubsub.editor)
IAM 역할도 부여해 달라고 요청하세요.
Pub/Sub 서비스 계정에 BigQuery 역할 할당
일부 Google Cloud 서비스에는 서비스가 리소스에 액세스하도록 허용하는 Google 관리형 서비스 계정이 있습니다. 이러한 서비스 계정을 서비스 에이전트라고도 합니다. Pub/Sub은 service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com
형식으로 각 프로젝트에 대해 서비스 계정을 만들고 유지합니다.
BigQuery 구독을 만들려면 Pub/Sub 서비스 계정에 특정 BigQuery 테이블에 쓰기 권한과 테이블 메타데이터 읽기 권한이 있어야 합니다.
Pub/Sub 서비스 계정에 BigQuery 데이터 편집자(roles/bigquery.dataEditor
) 역할을 부여합니다.
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
액세스 권한 부여를 클릭합니다.
주 구성원 추가 섹션에 Pub/Sub 서비스 계정의 이름을 입력합니다. 서비스 계정 형식은
service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com
입니다. 예를 들어project-number=112233445566
인 프로젝트의 경우 서비스 계정은service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com
형식입니다.역할 할당 섹션에서 다른 역할 추가를 클릭합니다.
역할 선택 드롭다운에서
BigQuery
를 입력하고 BigQuery 데이터 편집자 역할을 선택합니다.저장을 클릭합니다.
BigQuery IAM에 대한 자세한 내용은 BigQuery 역할 및 권한을 참조하세요.
BigQuery 구독 속성
BigQuery 구독을 구성할 때 다음 속성을 지정할 수 있습니다.
일반 속성
모든 구독에 설정할 수 있는 일반 구독 속성에 대해 알아보세요.
주제 스키마 사용
이 옵션을 사용하면 Pub/Sub가 구독이 연결된 Pub/Sub 주제의 스키마를 사용할 수 있습니다. 또한 Pub/Sub가 BigQuery 테이블에서 해당 열에 메시지의 필드를 기록합니다.
이 옵션을 사용할 때는 다음 추가 요구사항을 확인해야 합니다.
주제 스키마 및 BigQuery 스키마의 필드가 이름이 동일하고 유형이 서로 호환되어야 합니다.
주제 스키마에서 선택적인 필드는 BigQuery 스키마에서도 선택적이어야 합니다.
주제 스키마의 필수 필드는 BigQuery 스키마에서 필수일 필요가 없습니다.
주제 스키마에 없는 BigQuery 필드가 있으면 이러한 BigQuery 필드가
NULLABLE
모드에 있어야 합니다.주제 스키마에 BigQuery 스키마에 없는 추가 필드가 있고 이러한 필드를 생략할 수 있으면 알 수 없는 필드 삭제 옵션을 선택합니다.
구독 속성, 주제 스키마 사용 또는 테이블 스키마 사용 중에서 하나만 선택할 수 있습니다.
주제 스키마 사용 또는 테이블 스키마 사용 옵션을 선택하지 않는 경우에는 BigQuery 테이블에 BYTES
, STRING
또는 JSON
유형의 data
라는 열이 있는지 확인해야 합니다. Pub/Sub는 이 BigQuery 열에 메시지를 기록합니다.
Pub/Sub 주제 스키마 또는 BigQuery 테이블 스키마에 대한 변경사항이 BigQuery 테이블에 기록된 메시지에 즉시 적용되지 않을 수 있습니다. 예를 들어 알 수 없는 필드 삭제 옵션이 사용 설정되었고 필드가 Pub/Sub 스키마에 있지만 BigQuery 스키마에 없는 경우, BigQuery 테이블에 작성된 메시지는 BigQuery 스키마에 추가한 후에도 필드를 포함하지 않을 수 있습니다. 결국 스키마가 동기화되고 후속 메시지에 필드가 포함됩니다.
BigQuery 구독에 주제 스키마 사용 옵션을 사용하면 BigQuery 변경 데이터 캡처(CDC)를 활용할 수도 있습니다. CDC는 기존 행에 변경사항을 처리하고 적용하여 BigQuery 테이블을 업데이트합니다.
이 기능에 대한 자세한 내용은 변경 데이터 캡처로 테이블 업데이트 스트리밍을 참조하세요.
BigQuery 구독에서 이 기능을 사용하는 방법은 BigQuery 변경 데이터 캡처를 참조하세요.
테이블 스키마 사용
이 옵션을 사용하면 Pub/Sub에서 BigQuery 테이블의 스키마를 사용하여 JSON 메시지 필드를 해당 열에 쓸 수 있습니다. 이 옵션을 사용할 때는 다음 추가 요구사항을 확인해야 합니다.
게시된 메시지는 JSON 형식이어야 합니다.
구독 주제에 연결된 스키마가 있는 경우 메시지 인코딩 속성을
JSON
으로 설정해야 합니다.메시지에 없는 BigQuery 필드가 있으면 이러한 BigQuery 필드가
NULLABLE
모드에 있어야 합니다.BigQuery 스키마에 없는 추가 필드가 메시지에 있고 이러한 필드를 삭제할 수 있으면 알 수 없는 필드 삭제 옵션을 선택합니다.
JSON 메시지에서
DATE
,DATETIME
,TIME
,TIMESTAMP
값은 지원되는 표현을 준수하는 정수여야 합니다.JSON 메시지에서
NUMERIC
및BIGNUMERIC
값은 BigDecimalByteStringEncoder를 사용하여 인코딩된 바이트여야 합니다.구독 속성, 주제 스키마 사용 또는 테이블 스키마 사용 중에서 하나만 선택할 수 있습니다.
주제 스키마 사용 또는 테이블 스키마 사용 옵션을 선택하지 않는 경우에는 BigQuery 테이블에 BYTES
, STRING
또는 JSON
유형의 data
라는 열이 있는지 확인해야 합니다. Pub/Sub는 이 BigQuery 열에 메시지를 기록합니다.
BigQuery 테이블에 기록된 메시지와 함께 BigQuery 테이블 스키마 변경사항이 즉시 적용되지 않을 수도 있습니다. 예를 들어 알 수 없는 필드 삭제 옵션이 사용 설정되어 있고 필드가 메시지에 있지만 BigQuery 스키마에 없는 경우 필드를 BigQuery 스키마에 추가한 후에도 BigQuery 테이블에 기록된 메시지에는 여전히 필드가 포함되지 않을 수 있습니다. 결국 스키마가 동기화되고 후속 메시지에 필드가 포함됩니다.
BigQuery 구독에 테이블 스키마 사용 옵션을 사용하면 BigQuery 변경 데이터 캡처(CDC)를 활용할 수도 있습니다. CDC는 기존 행에 변경사항을 처리하고 적용하여 BigQuery 테이블을 업데이트합니다.
이 기능에 대한 자세한 내용은 변경 데이터 캡처로 테이블 업데이트 스트리밍을 참조하세요.
BigQuery 구독에서 이 기능을 사용하는 방법을 알아보려면 BigQuery 변경 데이터 캡처를 참조하세요.
알 수 없는 필드 삭제
이 옵션은 주제 스키마 사용 또는 테이블 스키마 사용 옵션과 함께 사용됩니다. 이 옵션을 사용하면 Pub/Sub에서 주제 스키마나 메시지에 있지만 BigQuery 스키마에 없는 필드를 삭제할 수 있습니다. 알 수 없는 필드 삭제를 설정하지 않으면 추가 필드가 있는 메시지가 BigQuery에 기록되지 않고 구독 백로그에 남게 됩니다. 구독이 결국 오류 상태가 됩니다.
메타데이터 쓰기
이 옵션을 사용하면 Pub/Sub가 각 메시지의 메타데이터를 BigQuery 테이블의 추가 열에 작성할 수 있습니다. 그렇지 않으면 메타데이터가 BigQuery 테이블에 작성되지 않습니다.
메타데이터 쓰기 옵션을 선택할 경우 BigQuery 테이블에 다음 테이블에 설명된 필드가 있는지 확인합니다.
메타데이터 쓰기 옵션을 선택하지 않으면 use_topic_schema
가 true가 아닌 한 대상 BigQuery 테이블에 data
필드만 필요합니다. 메타데이터 쓰기 및 주제 스키마 사용 옵션을 모두 선택할 경우 주제 스키마에 메타데이터 매개변수와 일치하지 않는 이름의 필드가 포함되지 않아야 합니다.
이러한 제한사항에는 이러한 스네이크 표기법 매개변수의 카멜 표기법 버전이 포함됩니다.
매개변수 | |
---|---|
subscription_name |
STRING 구독 이름입니다. |
message_id |
STRING 메시지 ID |
publish_time |
타임스탬프 메시지를 게시하는 시간입니다. |
data |
BYTES, STRING 또는 JSON 메시지 본문입니다. 주제 스키마 사용 또는 테이블 스키마 사용을 선택하지 않은 모든 대상 BigQuery 테이블에는 |
attributes |
STRING 또는 JSON 모든 메시지 속성을 포함하는 JSON 객체입니다. 또한 순서 키(있는 경우)를 포함하여 Pub/Sub 메시지에 속하는 추가 필드를 포함합니다. |
BigQuery 구독 만들기
다음 샘플은 BigQuery 전송을 사용하여 구독을 만드는 방법을 보여줍니다.
콘솔
- Google Cloud 콘솔에서 구독 페이지로 이동합니다.
- 구독 만들기를 클릭합니다.
- 구독 ID 필드에 이름을 입력합니다.
구독 이름 지정 방법은 주제 또는 구독 이름 지정 안내를 참조하세요.
- 드롭다운 메뉴에서 하나의 주제를 선택하거나 만듭니다. 구독은 주제에서 메시지를 수신합니다.
- 전송 유형을 BigQuery에 쓰기로 선택합니다.
- BigQuery 테이블의 프로젝트를 선택합니다.
- 기존 데이터 세트를 선택하거나 새 항목을 만듭니다.
데이터 세트를 만드는 방법은 데이터 세트 만들기를 참조하세요.
- 기존 테이블을 선택하거나 새 항목을 만듭니다.
테이블을 만드는 방법은 테이블 만들기를 참조하세요.
- 메시지 오류를 처리하려면 데드 레터 처리를 사용 설정하는 것이 좋습니다.
자세한 내용은 데드 레터 주제를 참조하세요.
- 만들기를 클릭합니다.
주제 페이지에서도 구독을 만들 수 있습니다. 이 단축키는 주제를 구독과 연결하는 데 유용합니다.
- Google Cloud 콘솔에서 주제 페이지로 이동합니다.
- 구독을 만들려는 주제 옆에서 more_vert를 클릭합니다.
- 컨텍스트 메뉴에서 구독 만들기를 선택합니다.
- 전송 유형을 BigQuery에 쓰기로 선택합니다.
- BigQuery 테이블의 프로젝트를 선택합니다.
- 기존 데이터 세트를 선택하거나 새 항목을 만듭니다.
데이터 세트를 만드는 방법은 데이터 세트 만들기를 참조하세요.
- 기존 테이블을 선택하거나 새 항목을 만듭니다.
데이터 세트를 만드는 방법은 테이블 만들기를 참조하세요.
- 메시지 오류를 처리하려면 데드 레터 처리를 사용 설정하는 것이 좋습니다.
자세한 내용은 데드 레터 주제를 참조하세요.
- 만들기를 클릭합니다.
gcloud
-
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.
-
Pub/Sub 구독을 만들려면
gcloud pubsub subscriptions create
명령어를 사용합니다.gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --bigquery-table=PROJECT_ID:DATASET_ID.TABLE_ID
다음을 바꿉니다.
- SUBSCRIPTION_ID: 구독 ID를 지정합니다.
- TOPIC_ID: 주제 ID를 지정합니다. 이 주제에는 스키마가 필요합니다.
- PROJECT_ID: 프로젝트의 ID를 지정합니다.
- DATASET_ID: 기존 데이터 세트의 ID를 지정합니다. 데이터 세트를 만들려면 데이터 세트 만들기를 참조하세요.
- TABLE_ID: 기존 테이블의 ID를 지정합니다. 주제에 스키마가 없으면 테이블에 data 필드가 필요합니다. 테이블을 만들려면 스키마 정의가 있는 빈 테이블 만들기를 참조하세요.
C++
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 C++ 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C++ API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
C#
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Go
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Java
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
Node.js
PHP
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Pub/Sub PHP API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Ruby
이 샘플을 사용해 보기 전에 Pub/Sub 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 확인하세요.
Pub/Sub에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
다음 단계
gcloud
명령어로 구독을 만들거나 수정합니다.- REST API로 구독을 만들거나 수정하기
- BigQuery 구독 문제 해결하기