Menerjemahkan kueri SQL dengan Translation API
Dokumen ini menjelaskan cara menggunakan BigQuery Migration API di BigQuery untuk menerjemahkan skrip yang ditulis dalam dialek SQL lainnya ke dalam kueri GoogleSQL.
Untuk mengetahui daftar dialek SQL yang didukung oleh penerjemah SQL ini, dan daftar lokasi pemrosesan yang didukung, lihat Dialek SQL yang didukung dan Lokasi.
Sebelum memulai
Sebelum Anda mengirimkan tugas terjemahan, selesaikan langkah-langkah berikut.
Memilih mode terjemahan
BigQuery Migration API mendukung dua mode terjemahan. Kedua mode menggunakan metode API yang sama dan berjalan sebagai tugas asinkron. Mode ini berbeda dalam cara Anda memberikan SQL sumber dan cara Anda menerima SQL yang diterjemahkan:
- Terjemahan batch: API membaca file sumber dari Cloud Storage dan menulis file serta laporan yang diterjemahkan ke Cloud Storage. Gunakan terjemahan batch untuk menerjemahkan banyak file sekaligus, misalnya, saat Anda memigrasikan seluruh codebase.
- Terjemahan interaktif: Anda meneruskan SQL sebagai literal string di isi permintaan dan membaca SQL yang diterjemahkan dari respons alur kerja. Anda tidak perlu menyimpan SQL atau output terjemahan di Cloud Storage. Gunakan terjemahan interaktif untuk menerjemahkan kueri individual sesuai permintaan — misalnya, saat menerjemahkan kueri dari aplikasi atau alat developer.
Aktifkan terjemahan
Aktifkan BigQuery Migration API yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan terjemahan SQL.
Izin yang diperlukan
Untuk mendapatkan izin yang
Anda perlukan untuk membuat tugas terjemahan dengan penerjemah interaktor, Translation API, atau penerjemah SQL batch,
minta administrator Anda untuk memberi Anda
peran IAM berikut pada resource parent:
-
Melihat dan memantau tugas migrasi:
Pelihat MigrationWorkflow (
roles/bigquerymigration.viewer) -
Mengirimkan tugas migrasi:
MigrationWorkflow Editor (
roles/bigquerymigration.editor) -
Akses bucket dan file Cloud Storage untuk input:
Storage Object Admin (
roles/storage.objectAdmin) - di bucket Cloud Storage sumber dan tujuan.
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk membuat tugas terjemahan dengan penerjemah interaktor, Translation API, atau penerjemah SQL batch. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk membuat tugas terjemahan dengan penerjemah interaktif, Translation API, atau penerjemah SQL batch:
-
bigquerymigration.workflows.create -
bigquerymigration.workflows.get -
bigquerymigration.workflows.list -
bigquerymigration.workflows.delete -
bigquerymigration.subtasks.get -
bigquerymigration.subtasks.list -
storage.objects.get -
storage.objects.list -
storage.objects.create
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Mengupload file input ke Cloud Storage
Untuk tugas terjemahan batch, Anda harus mengupload file sumber yang berisi kueri dan skrip yang ingin diterjemahkan ke Cloud Storage. Anda juga dapat mengupload file metadata apa pun atau file YAML konfigurasi ke bucket Cloud Storage yang sama yang berisi file sumber.
Untuk mengetahui informasi selengkapnya tentang membuat bucket dan mengupload file ke Cloud Storage, lihat Membuat bucket dan Mengupload objek dari sistem file.
Fungsi SQL yang tidak didukung
Jika kueri sumber Anda mereferensikan fungsi SQL yang tidak memiliki padanan langsung di GoogleSQL, Anda dapat menggunakan fungsi yang ditentukan pengguna (UDF) pembantu. Untuk mengetahui informasi selengkapnya, lihat Menangani fungsi SQL yang tidak didukung dengan UDF pembantu.
Mengirim tugas terjemahan
Untuk mengirimkan tugas terjemahan menggunakan BigQuery Migration API, gunakan metode projects.locations.workflows.create dan berikan instance resource MigrationWorkflow dengan jenis tugas yang didukung.
Setelah mengirimkan tugas, Anda dapat melakukan polling untuk status tugas.
Membuat terjemahan batch
Perintah curl berikut membuat tugas terjemahan batch dengan file input
dan output disimpan di Cloud Storage. Kolom source_target_mapping
berisi daftar yang memetakan direktori sumber ke jalur relatif opsional
untuk output target.
curl -d "{
\"tasks\": {
string: {
\"type\": \"TYPE\",
\"translation_details\": {
\"target_base_uri\": \"TARGET_BASE\",
\"source_target_mapping\": {
\"source_spec\": {
\"base_uri\": \"BASE\"
}
},
\"target_types\": \"TARGET_TYPES\",
}
}
}
}" \
-H "Content-Type:application/json" \
-H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/workflows
Ganti kode berikut:
TYPE: jenis tugas terjemahan, yang menentukan dialek sumber dan target.TARGET_BASE: URI dasar untuk semua output terjemahan.BASE: URI dasar untuk semua file yang dibaca sebagai sumber untuk terjemahan.TARGET_TYPES(opsional): jenis output yang dihasilkan. Jika tidak ditentukan, SQL akan dibuat.sql(default): File kueri SQL yang diterjemahkan.suggestion: Saran yang dibuat AI.
Output disimpan dalam subfolder di direktori output. Subfolder diberi nama berdasarkan nilai di
TARGET_TYPES.TOKEN: token untuk autentikasi. Untuk membuat token, gunakan perintahgcloud auth print-access-tokenatau OAuth 2.0 playground (gunakan cakupanhttps://www.googleapis.com/auth/cloud-platform).PROJECT_ID: project untuk memproses terjemahan.LOCATION: lokasi tempat tugas diproses.
Perintah di atas menampilkan respons yang menyertakan ID alur kerja yang ditulis dalam format projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_ID.
Contoh terjemahan batch
Untuk menerjemahkan skrip SQL Teradata di direktori Cloud Storage
gs://my_data_bucket/teradata/input/ dan menyimpan hasilnya di
direktori Cloud Storage gs://my_data_bucket/teradata/output/, Anda dapat menggunakan
kueri berikut:
{
"tasks": {
"task_name": {
"type": "Teradata2BigQuery_Translation",
"translation_details": {
"target_base_uri": "gs://my_data_bucket/teradata/output/",
"source_target_mapping": {
"source_spec": {
"base_uri": "gs://my_data_bucket/teradata/input/"
}
},
}
}
}
}
Panggilan ini akan menampilkan pesan yang berisi ID alur kerja yang dibuat di kolom
"name":
{
"name": "projects/123456789/locations/us/workflows/12345678-9abc-def1-2345-6789abcdef00",
"tasks": {
"task_name": { /*...*/ }
},
"state": "RUNNING"
}
Untuk mendapatkan status alur kerja yang diperbarui, jalankan kueri GET.
Tugas mengirimkan output ke Cloud Storage saat berjalan. Tugas state
berubah menjadi COMPLETED setelah semua target_types yang diminta dibuat.
Jika tugas berhasil, Anda dapat menemukan kueri SQL yang diterjemahkan di
gs://my_data_bucket/teradata/output.
Contoh terjemahan batch dengan saran AI
Contoh berikut menerjemahkan skrip Teradata SQL yang ada di direktori Cloud Storage gs://my_data_bucket/teradata/input/ dan menyimpan hasilnya di direktori Cloud Storage gs://my_data_bucket/teradata/output/ dengan saran AI tambahan:
{
"tasks": {
"task_name": {
"type": "Teradata2BigQuery_Translation",
"translation_details": {
"target_base_uri": "gs://my_data_bucket/teradata/output/",
"source_target_mapping": {
"source_spec": {
"base_uri": "gs://my_data_bucket/teradata/input/"
}
},
"target_types": "suggestion",
}
}
}
}
Setelah tugas berhasil dijalankan, saran AI dapat ditemukan di direktori Cloud Storage gs://my_data_bucket/teradata/output/suggestion.
Membuat terjemahan interaktif
Perintah curl berikut membuat tugas terjemahan interaktif dengan input dan output literal string. Kolom source_target_mapping berisi daftar
yang memetakan entri literal sumber ke jalur relatif opsional untuk
output target.
curl -d "{
\"tasks\": {
string: {
\"type\": \"TYPE\",
\"translation_details\": {
\"source_target_mapping\": {
\"source_spec\": {
\"literal\": {
\"relative_path\": \"PATH\",
\"literal_string\": \"STRING\"
}
}
},
\"target_return_literals\": \"TARGETS\",
}
}
}
}" \
-H "Content-Type:application/json" \
-H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/workflows
Ganti kode berikut:
TYPE: jenis tugas terjemahan, yang menentukan dialek sumber dan target.PATH: ID entri literal, mirip dengan nama file atau jalur.STRING: string data input literal (misalnya, SQL) yang akan diterjemahkan.TARGETS: target yang diharapkan yang ingin ditampilkan langsung oleh pengguna dalam respons dalam formatliteral. Nilai ini harus dalam format URI target (misalnya, GENERATED_DIR +target_spec.relative_path+source_spec.literal.relative_path). Apa pun yang tidak ada dalam daftar ini tidak akan ditampilkan dalam respons. Direktori yang dibuat, GENERATED_DIR untuk terjemahan SQL umum adalahsql/.TOKEN: token untuk autentikasi. Untuk membuat token, gunakan perintahgcloud auth print-access-tokenatau OAuth 2.0 playground (gunakan cakupanhttps://www.googleapis.com/auth/cloud-platform).PROJECT_ID: project untuk memproses terjemahan.LOCATION: lokasi tempat tugas diproses.
Perintah di atas menampilkan respons yang menyertakan ID alur kerja yang ditulis dalam format projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_ID.
Setelah alur kerja dibuat, lihat hasilnya dengan memeriksa status tugas.
Contoh terjemahan interaktif
Untuk menerjemahkan string SQL Apache Hive select 1 secara interaktif, Anda dapat menggunakan kueri berikut:
"tasks": {
string: {
"type": "HiveQL2BigQuery_Translation",
"translation_details": {
"source_target_mapping": {
"source_spec": {
"literal": {
"relative_path": "input_file",
"literal_string": "select 1"
}
}
},
"target_return_literals": "sql/input_file",
}
}
}
Anda dapat menggunakan relative_path apa pun yang Anda inginkan untuk literal, tetapi literal yang diterjemahkan hanya akan muncul dalam hasil jika Anda menyertakan sql/$relative_path dalam target_return_literals. Anda juga dapat menyertakan beberapa literal dalam satu kueri, yang dalam hal ini setiap jalur relatifnya harus disertakan dalam target_return_literals.
Panggilan ini akan menampilkan pesan yang berisi ID alur kerja yang dibuat di kolom
"name":
{
"name": "projects/123456789/locations/us/workflows/12345678-9abc-def1-2345-6789abcdef00",
"tasks": {
"task_name": { /*...*/ }
},
"state": "RUNNING"
}
Untuk mendapatkan status alur kerja yang diperbarui, periksa status tugas.
Tugas selesai saat "state" berubah menjadi COMPLETED. Jika tugas berhasil,
Anda akan menemukan SQL yang diterjemahkan dalam pesan respons:
{
"name": "projects/123456789/locations/us/workflows/12345678-9abc-def1-2345-6789abcdef00",
"tasks": {
"string": {
"id": "0fedba98-7654-3210-1234-56789abcdef",
"type": "HiveQL2BigQuery_Translation",
/* ... */
"taskResult": {
"translationTaskResult": {
"translatedLiterals": [
{
"relativePath": "sql/input_file",
"literalString": "-- Translation time: 2023-10-05T21:50:49.885839Z\n-- Translation job ID: projects/123456789/locations/us/workflows/12345678-9abc-def1-2345-6789abcdef00\n-- Source: input_file\n-- Translated from: Hive\n-- Translated to: BigQuery\n\nSELECT\n 1\n;\n"
}
],
"reportLogMessages": [
...
]
}
},
/* ... */
}
},
"state": "COMPLETED",
"createTime": "2023-10-05T21:50:49.543221Z",
"lastUpdateTime": "2023-10-05T21:50:50.462758Z"
}
Memeriksa status tugas
Tugas terjemahan berjalan secara asinkron. Setelah mengirimkan alur kerja, ambil
statusnya dengan mengirimkan permintaan GET dengan ID alur kerja:
curl \ -H "Content-Type:application/json" \ -H "Authorization:Bearer TOKEN" \ -X GET https://bigquerymigration.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_ID
Ganti kode berikut:
TOKEN: token untuk autentikasi. Untuk membuat token, gunakan perintahgcloud auth print-access-tokenatau OAuth 2.0 playground (gunakan cakupanhttps://www.googleapis.com/auth/cloud-platform).PROJECT_ID: project yang menjalankan tugas terjemahan.LOCATION: lokasi tempat tugas diproses.WORKFLOW_ID: ID alur kerja yang ditampilkan saat Anda membuat alur kerja terjemahan.
Status alur kerja
Respons mencakup kolom state yang menunjukkan status alur kerja saat ini:
STATE_UNSPECIFIED: Status alur kerja tidak ditentukan.RUNNING: Alur kerja sedang berjalan aktif. Polling endpoint secara berkala hingga status berubah.PAUSED: Alur kerja dijeda.COMPLETED: Alur kerja berhasil diselesaikan. Anda kini dapat mengambil hasilnya.FAILED: Alur kerja mengalami error. Periksa kolomtaskResultdanreportLogMessagesdalam respons untuk mengetahui detail error.
Saat alur kerja state mencapai COMPLETED atau FAILED, Anda dapat menghentikan polling.
Mengambil hasil
Cara Anda mengambil hasil bergantung pada apakah Anda mengirimkan terjemahan batch atau terjemahan interaktif:
Terjemahan batch: File yang diterjemahkan, laporan ringkasan, dan saran AI apa pun ditulis ke direktori tujuan Cloud Storage yang Anda tentukan di
target_base_uri. Anda dapat membaca file ini secara langsung dari Cloud Storage menggunakan perintah penyimpanan gcloud CLI, library klien Cloud Storage, atau REST API:gcloud storage cp --recursive TARGET_URI LOCAL_DIRECTORY
Ganti kode berikut:
TARGET_URI: URI dasar target Anda, sepertigs://my_data_bucket/teradata/output/.LOCAL_DIRECTORY: direktori lokal yang menerima file.
Untuk mengetahui detail file yang dihasilkan di bucket tujuan, lihat Menjelajahi output terjemahan.
Terjemahan interaktif: Untuk tugas yang dikonfigurasi dengan input literal string dan
target_return_literals, kueri yang diterjemahkan akan ditampilkan langsung dalam respons alur kerja di kolomtranslatedLiterals:"taskResult": { "translationTaskResult": { "translatedLiterals": [ { "relativePath": "sql/input_file", "literalString": "SELECT 1;\n" } ] } }Ekstrak kolom
literalStringuntuk setiap entri ditranslatedLiteralsuntuk mendapatkan kueri yang diterjemahkan.