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, misalnyadatabase
.schema.relation.attribute
. Platform sumber Anda mungkin menggunakan istilah alternatif untuk penyebutan ini, misalnya project. Menentukandatabase
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. Menentukanschema
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. Menentukanrelation
sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL.Relation alias
: Alias untuk objek tingkat ketiga. Misalnya, dalam kueriSELECT t.field1, t.field2 FROM myTable t;
,t
adalah alias hubungan. Dalam kueriSELECT field1, field2 FROM schema1.table1
,table1
juga merupakan alias hubungan. Menentukanrelation alias
sebagai jenis objek akan membuat alias untuk semua referensi ke string sumber dalam pernyataan DML. Misalnya, jikatableA
ditentukan sebagai nama target, contoh sebelumnya akan diterjemahkan sebagaiSELECT tableA.field1, tableA.field2 FROM myTable AS tableA;
danSELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA
.Function
: Prosedur, misalnyacreate procedure db.test.function1(a int)
. Menentukanfunction
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. Menentukanattribute
sebagai jenis objek akan mengubah semua referensi ke string sumber dalam pernyataan DDL.Attribute alias
: Alias untuk objek tingkat keempat. Misalnya, dalam kueriSELECT field1 FROM myTable;
,field1
adalah alias atribut. Menentukanattribute 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
objekrelation
menjadibq_project.bq_dataset2.bq_table2
. - Mengganti nama semua instance
project
objekdatabase
menjadibq_project
. Misalnya,project.mydataset.table2
menjadibq_project.mydataset.table2
, danCREATE DATASET project.mydataset
menjadiCREATE 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
objekattribute
menjadibq_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"
}
}]
}