Membuat langganan BigQuery

Dokumen ini menjelaskan cara membuat langganan BigQuery. Anda dapat menggunakan konsol Trusted Cloud , 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

Berikut adalah daftar panduan terkait peran dan izin:

  • Untuk membuat langganan, Anda harus mengonfigurasi kontrol akses di tingkat project.

  • Anda juga memerlukan izin tingkat resource jika langganan dan topik Anda berada di project yang berbeda, seperti yang dibahas nanti di bagian ini.

  • Untuk membuat langganan BigQuery, agen layanan Pub/Sub atau akun layanan kustom harus memiliki izin untuk menulis ke tabel BigQuery tertentu. Untuk informasi selengkapnya tentang cara memberikan izin ini, lihat bagian berikutnya dalam dokumen ini.

  • Anda dapat mengonfigurasi langganan BigQuery dalam project untuk menulis ke tabel BigQuery dalam project yang berbeda.

Untuk mendapatkan izin yang diperlukan untuk membuat langganan BigQuery, minta administrator Anda 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, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat langganan BigQuery:

  • Menarik dari langganan: pubsub.subscriptions.consume
  • Buat langganan: pubsub.subscriptions.create
  • Menghapus langganan: pubsub.subscriptions.delete
  • Mendapatkan langganan: pubsub.subscriptions.get
  • Mencantumkan langganan: pubsub.subscriptions.list
  • Memperbarui langganan: pubsub.subscriptions.update
  • Melampirkan langganan ke topik: pubsub.topics.attachSubscription
  • Dapatkan kebijakan IAM untuk langganan: pubsub.subscriptions.getIamPolicy
  • Konfigurasi kebijakan IAM untuk langganan: pubsub.subscriptions.setIamPolicy

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

Agar akun utama di satu project dapat membuat langganan BigQuery di project lain, Anda harus memberikan peran Pub/Sub Editor (roles/pubsub.editor) kepada akun utama tersebut di kedua project. Hal ini memberikan izin yang diperlukan untuk membuat langganan BigQuery baru dan melampirkannya ke topik asli. Peran Pub/Sub Editor (roles/pubsub.editor) di topik juga membantu Anda melampirkan langganan BigQuery di project yang berbeda ke topik.

Menetapkan peran ke akun layanan

Beberapa layanan memiliki akun layanan yang dikelola Trusted Cloud by S3NS layanan yang memungkinkan layanan mengakses resource Anda. Trusted CloudAkun layanan ini dikenal sebagai agen layanan. Pub/Sub membuat dan mengelola agen layanan untuk setiap project dalam format service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

Anda dapat memilih antara mengizinkan agen layanan Pub/Sub atau izin akun layanan kustom untuk menulis ke tabel BigQuery.

Memberikan izin kepada agen layanan Pub/Sub berarti setiap pengguna yang memiliki izin untuk membuat langganan di project Anda dapat menulis ke tabel BigQuery. Jika Anda ingin memberikan izin yang lebih terperinci untuk menulis ke tabel BigQuery, konfigurasikan akun layanan kustom.

Untuk mengetahui informasi selengkapnya tentang IAM BigQuery, lihat Peran dan izin BigQuery.

Menetapkan peran BigQuery ke agen layanan Pub/Sub

Jika Anda ingin membuat langganan BigQuery menggunakan agen layanan Pub/Sub, agen tersebut harus memiliki izin untuk menulis ke tabel BigQuery tertentu dan membaca metadata tabel.

Berikan peran BigQuery Data Editor (roles/bigquery.dataEditor) kepada agen layanan Pub/Sub. Anda dapat memberikan izin pada setiap tabel atau pada project secara keseluruhan.

Tabel

  1. Di konsol Trusted 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. Klik tabel yang ingin Anda beri izin.

  4. Untuk tabel, pilih Tindakan lainnya > Bagikan > Izin.

    Atau, klik tabel dan di halaman utama, klik Berbagi > Izin.

    Jendela Izin berbagi akan terbuka.

  5. Klik Tambahkan akun utama.

  6. Untuk Add principals, masukkan nama agen layanan Pub/Sub untuk project yang berisi langganan. Format agen layanan adalah service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan project-number=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Di menu drop-down Pilih peran, masukkan BigQuery, lalu pilih peran BigQuery Data Editor.

  8. Klik Simpan.

Project

  1. Di konsol Trusted Cloud , buka halaman IAM.

    Buka IAM

  2. Klik Grant access.

  3. Di bagian Add principals, masukkan nama agen layanan Pub/Sub Anda. Format agen layanan adalah service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan project-number=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  4. Di bagian Tetapkan peran, klik Tambahkan peran lain.

  5. Di menu drop-down Pilih peran, masukkan BigQuery, lalu pilih peran BigQuery Data Editor.

  6. Klik Simpan.

Menetapkan peran BigQuery ke akun layanan kustom

Jika Anda ingin menggunakan akun layanan kustom untuk menulis ke tabel BigQuery, Anda harus menetapkan izin berikut:

  • Akun layanan kustom harus memiliki izin untuk menulis ke tabel BigQuery tertentu dan membaca metadata tabel.
  • Agen layanan Pub/Sub harus memiliki izin iam.serviceAccounts.getAccessToken untuk akun layanan kustom.
  • Pengguna yang membuat langganan harus memiliki izin iam.serviceAccounts.actAs untuk akun layanan kustom.

