Menjalankan kueri gabungan Oracle

Sebagai analis data, Anda dapat membuat kueri data relasional yang berada di Oracle langsung dari BigQuery secara real time, tanpa menyalin atau memindahkan data.

Federasi Oracle BigQuery menggunakan BigQuery Connection API untuk terhubung ke mesin database Oracle. Kemudian, Anda dapat menggunakan fungsi EXTERNAL_QUERY untuk mengirim kueri SQL langsung ke Oracle untuk dieksekusi, dan hasilnya akan di-streaming langsung kembali.

Batasan

Kueri gabungan Oracle tunduk pada batasan berikut:

  • Anda hanya dapat menjalankan kueri hanya baca melalui fungsi EXTERNAL_QUERY. Pernyataan bahasa definisi data (DDL) dan bahasa pengolahan data (DML) tidak didukung.
  • Federasi hanya dapat diakses melalui fungsi EXTERNAL_QUERY. Pembuatan tabel eksternal BigQuery atau set data permanen yang langsung dipetakan ke tabel Oracle tidak didukung.
  • Latensi kueri gabungan mungkin jauh lebih tinggi daripada menjalankan kueri langsung di Oracle.
  • Layanan koneksi yang mendasarinya mungkin menghibernasi koneksi yang tidak aktif. Kueri pertama yang menggunakan koneksi Oracle setelah periode tidak aktif mungkin memerlukan waktu lebih dari satu menit untuk dijalankan saat konektor melakukan inisialisasi.
  • Peering DNS tidak didukung. Anda harus terhubung menggunakan alamat IP atau nama host yang dapat di-resolve sepenuhnya dalam jaringan VPC Anda.
  • Kueri Oracle SQL harus menentukan alias kolom eksplisit untuk setiap kolom yang berisi hasil atau ekspresi fungsi (misalnya, SELECT COUNT(*) AS total_count). Ekspresi tanpa alias menghasilkan nama kolom dengan karakter khusus yang tidak valid dalam definisi skema tabel BigQuery.
  • Jika penggunaan Compute Engine API dalam project kueri dibatasi oleh Kontrol Layanan VPC, kueri gabungan akan gagal jika koneksi menggunakan lampiran jaringan. Pastikan aturan ingress dan egress Kontrol Layanan VPC yang sesuai telah dikonfigurasi.
  • Tidak ada pushdown SQL tambahan yang didukung untuk Oracle. Filter dan agregasi dalam kueri BigQuery luar tidak didorong ke kueri dalam di dalam fungsi EXTERNAL_QUERY. Anda harus menentukan predikat dan proyeksi kolom langsung di dalam pernyataan SQL Oracle internal untuk membatasi baris dan kolom yang ditransfer di seluruh jaringan.

  • Hanya autentikasi nama pengguna dan sandi database Oracle yang didukung. Penyedia identitas pihak ketiga, Kerberos, RADIUS, dan autentikasi IAM Oracle Cloud Infrastructure (OCI) tidak didukung.

  • Jenis Oracle yang kompleks atau eksklusif seperti jenis yang ditentukan pengguna (UDT), jenis spasial (SDO_GEOMETRY), jenis koleksi (VARRAY, tabel bertingkat), SYS.ANYDATA, REF, BFILE, dan kolom JSON (OSON) biner tidak didukung. Untuk membuat kueri kolom JSON biner, lakukan serialisasi ke teks dalam kueri Anda (misalnya, dengan JSON_SERIALIZE(column_name) atau JSON_QUERY).

  • Kolom NUMBER yang tidak dibatasi dan ekspresi numerik yang dihitung dipetakan ke STRING BigQuery untuk mempertahankan presisi penuh tanpa pemotongan atau overflow. Kolom NUMBER(p, s) yang dibatasi dipetakan ke NUMERIC (jika presisi kurang dari atau sama dengan 38 dan skala kurang dari atau sama dengan 9) atau BIGNUMERIC (jika skala lebih besar dari 9 atau digit bilangan bulat lebih besar dari 29).

  • Kolom CHAR(n) dan NCHAR(n) dengan panjang tetap mempertahankan padding spasi kosong di akhir hingga panjang n saat dipetakan ke STRING BigQuery.

  • Tanggal dan stempel waktu sebelum 15 Oktober 1582 mungkin mengalami pergeseran kalender selama 10 hari karena transisi kalender Gregorian historis. Untuk mempertahankan tanggal historis yang tepat sebelum tahun 1582, transmisikan ke VARCHAR2 dalam pernyataan EXTERNAL_QUERY.

Lingkungan dan versi Oracle yang didukung

Federasi kueri mendukung database Oracle di seluruh lingkungan deployment berikut:

  • Oracle Database@Google Cloud
  • Oracle Exadata Database Service
  • Instance Oracle lokal yang terhubung ke Google Cloud melalui Cloud VPN, Cloud Interconnect, atau IP publik melalui internet

