Membuat langganan BigQuery

Dokumen ini menjelaskan cara membuat langganan BigQuery. Anda dapat menggunakan Google Cloud konsol, Google Cloud CLI, library klien, atau Pub/Sub API untuk membuat langganan BigQuery.

Sebelum memulai

Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:

Selain pemahaman Anda tentang Pub/Sub dan BigQuery, pastikan Anda memenuhi prasyarat berikut sebelum membuat langganan BigQuery:

  • Tabel BigQuery ada. Atau, Anda dapat membuatnya saat membuat langganan BigQuery seperti yang dijelaskan di bagian selanjutnya dalam dokumen ini.

  • Kompatibilitas antara skema topik Pub/Sub dan tabel BigQuery. Jika Anda menambahkan tabel BigQuery yang tidak kompatibel, Anda akan mendapatkan pesan error terkait kompatibilitas. Untuk mengetahui informasi selengkapnya, lihat Kompatibilitas skema.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan guna membuat langganan BigQuery, minta administrator untuk memberi Anda peran IAM Pub/Sub Editor (roles/pubsub.editor) di project. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk membuat langganan BigQuery. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat langganan BigQuery:

  • pubsub.subscriptions.create di project
  • pubsub.topics.attachSubscription tentang topik

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Langganan lintas project

Jika membuat langganan di satu project untuk topik di project lain, Anda harus memiliki izin pubsub.subscriptions.create di project tempat Anda membuat langganan, dan izin pubsub.topics.attachSubscription di topik.

Memberikan peran IAM ke akun layanan

Pub/Sub menggunakan akun layanan Identity and Access Management (IAM) untuk mengakses resource. Google Cloud Secara default, akun ini menggunakan agen layanan Pub/Sub (service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com).

Untuk mengizinkan Pub/Sub menulis ke tabel BigQuery, akun layanan memerlukan peran BigQuery Data Editor (roles/bigquery.dataEditor). Anda dapat memberikan izin akun layanan untuk project atau tabel, sebagai berikut:

Project

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka IAM

  2. Pilih Sertakan pemberian peran yang disediakan Google.

  3. Temukan baris untuk akun layanan Cloud Pub/Sub, lalu klik Edit principal.

  4. Klik Add another role, lalu pilih peran BigQuery Data Editor.

Untuk mengetahui informasi selengkapnya, lihat Memberikan peran IAM menggunakan konsol.

Tabel

  1. Di konsol Google Cloud , buka BigQuery Studio.

    Buka BigQuery Studio

  2. Di kotak penelusuran panel Explorer yang diberi label Filter menurut nama dan label, ketik nama tabel, lalu tekan Enter.

  3. Di hasil penelusuran, klik nama tabel yang ingin Anda beri izin.

  4. Di tab Detail, klik Bagikan > Kelola izin.

  5. Klik Add principal, lalu masukkan ID akun layanan, dalam format berikut:

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.

  6. Pada daftar Assign roles, pilih BigQuery Data Editor.

  7. Klik Simpan. Akun utama diberi peran pada resource.

Menggunakan akun layanan khusus

Dengan memberikan peran BigQuery Data Editor ke akun layanan Cloud Pub/Sub, setiap pengguna yang memiliki izin untuk membuat langganan di project Anda dapat menulis ke tabel BigQuery. Jika Anda ingin memberikan izin yang lebih terperinci, konfigurasi akun layanan yang dikelola pengguna.

Izin berikut diperlukan untuk mengonfigurasi akun layanan yang dikelola pengguna agar dapat menulis ke BigQuery:

  • Akun layanan yang dikelola pengguna harus memiliki peran BigQuery Data Editor.

  • Akun layanan Cloud Pub/Sub harus memiliki izin iam.serviceAccounts.getAccessToken di akun layanan yang dikelola pengguna.

  • Pengguna yang membuat langganan harus memiliki izin iam.serviceAccounts.actAs di akun layanan yang dikelola pengguna.

Saat membuat langganan, tentukan akun layanan yang dikelola pengguna sebagai akun layanan langganan.

Properti langganan BigQuery

Langganan BigQuery mendukung semua properti langganan umum. Bagian berikut menjelaskan properti yang khusus untuk langganan BigQuery.

Menggunakan skema topik