Buat akun layanan dan berikan izin dengan langkah-langkah berikut:

  1. Buat akun layanan kustom. Akun layanan harus berada dalam project yang sama dengan langganan.

  2. Berikan peran BigQuery Data Editor (roles/bigquery.dataEditor) kepada akun layanan kustom.

    Anda dapat memberikan izin akun layanan pada satu tabel dalam project atau pada semua tabel dalam project. Untuk melakukannya, lihat bagian yang sesuai di Menetapkan peran BigQuery ke agen layanan Pub/Sub. Dalam prosedur ini, ganti alamat email agen layanan Pub/Sub dengan alamat email akun layanan kustom.

  3. Berikan izin iam.serviceAccounts.getAccessToken kepada agen layanan Pub/Sub di akun layanan kustom atau di semua akun layanan dalam project. Anda dapat memberikan izin ini dengan memberikan peran roles/iam.serviceAccountTokenCreator kepada agen layanan Pub/Sub.

    Pilih metode yang sesuai berdasarkan persyaratan Anda.

Akun layanan

  1. Di konsol Trusted Cloud , buka halaman Service accounts.

    Buka halaman Service accounts

  2. Masukkan nama akun layanan kustom di Filter.

  3. Pilih akun layanan dari daftar.

  4. Klik Principals with access.

  5. Klik Grant access.

  6. Di bagian Add principals, masukkan nama agen layanan Pub/Sub untuk project yang berisi langganan. Format agen layanan adalah service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan project-number=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Di menu drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account Token Creator.

  8. Klik Simpan.

Project

  1. Di konsol Trusted Cloud , buka halaman IAM.

    Buka IAM

  2. Klik Grant access.

  3. Di bagian Add principals, masukkan nama akun layanan kustom Anda.

  4. Di bagian Tetapkan peran, klik Tambahkan peran lain.

  5. Di menu drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account Token Creator.

  6. Klik Simpan.

Jika Anda membuat akun layanan kustom, Anda seharusnya sudah memiliki izin iam.serviceAccounts.actAs yang diperlukan. Jika Anda perlu memberi orang lain izin di akun layanan:

  1. Di konsol Trusted Cloud , buka halaman Service accounts.

    Buka halaman Service accounts

  2. Masukkan nama akun layanan kustom di Filter.

  3. Pilih akun layanan dari daftar.

  4. Klik Principals with access.

  5. Klik Grant access.

  6. Di bagian Add principals, masukkan nama akun yang ingin Anda berikan akses.

  7. Di drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account User.

  8. Selain itu, jika tabel BigQuery Anda adalah tabel Apache Iceberg, berikan peran Storage Admin (roles/storage.admin) kepada akun layanan Pub/Sub untuk mengakses bucket Cloud Storage.

  9. Klik Simpan.

Properti langganan BigQuery

Saat mengonfigurasi langganan BigQuery, Anda dapat menentukan properti berikut.

Properti umum

Pelajari properti langganan umum yang dapat Anda tetapkan di semua langganan.

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 di 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 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.

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 Streaming update tabel 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.

  • 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 diterapkan dengan pesan yang ditulis ke tabel BigQuery. Misalnya, jika opsi Hapus kolom tidak dikenal 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 Streaming update tabel 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 tetap berada dalam backlog langganan kecuali Anda mengonfigurasi topik pesan yang tidak terkirim.

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 dikirimkan 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 cara faktor-faktor ini memengaruhi 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.

Membuat langganan BigQuery

Contoh berikut menunjukkan cara membuat langganan dengan pengiriman BigQuery.

Konsol

  1. Di konsol Trusted Cloud , buka halaman Subscriptions.

    Buka Langganan

  2. Klik Buat langganan.

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

  4. Pilih atau buat topik dari menu drop-down. Langganan menerima pesan dari topik.

  5. Pilih Jenis pengiriman sebagai Tulis ke BigQuery.

  6. Pilih project untuk tabel BigQuery.

  7. Pilih set data yang ada atau buat set data baru. Untuk mengetahui informasi tentang cara membuat set data, lihat Membuat set data.

  8. Pilih tabel yang ada atau buat tabel baru. Untuk mengetahui informasi tentang cara membuat tabel, lihat Membuat tabel.

  9. Sebaiknya aktifkan Surat mati untuk menangani kegagalan pesan. Untuk mengetahui informasi selengkapnya, lihat Topik pesan yang tidak terkirim.

  10. Klik Buat.

Anda juga dapat membuat langganan dari halaman Topik. Pintasan ini berguna untuk mengaitkan topik dengan langganan.

  1. Di konsol Trusted Cloud , buka halaman Topics.

    Buka Topik

  2. Klik di samping topik yang ingin Anda buat langganannya.

  3. Dari menu konteks, pilih Buat langganan.

  4. Pilih Jenis pengiriman sebagai Tulis ke BigQuery.

  5. Pilih project untuk tabel BigQuery.

  6. Pilih set data yang ada atau buat set data baru. Untuk mengetahui informasi tentang cara membuat set data, lihat Membuat set data.

  7. Pilih tabel yang ada atau buat tabel baru. Untuk mengetahui informasi tentang cara membuat set data, lihat Membuat tabel.

  8. Sebaiknya aktifkan Surat mati untuk menangani kegagalan pesan. Untuk mengetahui informasi selengkapnya, lihat Topik pesan yang tidak terkirim.

  9. Klik Buat.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    1. 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 Pub/Sub C++ API.

    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 library klien Go Pub/Sub versi utama (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 Pub/Sub Go API.

    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 Pub/Sub Java API.

    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 Pub/Sub Ruby 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