Menghubungkan ke PostgreSQL

Sebagai administrator BigQuery, Anda dapat membuat koneksi untuk mengakses data PostgreSQL. Koneksi ini memungkinkan analis data untuk membuat kueri data di PostgreSQL.

Lingkungan dan versi PostgreSQL yang didukung

Federasi BigQuery mendukung lingkungan deployment PostgreSQL berikut:

  • Instance PostgreSQL lokal yang terhubung ke Google Cloud melalui Cloud VPN atau Cloud Interconnect
  • Instance PostgreSQL yang dikelola sendiri di Compute Engine
  • Instance PostgreSQL yang dihosting di cloud dan dapat diakses melalui alamat IP publik atau lampiran jaringan

Federasi BigQuery mendukung versi PostgreSQL berikut:

  • PostgreSQL 16 (Direkomendasikan)
  • PostgreSQL 15

Sebelum memulai

Aktifkan API yang diperlukan, konfigurasi database PostgreSQL Anda, dan berikan peran Identity and Access Management yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.

  1. Mengaktifkan BigQuery Connection API.

    Mengaktifkan API

  2. Jika Anda berencana merutekan traffic melalui jaringan pribadi menggunakan lampiran jaringan, aktifkan juga Compute Engine API.

    Mengaktifkan Compute Engine API

  3. Di database PostgreSQL, buat pengguna database khusus dengan hak istimewa SELECT pada tabel atau skema yang ingin Anda kueri:

    CREATE USER USER_NAME WITH PASSWORD 'PASSWORD';
    GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME;
    GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME;

    Ganti kode berikut:

    • USER_NAME: nama pengguna untuk pengguna database.
    • PASSWORD: sandi pengguna database.
    • SCHEMA_NAME: skema tabel yang ingin Anda kueri.
  4. Konfigurasikan konektivitas jaringan ke instance database PostgreSQL Anda dengan melakukan salah satu tindakan berikut:

    • Jika Anda merutekan traffic melalui jaringan pribadi, buat lampiran jaringan di region yang sama dengan koneksi BigQuery Anda. Peering DNS tidak didukung; hubungkan menggunakan alamat IP atau nama host yang dapat di-resolve dalam jaringan VPC Anda.
    • Jika Anda terhubung melalui internet publik, tambahkan semua rentang alamat IP Google ke aturan firewall database PostgreSQL Anda.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk terhubung ke PostgreSQL, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Menghubungkan BigQuery ke PostgreSQL

Anda dapat menghubungkan BigQuery ke PostgreSQL di konsolGoogle Cloud atau alat command line bq.

Konsol

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Penjelajah, klik Tambahkan data.

    Halaman Add data akan terbuka.

  3. Di panel Filter By, di bagian Data Source Type, pilih Databases.

    Atau, di kolom Search for data sources, masukkan postgresql.

  4. Di bagian Sumber data unggulan, klik PostgreSQL.

  5. Di bagian Access external data in place, klik kartu solusi BigQuery Federation dengan deskripsi Federated queries to PostgreSQL (bukan kartu Cloud SQL atau AlloyDB for PostgreSQL).

    Panel External data source akan terbuka.

  6. Di panel External data source, konfigurasikan hal berikut:

    • Di kolom Connection ID, masukkan ID koneksi unik (misalnya, postgres_prod_conn).
    • Di bagian Location type, pilih Region, lalu pilih region tempat set data BigQuery Anda berada. Kueri yang menggunakan koneksi ini harus dijalankan dari region ini.
    • (Opsional) Di kolom Friendly name, masukkan nama deskriptif untuk koneksi.
    • (Opsional) Di kolom Description, masukkan deskripsi untuk resource koneksi ini.
    • Di bagian Encryption, pilih Google-managed encryption key, atau pilih Cloud KMS key untuk menggunakan kunci enkripsi yang dikelola pelanggan (CMEK).
    • Di kolom Host:port, masukkan host dan port server database PostgreSQL dalam format HOST:PORT (misalnya, 10.10.2.2:5432).
    • Di kolom Username, masukkan pengguna database yang Anda buat di prasyarat.
    • Di kolom Password, masukkan sandi pengguna database.
    • Di kolom Database, masukkan nama database PostgreSQL.
    • (Opsional) Di kolom Network attachment, jika Anda menggunakan konektivitas pribadi, masukkan jalur resource lampiran jaringan dalam format projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME.
    • Dalam daftar TLS mode, pilih salah satu mode TLS yang didukung (misalnya, Encrypt data, verify CA and host name (recommended)).
    • Dalam daftar Certificate authority (CA), pilih Public CA (Web PKI), atau pilih CA kustom dan tempel sertifikat berformat PEM.
  7. Klik Create connection.

bq

Gunakan perintah bq mk dengan flag --connection:

bq mk --connection \
  --location=LOCATION \
  --project_id=PROJECT_ID \
  --connector_configuration '{
    "connector_id": "postgresql",
    "endpoint": {
      "host_port": "HOST_PORT"
    },
    "asset": {
      "database": "DATABASE"
    },
    "authentication": {
      "username_password": {
        "username": "USERNAME",
        "password": {
          "plaintext": "PASSWORD"
        }
      }
    },
    "tls": {
      "mode": "TLS_MODE"
    },
    "network": {
      "private_service_connect": {
        "network_attachment": "projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME"
      }
    }
  }' \
  CONNECTION_ID

