Memetakan nama objek SQL untuk terjemahan batch

Dokumen ini menjelaskan cara mengonfigurasi pemetaan nama untuk mengganti nama objek SQL selama penerjemahan batch.

Ringkasan

Dengan pemetaan nama, Anda dapat mengidentifikasi nama objek SQL dalam file sumber, dan menentukan nama target untuk objek tersebut di BigQuery. Anda dapat menggunakan beberapa atau semua komponen berikut untuk mengonfigurasi pemetaan nama untuk objek:

  • Aturan pemetaan nama, yang terdiri dari:
    • Bagian nama sumber yang memberikan nama objek yang sepenuhnya memenuhi syarat dalam sistem sumber.
    • Jenis yang menunjukkan jenis objek sumber.
    • Bagian nama target yang memberikan nama objek di BigQuery.
  • Nama database default yang akan digunakan dengan objek sumber apa pun yang tidak menentukannya.
  • Nama skema default yang akan digunakan dengan objek sumber apa pun yang tidak menentukannya.

Bagian nama

Anda memberikan nilai untuk nama sumber dan objek target dalam aturan pemetaan nama menggunakan kombinasi bagian nama berikut:

  • Database: Tingkat teratas hierarki penamaan. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya project.
  • Skema: Tingkat kedua hierarki penamaan. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya set data.
  • Hubungan: Tingkat ketiga hierarki penamaan. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya tabel.
  • Atribut: Tingkat terendah hierarki penamaan. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya kolom.

Jenis objek

Anda juga harus menentukan jenis objek sumber yang namanya Anda ganti dalam aturan pemetaan nama. Jenis-jenis objek berikut ini didukung:

  • Database: Objek tingkat teratas dalam hierarki objek, misalnya database.schema.relation.attribute. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya project. Menentukan database sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL dan DML.
  • Schema: Objek tingkat kedua dalam hierarki objek. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya set data. Menentukan schema sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL dan DML.
  • Relation: Objek tingkat ketiga dalam hierarki objek. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya tabel. Menentukan relation sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL.
  • Relation alias: Alias untuk objek tingkat ketiga. Misalnya, dalam kueri SELECT t.field1, t.field2 FROM myTable t;, t adalah alias hubungan. Dalam kueri SELECT field1, field2 FROM schema1.table1, table1 juga merupakan alias hubungan. Menentukan relation alias sebagai jenis objek akan membuat alias untuk semua referensi ke string sumber dalam pernyataan DML. Misalnya, jika tableA ditentukan sebagai nama target, contoh sebelumnya akan diterjemahkan sebagai SELECT tableA.field1, tableA.field2 FROM myTable AS tableA; dan SELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA.
  • Function: Prosedur, misalnya create procedure db.test.function1(a int). Menentukan function sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL dan DML.
  • Attribute: Objek tingkat keempat dalam hierarki objek. Platform sumber Anda mungkin menggunakan istilah alternatif untuk hal ini, misalnya kolom. Menentukan attribute sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL.
  • Attribute alias: Alias untuk objek tingkat keempat. Misalnya, dalam kueri SELECT field1 FROM myTable;, field1 adalah alias atribut. Menentukan attribute alias sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DML.

Bagian nama yang diperlukan untuk jenis objek

Untuk mendeskripsikan objek dalam aturan pemetaan nama, gunakan bagian nama yang diidentifikasi untuk setiap jenis objek dalam tabel berikut:

Jenis Nama objek sumber Nama objek target
Bagian nama database Bagian nama skema Bagian nama hubungan Bagian nama atribut Bagian nama database Bagian nama skema Bagian nama hubungan Bagian nama atribut
Database X X
Schema X X X X
Relation X X X X X X
Function X X X X X X
Attribute X X X X X
Attribute alias X X X X X
Relation alias X X

Database bawaan

Jika ingin menambahkan nama project BigQuery ke semua objek yang diterjemahkan, hal termudah untuk dilakukan adalah menentukan nama database default saat membuat tugas terjemahan. Hal ini berfungsi untuk file sumber yang menggunakan penamaan tiga bagian, atau yang menggunakan penamaan empat bagian, tetapi nama objek tingkat tertinggi tidak ditentukan.

Misalnya, jika Anda menentukan nama database default myproject, pernyataan sumber seperti SELECT * FROM database.table akan diterjemahkan menjadi SELECT * FROM myproject.database.table. Jika Anda memiliki objek yang sudah menggunakan bagian nama database, seperti SELECT * FROM database.schema.table, Anda harus menggunakan aturan pemetaan nama untuk mengganti nama database.schema.table menjadi myproject.schema.table.

