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 kolomJSON(OSON) biner tidak didukung. Untuk membuat kueri kolomJSONbiner, lakukan serialisasi ke teks dalam kueri Anda (misalnya, denganJSON_SERIALIZE(column_name)atauJSON_QUERY).Kolom
NUMBERyang tidak dibatasi dan ekspresi numerik yang dihitung dipetakan keSTRINGBigQuery untuk mempertahankan presisi penuh tanpa pemotongan atau overflow. KolomNUMBER(p, s)yang dibatasi dipetakan keNUMERIC(jika presisi kurang dari atau sama dengan 38 dan skala kurang dari atau sama dengan 9) atauBIGNUMERIC(jika skala lebih besar dari 9 atau digit bilangan bulat lebih besar dari 29).Kolom
CHAR(n)danNCHAR(n)dengan panjang tetap mempertahankan padding spasi kosong di akhir hingga panjang n saat dipetakan keSTRINGBigQuery.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
VARCHAR2dalam pernyataanEXTERNAL_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
- Pelajari cara terhubung ke Oracle.
- Pelajari kueri gabungan lebih lanjut.
- Pelajari cara mengelola koneksi.