Opsi ini memungkinkan Pub/Sub menggunakan skema topik Pub/Sub yang menjadi tujuan langganan. Selain itu, Pub/Sub menulis kolom dalam pesan ke kolom yang sesuai dalam tabel BigQuery.

Saat Anda menggunakan opsi ini, jangan lupa untuk memeriksa persyaratan tambahan berikut:

  • Kolom dalam skema topik dan skema BigQuery harus memiliki nama yang sama dan jenisnya harus kompatibel satu sama lain.

  • Setiap kolom opsional dalam skema topik juga harus bersifat opsional dalam skema BigQuery.

  • Kolom wajib di skema topik tidak harus wajib di skema BigQuery.

  • Jika ada kolom BigQuery yang tidak ada dalam skema topik, kolom BigQuery ini harus dalam mode NULLABLE.

  • Jika skema topik memiliki kolom tambahan yang tidak ada dalam skema BigQuery dan kolom ini dapat dihapus, pilih opsi Hapus kolom tidak dikenal.

  • Anda hanya dapat memilih salah satu properti langganan, Gunakan skema topik atau Gunakan skema tabel.

Jika Anda tidak memilih opsi Gunakan skema topik atau Gunakan skema tabel, pastikan tabel BigQuery memiliki kolom bernama data dengan jenis BYTES, STRING, atau JSON. Pub/Sub menulis pesan ke kolom BigQuery ini.

Anda mungkin tidak melihat perubahan pada skema topik Pub/Sub atau skema tabel BigQuery langsung diterapkan dengan pesan yang ditulis ke tabel BigQuery. Misalnya, jika opsi Hapus kolom tidak dikenal diaktifkan dan kolom ada dalam skema Pub/Sub, tetapi tidak dalam skema BigQuery, pesan yang ditulis ke tabel BigQuery mungkin masih tidak berisi kolom tersebut setelah ditambahkan ke skema BigQuery. Pada akhirnya, skema akan disinkronkan dan pesan berikutnya akan menyertakan kolom tersebut.

Saat menggunakan opsi Gunakan skema topik untuk langganan BigQuery, Anda juga dapat memanfaatkan pengambilan data perubahan (CDC) BigQuery. CDC memperbarui tabel BigQuery Anda dengan memproses dan menerapkan perubahan pada baris yang ada.

Untuk mempelajari fitur ini lebih lanjut, lihat Update tabel streaming dengan pengambilan data perubahan.

Untuk mempelajari cara menggunakan fitur ini dengan langganan BigQuery, lihat Pengambilan data perubahan BigQuery.

Menggunakan skema tabel

Opsi ini memungkinkan Pub/Sub menggunakan skema tabel BigQuery untuk menulis kolom pesan JSON ke kolom yang sesuai. Saat Anda menggunakan opsi ini, jangan lupa untuk memeriksa persyaratan tambahan berikut:

  • Nama setiap kolom dalam tabel BigQuery hanya boleh berisi huruf (a-z, A-Z), angka (0-9), atau garis bawah (_).

  • Pesan yang dipublikasikan harus dalam format JSON.

    Jika kolom tabel BigQuery memiliki jenis data JSON, kolom yang sesuai dalam pesan Pub/Sub Anda harus berupa JSON yang valid dalam string yang di-escape. Misalnya, untuk kolom bernama myData, kolom pesan harus berupa "myData": "{\"key\":\"value\"}". BigQuery menolak pesan yang tidak berisi JSON yang valid.

  • Konversi JSON berikut didukung:

    Jenis JSON Jenis Data BigQuery
    string NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME, atau TIMESTAMP
    number NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME, atau TIMESTAMP
    • Saat menggunakan number untuk DATE, DATETIME, TIME, atau TIMESTAMP konversi, angka harus mematuhi representasi yang didukung.
    • Saat menggunakan konversi number ke NUMERIC atau BIGNUMERIC, presisi dan rentang nilai dibatasi pada nilai yang diterima oleh standar IEEE 754 untuk aritmatika floating point. Jika Anda memerlukan presisi tinggi atau rentang nilai yang lebih luas, gunakan konversi string ke NUMERIC atau BIGNUMERIC.
    • Saat menggunakan konversi string ke NUMERIC atau BIGNUMERIC, Pub/Sub mengasumsikan string adalah angka yang dapat dibaca manusia (misalnya, "123.124"). Jika pemrosesan string sebagai angka yang dapat dibaca manusia gagal, Pub/Sub memperlakukan string sebagai byte yang dienkode dengan BigDecimalByteStringEncoder.
  • Jika topik langganan memiliki skema yang terkait dengannya, maka properti encoding pesan harus disetel ke JSON.

  • Jika ada kolom BigQuery yang tidak ada dalam pesan, kolom BigQuery ini harus dalam mode NULLABLE.

  • Jika pesan memiliki kolom tambahan yang tidak ada dalam skema BigQuery dan kolom ini dapat dihapus, pilih opsi Hapus kolom tidak dikenal.

  • Anda hanya dapat memilih salah satu properti langganan, Gunakan skema topik atau Gunakan skema tabel.