Skema default

Jika ingin sepenuhnya memenuhi syarat semua nama objek dalam file sumber yang tidak menggunakan penamaan empat bagian, Anda dapat memberikan nama database default dan nama skema default saat Anda membuat tugas terjemahan. Nama skema default diberikan sebagai nama skema pertama dalam opsi jalur penelusuran skema.

Misalnya, jika Anda menentukan nama database default myproject dan nama skema default myschema, pernyataan sumber berikut:

  • SELECT * FROM database.table
  • SELECT * FROM table1

Diterjemahkan ke:

  • SELECT * FROM myproject.database.table.
  • SELECT * FROM myproject.myschema.table1

Perilaku aturan pemetaan nama

Bagian berikut menjelaskan perilaku aturan pemetaan nama.

Pewarisan aturan mengalir ke bawah hierarki objek

Perubahan nama yang memengaruhi objek yang lebih tinggi akan memengaruhi objek target, dan juga semua objek turunannya dalam hierarki yang sama.

Misalnya, jika Anda menentukan aturan pemetaan nama berikut dengan jenis objek schema:

Bagian nama Sumber Target
Database sales_db sales
Skema cust_mgmt cms
Hubungan
Atribut

Saat diterapkan, bagian nama database dan skema dari semua objek relation dan attribute pada skema sales_db.cust_mgmt juga akan diubah. Misalnya, objek relation bernama sales_db.cust_mgmt.history menjadi sales.cms.history.

Sebaliknya, perubahan nama yang menargetkan objek tingkat lebih rendah tidak memengaruhi objek yang tingkatnya lebih tinggi atau sama dalam hierarki objek.

Misalnya, jika Anda menentukan aturan pemetaan nama berikut dengan jenis objek relation:

Bagian nama Sumber Target
Database sales_db sales
Skema cust_mgmt cms
Hubungan clients accounts
Atribut

Saat diterapkan, tidak ada objek lain di level sales_db atau sales_db.cust_mgmt dalam hierarki objek yang namanya berubah.

Aturan paling spesifik akan diterapkan

Hanya satu aturan pemetaan nama yang akan diterapkan ke sebuah objek. Jika beberapa aturan dapat memengaruhi satu objek, aturan yang memengaruhi bagian nama level terendah akan diterapkan. Misalnya, jika aturan pemetaan nama jenis database dan aturan pemetaan nama jenis schema dapat memengaruhi nama objek relation, aturan pemetaan nama jenis schema akan diterapkan.

Menggunakan kombinasi unik jenis dan nilai sumber

Anda tidak dapat menentukan lebih dari satu aturan pemetaan nama dengan jenis dan nilai sumber yang sama. Misalnya, Anda tidak dapat menentukan kedua aturan pemetaan nama berikut:

Aturan 1, jenis attribute Aturan 2, jenis attribute
Bagian nama Sumber Target Sumber Target
Database project project
Skema dataset1 dataset1
Hubungan table1 table1
Atribut lname last_name lname lastname

Membuat aturan pemetaan nama attribute dan attribute alias yang cocok

Saat menggunakan aturan pemetaan nama jenis attribute untuk mengubah nama atribut dalam pernyataan DDL, Anda juga harus membuat aturan pemetaan nama attribute alias untuk mengubah nama atribut tersebut dalam pernyataan DML.

Perubahan nama tidak bersifat menurun

Perubahan nama tidak bersifat menurun di seluruh aturan nama. Misalnya, jika Anda membuat aturan pemetaan nama yang mengganti nama database1 menjadi project1, dan aturan lain yang mengganti nama project1 menjadi project2, penerjemah tidak akan memetakan database1 menjadi project2.

Menangani objek sumber yang tidak memiliki nama empat bagian

Beberapa sistem sumber, seperti Teradata, menggunakan tiga bagian nama untuk sepenuhnya memenuhi syarat nama objek. Banyak sistem sumber yang juga memungkinkan Anda menggunakan nama yang memenuhi syarat sebagian dalam dialek SQL-nya, misalnya menggunakan database1.schema1.table1, schema1.table1, dan table1 untuk merujuk ke objek yang sama di konteks yang berbeda. Jika file sumber berisi objek yang tidak menggunakan nama objek empat bagian, Anda dapat menggunakan pemetaan nama yang dikombinasikan dengan menetapkan nama database default dan nama skema default untuk mendapatkan pemetaan nama yang Anda inginkan.