Federasi kueri mendukung versi Oracle berikut:

  • Oracle Database 23.x (23ai)
  • Oracle Database 21.x
  • Oracle Database 19.x (19c)

Sebelum memulai

Pastikan administrator BigQuery Anda telah membuat koneksi Oracle dan membagikannya kepada Anda.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat kueri Oracle, minta administrator untuk memberi Anda peran IAM BigQuery Connection User (roles/bigquery.connectionUser) pada project. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

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

Data kueri

Untuk mengirim kueri gabungan ke Oracle dari kueri GoogleSQL, gunakan fungsi EXTERNAL_QUERY.

Contoh berikut adalah kueri gabungan yang menggabungkan data pelanggan di BigQuery bernama mydataset.customers dengan data pesanan langsung dari database Oracle:

SELECT
  bq_cust.customer_id,
  bq_cust.customer_name,
  oracle_orders.order_id,
  oracle_orders.order_status,
  oracle_orders.order_total
FROM
  mydataset.customers AS bq_cust
JOIN
  EXTERNAL_QUERY(
    'projects/my-project/locations/us-central1/connections/oracle_prod_conn',
    '''SELECT customer_id, order_id, order_status, order_total
       FROM orders
       WHERE order_date >= SYSDATE - 1''') AS oracle_orders
  ON bq_cust.customer_id = oracle_orders.customer_id;

Melihat skema tabel Oracle

Anda dapat mengkueri tampilan kamus data Oracle melalui EXTERNAL_QUERY untuk memeriksa metadata database, menemukan tabel, dan meninjau skema kolom sebelum menjalankan analisis.

Mencantumkan semua tabel yang dapat diakses

SELECT *
FROM EXTERNAL_QUERY(
  'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID',
  '''SELECT owner, table_name, tablespace_name, status
     FROM all_tables
     ORDER BY owner, table_name''');

Melihat kolom dan jenis data dalam tabel

SELECT *
FROM EXTERNAL_QUERY(
  'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID',
  '''SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
     FROM all_tab_columns
     WHERE owner = 'SCHEMA_NAME' AND table_name = 'TABLE_NAME'
     ORDER BY column_id''');

Pemetaan jenis data

Saat Anda menjalankan kueri gabungan, BigQuery akan mengonversi data dari Oracle menjadi jenis data GoogleSQL sesuai dengan tabel berikut:

Jenis data Oracle Jenis data BigQuery
Jenis numerik
NUMBER(p, s) (p ≤ 38, s ≤ 9) NUMERIC
NUMBER(p, s) (s > 9 atau p > 38) BIGNUMERIC
NUMBER (skala tidak dibatasi atau mengambang) STRING
FLOAT, FLOAT(p) FLOAT64
BINARY_FLOAT FLOAT64
BINARY_DOUBLE FLOAT64
Jenis karakter dan string
CHAR(n) STRING
NCHAR(n) STRING
VARCHAR2(n) STRING
NVARCHAR2(n) STRING
CLOB STRING
NCLOB STRING
LONG STRING
Jenis biner
RAW(n) BYTES
BLOB BYTES
LONG RAW BYTES
Jenis tanggal, waktu, dan interval
DATE DATETIME
TIMESTAMP, TIMESTAMP(p) DATETIME
TIMESTAMP WITH TIME ZONE TIMESTAMP
TIMESTAMP WITH LOCAL TIME ZONE TIMESTAMP
INTERVAL YEAR TO MONTH STRING
INTERVAL DAY TO SECOND STRING
Jenis identifikasi baris
ROWID STRING
UROWID STRING
Jenis semiterstruktur, vektor, dan XML
JSON (tekstual/OSON dengan serialisasi teks) STRING
VECTOR STRING
XMLTYPE STRING

Harga

Biaya menjalankan kueri gabungan didasarkan pada tiga faktor:

  • Biaya komputasi untuk menjalankan kueri di Oracle (ditagih oleh penyedia database Oracle atau lingkungan hosting Anda)
  • Biaya bandwidth untuk mentransfer hasil kueri dari Oracle ke BigQuery (biaya jaringan egress dari penyedia hosting database Anda)
  • Biaya komputasi untuk menjalankan kueri di BigQuery

Semua biaya terkait Oracle bergantung pada jenis layanan Oracle dan lingkungan hosting yang Anda gunakan. Untuk membatasi biaya bandwidth, sebaiknya tulis kueri dalam pernyataan EXTERNAL_QUERY sehingga kueri tersebut mengecualikan semua kolom dan baris yang tidak diperlukan untuk menghitung hasil akhir.

Tidak ada biaya tambahan untuk menjalankan kueri gabungan di BigQuery. Untuk mengetahui informasi selengkapnya tentang harga BigQuery, lihat Harga.

Jika koneksi Anda menggunakan komponen jaringan Google Cloud , harga berikut juga mungkin berlaku:

Langkah berikutnya