Jika Anda tidak memilih opsi Gunakan skema topik atau Gunakan skema tabel, pastikan tabel BigQuery memiliki kolom bernama data dengan jenis BYTES, STRING, atau JSON. Pub/Sub menulis pesan ke kolom BigQuery ini.

Anda mungkin tidak melihat perubahan pada skema tabel BigQuery langsung berlaku dengan pesan yang ditulis ke tabel BigQuery. Misalnya, jika opsi Hapus kolom yang tidak diketahui diaktifkan dan kolom ada dalam pesan, tetapi tidak ada dalam skema BigQuery, pesan yang ditulis ke tabel BigQuery mungkin masih tidak berisi kolom tersebut setelah ditambahkan ke skema BigQuery. Pada akhirnya, skema akan disinkronkan dan pesan berikutnya akan menyertakan kolom tersebut.

Jika menggunakan opsi Gunakan skema tabel untuk langganan BigQuery, Anda juga dapat memanfaatkan pengambilan data perubahan (CDC) BigQuery. CDC memperbarui tabel BigQuery Anda dengan memproses dan menerapkan perubahan pada baris yang ada.

Untuk mempelajari fitur ini lebih lanjut, lihat Update tabel streaming dengan pengambilan data perubahan.

Untuk mempelajari cara menggunakan fitur ini dengan langganan BigQuery, lihat Pengambilan data perubahan BigQuery.

Menghapus kolom yang tidak diketahui

Opsi ini digunakan dengan opsi Gunakan skema topik atau Gunakan skema tabel. Jika diaktifkan, opsi ini memungkinkan Pub/Sub menghapus kolom apa pun yang ada dalam skema atau pesan topik, tetapi tidak ada dalam skema BigQuery. Kolom yang bukan bagian dari skema BigQuery akan dihapus saat menulis pesan ke tabel BigQuery.

Jika Hapus kolom yang tidak diketahui tidak disetel, pesan dengan kolom tambahan tidak akan ditulis ke BigQuery dan akan tetap berada di backlog langganan kecuali Anda mengonfigurasi topik pesan yang dihentikan pengirimannya.

Setelan Hapus kolom yang tidak diketahui tidak memengaruhi kolom yang tidak ditentukan dalam skema topik Pub/Sub atau skema tabel BigQuery. Dalam hal ini, pesan Pub/Sub yang valid dikirim ke langganan. Namun, karena BigQuery tidak memiliki kolom yang ditentukan untuk kolom tambahan ini, kolom tersebut akan dihilangkan selama proses penulisan BigQuery. Untuk mencegah perilaku ini, pastikan bahwa setiap kolom yang ada dalam pesan Pub/Sub juga ada dalam skema tabel BigQuery.

Perilaku terkait kolom tambahan juga dapat bergantung pada jenis skema tertentu (Avro, Protocol Buffer) dan encoding (JSON, Biner) yang digunakan. Untuk mengetahui informasi tentang pengaruh faktor-faktor ini terhadap penanganan kolom tambahan, lihat dokumentasi untuk jenis dan encoding skema tertentu Anda.

Menulis metadata

Opsi ini memungkinkan Pub/Sub menulis metadata setiap pesan ke kolom tambahan di tabel BigQuery. Jika tidak, metadata tidak ditulis ke tabel BigQuery.

Jika Anda memilih opsi Tulis metadata, pastikan tabel BigQuery memiliki kolom yang dijelaskan dalam tabel berikut.