Untuk contoh penggunaan aturan pemetaan nama dengan nama database default atau nama skema default, lihat Mengubah bagian nama database untuk objek dengan berbagai tingkat pelengkapan nama dan Mengubah nama objek hubungan yang memenuhi syarat sebagian.

Contoh pemetaan nama

Gunakan contoh di bagian ini untuk melihat cara kerja aturan pemetaan nama untuk kasus penggunaan umum.

Mengubah bagian nama database untuk objek yang sepenuhnya memenuhi syarat

Contoh berikut mengganti nama bagian nama database dari td_project menjadi bq_project untuk semua objek database, schema, relation, dan function yang telah sepenuhnya nama-nama yang telah sepenuhnya memenuhi syarat.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database td_project bq_project
Skema
Hubungan
Atribut

Jenis

  • database

Contoh input

  • SELECT * FROM td_project.schema.table;
  • SELECT * FROM td_project.schema1.table1;

Contoh output

  • SELECT * FROM bq_project.schema.table;
  • SELECT * FROM bq_project.schema1.table1

Mengubah bagian nama database untuk objek dengan berbagai tingkat pelengkapan nama

Contoh berikut mengganti nama dari bagian nama database project menjadi bq_project untuk semua jenis objek, dan juga menambahkan bq_project sebagai bagian nama database untuk objek yang tidak menentukannya.

Untuk melakukannya, Anda harus menentukan nilai database default saat mengonfigurasi tugas terjemahan, selain menentukan aturan pemetaan nama. Untuk mengetahui informasi selengkapnya tentang cara menentukan nama database default, lihat Mengirimkan tugas terjemahan.

Nilai database default

  • project

Bagian nama sumber dan target

Bagian nama Sumber Target
Database project bq_project
Skema
Hubungan
Atribut

Jenis

  • database

Contoh input

  • SELECT * FROM project.schema.table;
  • SELECT * FROM schema1.table1;

Contoh output

  • SELECT * FROM bq_project.schema.table;
  • SELECT * FROM bq_project.schema1.table1

Mengubah bagian nama database dan bagian nama skema untuk objek yang sepenuhnya memenuhi syarat

Contoh berikut mengubah bagian nama database warehouse1 menjadi myproject, dan juga mengubah bagian nama skema database1 menjadi mydataset.

Anda juga dapat mengubah bagian nama objek relation dengan cara yang sama, menggunakan jenis relation serta menentukan nilai sumber dan target untuk bagian nama hubungan.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database warehouse1 myproject
Skema database1 mydataset
Hubungan
Atribut

Jenis

  • schema

Contoh input

  • SELECT * FROM warehouse1.database1.table1;
  • SELECT * FROM database2.table2;

Contoh output

  • SELECT * FROM myproject.mydataset.table1;
  • SELECT * FROM __DEFAULT_DATABASE__.database2.table2;

Mengubah nama objek relation yang sepenuhnya memenuhi syarat

Contoh berikut mengganti nama mydb.myschema.mytable menjadi mydb.myschema.table1.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database mydb mydb
Skema myschema myschema
Hubungan mytable table1
Atribut

Jenis

  • relation

Contoh input

  • CREATE table mydb.myschema.mytable(id int, name varchar(64));

Contoh output

  • CREATE table mydb.myschema.table1(id integer, name string(64));

Mengubah nama objek relation yang memenuhi syarat sebagian

Contoh berikut mengganti nama myschema.mytable menjadi mydb.myschema.table1.

Nilai database default

  • mydb

Bagian nama sumber dan target

Bagian nama Sumber Target
Database mydb mydb
Skema myschema myschema
Hubungan mytable table1
Atribut

Jenis

  • relation

Contoh input

  • CREATE table myschema.mytable(id int, name varchar(64));

Contoh output

  • CREATE table mydb.myschema.table1(id integer, name string(64));

Mengubah nama objek relation alias

Contoh berikut mengganti nama semua instance objek relation alias table menjadi t.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database
Skema
Hubungan table t
Atribut

Jenis

  • relation alias

Contoh input

  • SELECT table.id, table.name FROM mydb.myschema.mytable table

Contoh output

  • SELECT t.id, t.name FROM mydb.myschema.mytable AS t

Mengubah nama objek function