Ganti kode berikut:

  • LOCATION: region BigQuery (misalnya, us-central1) yang cocok dengan set data yang ingin Anda kueri bersama dengan PostgreSQL. Kueri yang menggunakan koneksi ini harus dijalankan dari region ini.
  • PROJECT_ID: Project ID Google Cloud Anda.
  • HOST_PORT: host dan port server database PostgreSQL Anda dalam format HOST:PORT (misalnya, 10.10.2.2:5432).
  • DATABASE: nama database PostgreSQL.
  • USERNAME: pengguna database PostgreSQL.
  • PASSWORD: sandi pengguna database.
  • TLS_MODE: mode enkripsi TLS (ENCRYPT_VERIFY_CA_AND_HOST, ENCRYPT_VERIFY_CA, ENCRYPT_VERIFY_NONE, atau DISABLE). Jika Anda menggunakan sertifikat CA kustom dengan ENCRYPT_VERIFY_CA_AND_HOST atau ENCRYPT_VERIFY_CA, sertakan objek "private_pki": { "trusted_certificates_pem": "CERT_CONTENT" } di bagian "tls".
  • NA_REGION: region tempat lampiran jaringan Anda berada.
  • ATTACHMENT_NAME: nama lampiran jaringan Anda. Jika terhubung melalui IP publik, hapus objek "network".
  • CONNECTION_ID: ID unik untuk koneksi ini.
  • (Opsional) --kms_key_name=KMS_KEY_NAME: kunci enkripsi yang dikelola pelanggan (CMEK). Jika dihilangkan, kredensial akan dilindungi oleh Google-owned and Google-managed encryption keydefault.

Konfigurasi Transport Layer Security (TLS)

Konektor PostgreSQL mendukung Transport Layer Security (TLS) untuk mengenkripsi traffic kueri dalam pengiriman antara BigQuery dan database PostgreSQL Anda.

Saat Anda menghubungkan BigQuery ke PostgreSQL, pilih salah satu mode TLS berikut:

  • Mengenkripsi data, serta memverifikasi Certificate Authority (CA) dan nama host (mode ENCRYPT_VERIFY_CA_AND_HOST). Melakukan validasi server penuh menggunakan TLS. Mengenkripsi semua data dalam pengiriman, memverifikasi bahwa sertifikat server database ditandatangani oleh CA tepercaya, dan memeriksa apakah nama host yang Anda hubungkan cocok dengan Nama Umum (CN) atau Nama Alternatif Subjek (SAN) dalam sertifikat. Wajib untuk koneksi melalui IP publik.

  • Mengenkripsi data, dan hanya memverifikasi CA (mode ENCRYPT_VERIFY_CA). Mengenkripsi semua data dalam pengiriman dan memverifikasi bahwa sertifikat server ditandatangani oleh CA tepercaya, tetapi tidak memverifikasi nama host server. Gunakan mode ini jika sertifikat server ditandatangani oleh CA tepercaya, tetapi Anda terhubung menggunakan alamat IP atau nama host yang tidak cocok dengan CN atau SAN sertifikat.

  • Hanya enkripsi (mode ENCRYPT_VERIFY_NONE). Mengenkripsi semua data yang ditransfer antara BigQuery dan server. Tidak melakukan verifikasi sertifikat atau nama host. Hanya direkomendasikan dalam VPC pribadi.

  • Tidak ada enkripsi atau verifikasi (mode DISABLE). Tidak mengenkripsi data dan tidak melakukan verifikasi sertifikat atau nama host. Hanya diizinkan saat terhubung melalui lampiran jaringan pribadi dalam jaringan VPC yang dilindungi.

Sertifikat server tepercaya dalam format PEM

Jika Anda menggunakan mode ENCRYPT_VERIFY_CA_AND_HOST atau mode ENCRYPT_VERIFY_CA, lakukan hal berikut:

  • Jika sertifikat server database Anda ditandatangani oleh CA publik (seperti yang disertakan dalam Program Root CA Mozilla, termasuk Let's Encrypt, DigiCert, atau Layanan Kepercayaan Google), Anda tidak perlu memberikan sertifikat. Root certificate untuk CA publik dipercaya secara default.
  • Jika Anda menggunakan sertifikat yang ditandatangani oleh CA internal atau pribadi dalam organisasi, atau sertifikat yang ditandatangani sendiri, Anda harus memberikan rantai sertifikat lengkap dalam format Privacy-Enhanced Mail (PEM) di kolom Trusted PEM certificate selama penyiapan koneksi.

Berbagi koneksi dengan pengguna

Anda dapat memberikan peran berikut untuk mengizinkan pengguna membuat kueri data dan mengelola koneksi:

  • roles/bigquery.connectionUser: memungkinkan pengguna menggunakan koneksi untuk terhubung dengan sumber data eksternal dan menjalankan kueri pada sumber data tersebut.

  • roles/bigquery.connectionAdmin: memungkinkan pengguna mengelola koneksi.

Untuk informasi selengkapnya tentang peran dan izin IAM di BigQuery, baca Peran dan izin bawaan.

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

    Koneksi dicantumkan dalam project Anda, dalam grup yang disebut Connections.

  2. Di panel kiri, klik Explorer:

    Tombol yang ditandai untuk panel Explorer.

    Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.

  3. Klik project Anda, klik Connections, lalu pilih koneksi.

  4. Di panel Detail, klik Bagikan untuk membagikan koneksi. Kemudian, lakukan hal berikut:

    1. Dalam dialog Izin koneksi, bagikan koneksi dengan akun utama lain dengan menambahkan atau mengedit akun utama.

    2. Klik Simpan.

bq

Anda tidak dapat berbagi koneksi dengan alat command line bq. Untuk berbagi koneksi, gunakan konsol Google Cloud atau metode BigQuery Connections API untuk melakukannya.

API

Gunakan metode projects.locations.connections.setIAM di bagian referensi REST API Koneksi BigQuery, dan berikan instance resource policy.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Harga

Kueri dan koneksi gabungan dikenai biaya berikut:

Langkah berikutnya