Jika Anda tidak memilih opsi Tulis metadata, tabel BigQuery tujuan hanya memerlukan kolom data kecuali jika use_topic_schema benar (true). Jika Anda memilih opsi Tulis metadata dan Gunakan skema topik, maka skema topik tidak boleh berisi kolom dengan nama yang cocok dengan nama parameter metadata. Batasan ini mencakup versi camel case dari parameter snake case ini.

Parameter
subscription_name

STRING

Nama langganan.

message_id

STRING

ID pesan

publish_time

TIMESTAMP

Waktu memublikasikan pesan.

data

BYTES, STRING, atau JSON

Isi pesan.

Kolom data diperlukan untuk semua tabel BigQuery tujuan yang tidak memilih Gunakan skema topik atau Gunakan skema tabel. Jika kolom berjenis JSON, maka isi pesan harus berupa JSON yang valid.

attributes

STRING atau JSON

Objek JSON yang berisi semua atribut pesan. Objek ini juga berisi kolom tambahan yang merupakan bagian dari pesan Pub/Sub, termasuk kunci pengurutan, jika ada.

Akun layanan

Anda memiliki opsi berikut untuk menulis pesan ke tabel BigQuery:

  • Konfigurasi akun layanan kustom sehingga hanya pengguna yang memiliki izin iam.serviceAccounts.actAs di akun layanan yang dapat membuat langganan yang menulis ke tabel. Contoh peran yang menyertakan izin iam.serviceAccounts.actAs adalah peran Service Account User (roles/iam.serviceAccountUser).

  • Gunakan agen layanan Pub/Sub default yang memungkinkan pengguna mana pun dengan kemampuan untuk membuat langganan di project guna membuat langganan yang menulis ke tabel. Agen layanan Pub/Sub adalah setelan default jika Anda tidak menentukan akun layanan kustom.

Membuat langganan BigQuery

Untuk membuat langganan dengan pengiriman BigQuery, lakukan langkah-langkah berikut.

Konsol

  1. Di konsol Google Cloud , buka halaman Create subscription.

    Buka Langganan

  2. Untuk kolom Subscription ID, masukkan nama. Untuk mengetahui informasi tentang cara memberi nama langganan, lihat Pedoman untuk memberi nama topik atau langganan.

  3. Di kotak Select a Cloud Pub/Sub topic, ketik atau pilih topik untuk menerima pesan dari.

  4. Untuk Delivery type, pilih Write to BigQuery.

  5. Pilih tabel BigQuery:

    1. Untuk Project, pilih Google Cloud project yang berisi tabel BigQuery.

    2. Untuk Dataset, pilih set data yang ada atau klik Buat set data baru untuk membuat set data baru. Untuk mengetahui informasi tentang cara membuat set data, lihat Membuat set data.

    3. Di kolom Tabel, masukkan nama tabel. Untuk membuat tabel baru, klik link yang akan mengarahkan Anda ke halaman Buat tabel baru BigQuery. Halaman akan terbuka di tab terpisah. Untuk informasi tentang cara membuat tabel, lihat Membuat dan menggunakan tabel.

  6. Untuk Konfigurasi Skema, pilih salah satu opsi berikut:

    • Jangan gunakan skema. Pub/Sub menulis byte pesan ke kolom bernama data.

    • Gunakan skema topik. Pub/Sub menggunakan skema yang terkait dengan topik. Untuk mengetahui informasi selengkapnya, lihat Menggunakan skema topik.

    • Menggunakan skema tabel. Pub/Sub menggunakan skema tabel BigQuery. Untuk mengetahui informasi selengkapnya, lihat Menggunakan skema tabel.

  7. Opsional. Untuk menulis metadata pesan ke tabel BigQuery, pilih Tulis metadata. Untuk mengetahui informasi selengkapnya, lihat Menulis metadata.

  8. Opsional. Untuk menghilangkan kolom yang tidak ada dalam skema tabel BigQuery, pilih Hapus kolom tidak dikenal. Untuk mengetahui informasi selengkapnya, lihat Menghapus kolom yang tidak diketahui.

  9. Konfigurasi properti langganan umum sesuai kebutuhan. Sebaiknya aktifkan Surat yang tidak terkirim untuk menangani kegagalan pengiriman pesan. Untuk mengetahui informasi selengkapnya, lihat Topik pesan yang tidak terkirim.

  10. Klik Create.