Contoh berikut mengganti nama mydb.myschema.myfunction menjadi mydb.myschema.function1.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database mydb mydb
Skema myschema myschema
Hubungan myprocedure procedure1
Atribut

Jenis

  • function

Contoh input

  • CREATE PROCEDURE mydb.myschema.myprocedure(a int) BEGIN declare i int; SET i = a + 1; END;
  • CALL mydb.myschema.myprocedure(7)

Contoh output

  • CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;
  • CALL mydb.myschema.procedure1(7);

Mengubah nama objek attribute

Contoh berikut mengganti nama mydb.myschema.mytable.myfield menjadi mydb.myschema.mytable.field1. Karena objek attribute berada di tingkat terendah dalam hierarki objek, pemetaan nama ini tidak mengubah nama objek lainnya.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database mydb
Skema myschema
Hubungan mytable
Atribut myfield field1

Jenis

  • attribute

Contoh input

  • CREATE table mydb.myschema.mytable(myfield int, name varchar(64), revenue int);

Contoh output

  • CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);

Mengubah nama objek attribute alias

Contoh berikut mengganti nama mydb.myschema.mytable.myfield menjadi mydb.myschema.mytable.field1. Karena objek attribute alias berada di tingkat terendah hierarki objek, pemetaan nama ini tidak mengubah nama objek lainnya.

Bagian nama sumber dan target

Bagian nama Sumber Target
Database mydb
Skema myschema
Hubungan mytable
Atribut myfield field1

Jenis

  • attribute alias

Contoh input

  • SELECT myfield, name FROM mydb.myschema.mytable;

Contoh output

  • SELECT field1, name FROM mydb.myschema.mytable;

Format file JSON

Jika Anda memilih untuk menentukan aturan pemetaan nama dengan menggunakan file JSON, bukan konsol Google Cloud, file JSON harus mengikuti format berikut:

{
  "name_map": [
    {
      "source": {
        "type": "string",
        "database": "string",
        "schema": "string",
        "relation": "string",
        "attribute": "string"
      },
      "target": {
        "database": "string",
        "schema": "string",
        "relation": "string",
        "attribute": "string"
      }
    }
  ]
}

Ukuran file tidak boleh lebih dari 5 MB.

Untuk mengetahui informasi selengkapnya tentang cara menentukan aturan pemetaan nama untuk tugas terjemahan, lihat Mengirimkan tugas terjemahan.

Contoh JSON

Contoh berikut menunjukkan cara menentukan aturan pemetaan nama dengan menggunakan file JSON.

Contoh 1

Aturan pemetaan nama dalam contoh ini membuat perubahan nama objek berikut:

  • Ganti nama instance project.dataset2.table2 objek relation menjadi bq_project.bq_dataset2.bq_table2.
  • Mengganti nama semua instance project objek database menjadi bq_project. Misalnya, project.mydataset.table2 menjadi bq_project.mydataset.table2, dan CREATE DATASET project.mydataset menjadi CREATE DATASET bq_project.mydataset.
{
  "name_map": [{
    "source": {
      "type": "RELATION",
      "database": "project",
      "schema": "dataset2",
      "relation": "table2"
    },
    "target": {
      "database": "bq_project",
      "schema": "bq_dataset2",
      "relation": "bq_table2"
    }
  }, {
    "source": {
      "type": "DATABASE",
      "database": "project"
    },
    "target": {
      "database": "bq_project"
    }
  }]
}

Contoh 2

Aturan pemetaan nama dalam contoh ini membuat perubahan nama objek berikut:

  • Mengganti nama instance project.dataset2.table2.field1 objek attribute menjadi bq_project.bq_dataset2.bq_table2.bq_field dalam pernyataan DDL dan DML.
{
  "name_map": [{
    "source": {
      "type": "ATTRIBUTE",
      "database": "project",
      "schema": "dataset2",
      "relation": "table2",
      "attribute": "field1"
    },
    "target": {
      "database": "bq_project",
      "schema": "bq_dataset2",
      "relation": "bq_table2",
      "attribute": "bq_field"
    }
  }, {
    "source": {
      "type": "ATTRIBUTE_ALIAS",
      "database": "project",
      "schema": "dataset2",
      "relation": "table2",
      "attribute": "field1"
    },
    "target": {
      "database": "bq_project",
      "schema": "bq_dataset2",
      "relation": "bq_table2",
      "attribute": "bq_field"
    }
  }]
}