gcloud

  1. Di konsol Google Cloud , aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.

  2. Untuk membuat langganan Pub/Sub, gunakan perintah gcloud pubsub subscriptions create:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID
    

    Jika Anda ingin menggunakan akun layanan kustom, berikan sebagai argumen tambahan:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID \
        --bigquery-service-account-email=SERVICE_ACCOUNT_NAME
    

    Ganti kode berikut:

    • SUBSCRIPTION_ID: Menentukan ID langganan.
    • TOPIC_ID: Menentukan ID topik. Topik memerlukan skema.
    • PROJECT_ID: Menentukan ID project.
    • DATASET_ID: Menentukan ID set data yang ada. Untuk membuat set data, lihat Membuat set data.
    • TABLE_ID: Menentukan ID tabel yang ada. Tabel memerlukan kolom data jika topik Anda tidak memiliki skema. Untuk membuat tabel, lihat Membuat tabel kosong dengan definisi skema.
    • SERVICE_ACCOUNT_NAME: Menentukan nama akun layanan yang akan digunakan untuk menulis ke BigQuery.

C++

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.

namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::SubscriptionAdminClient client,
   std::string const& project_id, std::string const& topic_id,
   std::string const& subscription_id, std::string const& table_id) {
  google::pubsub::v1::Subscription request;
  request.set_name(
      pubsub::Subscription(project_id, subscription_id).FullName());
  request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
  request.mutable_bigquery_config()->set_table(table_id);
  auto sub = client.CreateSubscription(request);
  if (!sub) {
    if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
      std::cout << "The subscription already exists\n";
      return;
    }
    throw std::move(sub).status();
  }

  std::cout << "The subscription was successfully created: "
            << sub->DebugString() << "\n";
}

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Pub/Sub.


using Google.Cloud.PubSub.V1;

public class CreateBigQuerySubscriptionSample
{
    public Subscription CreateBigQuerySubscription(string projectId, string topicId, string subscriptionId, string bigqueryTableId)
    {
        SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
        TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
        SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);

        var subscriptionRequest = new Subscription
        {
            SubscriptionName = subscriptionName,
            TopicAsTopicName = topicName,
            BigqueryConfig = new BigQueryConfig
            {
                Table = bigqueryTableId
            }
        };
        var subscription = subscriber.CreateSubscription(subscriptionRequest);
        return subscription;
    }
}

Go

Contoh berikut menggunakan versi utama library klien Go Pub/Sub (v2). Jika Anda masih menggunakan library v1, lihat panduan migrasi ke v2. Untuk melihat daftar contoh kode v1, lihat contoh kode yang tidak digunakan lagi.

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Pub/Sub.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub/v2"
	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
)

// createBigQuerySubscription creates a Pub/Sub subscription that exports messages to BigQuery.
func createBigQuerySubscription(w io.Writer, projectID, topic, subscription, table string) error {
	// projectID := "my-project"
	// topic := "projects/my-project-id/topics/my-topic"
	// subscription := "projects/my-project/subscriptions/my-sub"
	// table := "my-project-id.dataset_id.table_id"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
		Name:  subscription,
		Topic: topic,
		BigqueryConfig: &pubsubpb.BigQueryConfig{
			Table:         table,
			WriteMetadata: true,
		},
	})
	if err != nil {
		return fmt.Errorf("failed to create subscription: %w", err)
	}
	fmt.Fprintf(w, "Created BigQuery subscription: %v\n", sub)

	return nil
}

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Java API Pub/Sub.

import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.pubsub.v1.BigQueryConfig;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.ProjectTopicName;
import com.google.pubsub.v1.Subscription;
import java.io.IOException;

public class CreateBigQuerySubscriptionExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String topicId = "your-topic-id";
    String subscriptionId = "your-subscription-id";
    String bigqueryTableId = "your-project.your-dataset.your-table";

    createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId);
  }

  public static void createBigQuerySubscription(
      String projectId, String topicId, String subscriptionId, String bigqueryTableId)
      throws IOException {
    try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {

      ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
      ProjectSubscriptionName subscriptionName =
          ProjectSubscriptionName.of(projectId, subscriptionId);

      BigQueryConfig bigqueryConfig =
          BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build();

      Subscription subscription =
          subscriptionAdminClient.createSubscription(
              Subscription.newBuilder()
                  .setName(subscriptionName.toString())
                  .setTopic(topicName.toString())
                  .setBigqueryConfig(bigqueryConfig)
                  .build());

      System.out.println("Created a BigQuery subscription: " + subscription.getAllFields());
    }
  }
}

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const bigqueryTableId = 'YOUR_TABLE_ID';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createBigQuerySubscription(
  topicNameOrId,
  subscriptionNameOrId,
  bigqueryTableId,
) {
  const options = {
    bigqueryConfig: {
      table: bigqueryTableId,
      writeMetadata: true,
    },
  };

  await pubSubClient
    .topic(topicNameOrId)
    .createSubscription(subscriptionNameOrId, options);

  console.log(`Subscription ${subscriptionNameOrId} created.`);
}

Node.ts

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const bigqueryTableId = 'YOUR_TABLE_ID';

// Imports the Google Cloud client library
import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createBigQuerySubscription(
  topicNameOrId: string,
  subscriptionNameOrId: string,
  bigqueryTableId: string,
) {
  const options: CreateSubscriptionOptions = {
    bigqueryConfig: {
      table: bigqueryTableId,
      writeMetadata: true,
    },
  };

  await pubSubClient
    .topic(topicNameOrId)
    .createSubscription(subscriptionNameOrId, options);

  console.log(`Subscription ${subscriptionNameOrId} created.`);
}

PHP

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Pub/Sub.

use Google\Cloud\PubSub\PubSubClient;
use Google\Cloud\PubSub\V1\BigQueryConfig;

/**
 * Creates a Pub/Sub BigQuery subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 * @param string $table      The BigQuery table to which to write.
 */
function create_bigquery_subscription($projectId, $topicName, $subscriptionName, $table)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $config = new BigQueryConfig(['table' => $table]);
    $subscription->create([
        'bigqueryConfig' => $config
    ]);

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Python API.

from google.cloud import pubsub_v1

# TODO(developer)
# project_id = "your-project-id"
# topic_id = "your-topic-id"
# subscription_id = "your-subscription-id"
# bigquery_table_id = "your-project.your-dataset.your-table"

publisher = pubsub_v1.PublisherClient()
subscriber = pubsub_v1.SubscriberClient()
topic_path = publisher.topic_path(project_id, topic_id)
subscription_path = subscriber.subscription_path(project_id, subscription_id)

bigquery_config = pubsub_v1.types.BigQueryConfig(
    table=bigquery_table_id, write_metadata=True
)

# Wrap the subscriber in a 'with' block to automatically call close() to
# close the underlying gRPC channel when done.
with subscriber:
    subscription = subscriber.create_subscription(
        request={
            "name": subscription_path,
            "topic": topic_path,
            "bigquery_config": bigquery_config,
        }
    )

print(f"BigQuery subscription created: {subscription}.")
print(f"Table for subscription is: {bigquery_table_id}")

Ruby

Contoh berikut menggunakan library klien Ruby Pub/Sub v3. Jika Anda masih menggunakan library v2, lihat panduan migrasi ke v3. Untuk melihat daftar contoh kode Ruby v2, lihat contoh kode yang tidak digunakan lagi.

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Pub/Sub.

# project_id = "your-project-id"
# topic_id = "your-topic-id"
# subscription_id = "your-subscription-id"
# bigquery_table_id = "my-project:dataset-id.table-id"

pubsub = Google::Cloud::PubSub.new project_id: project_id
subscription_admin = pubsub.subscription_admin

subscription = subscription_admin.create_subscription \
  name: pubsub.subscription_path(subscription_id),
  topic: pubsub.topic_path(topic_id),
  bigquery_config: {
    table: bigquery_table_id,
    write_metadata: true
  }

puts "BigQuery subscription created: #{subscription_id}."
puts "Table for subscription is: #{bigquery_table_id}"

Memantau langganan BigQuery

Cloud Monitoring menyediakan sejumlah metrik untuk memantau langganan.

Untuk mengetahui daftar semua metrik yang tersedia terkait Pub/Sub dan deskripsinya, lihat dokumentasi Monitoring untuk Pub/Sub.

Anda juga dapat memantau langganan dari dalam Pub/Sub.

Langkah berikutnya