Mappa i nomi degli oggetti SQL per la traduzione batch
Questo documento descrive come configurare la mappatura dei nomi per rinominare SQL durante la traslazione batch.
Panoramica
La mappatura dei nomi consente di identificare i nomi degli oggetti SQL file di origine e specifica i nomi di destinazione per tali oggetti in in BigQuery. Puoi utilizzare alcuni dei seguenti componenti o tutti per configurare la mappatura dei nomi per un oggetto:
- Una regola di mappatura dei nomi, composta da:
- Le parti del nome di origine che forniscono il nome completo di l'oggetto nel sistema di origine.
- Un tipo che identifica il tipo dell'oggetto di origine.
- Parti del nome della destinazione che forniscono il nome dell'oggetto in BigQuery.
- Un nome di database predefinito da utilizzare con qualsiasi oggetto di origine che non ne specificano uno.
- Un nome di schema predefinito da utilizzare con qualsiasi oggetto di origine che non ne specificano uno.
Assegna un nome alle parti
Devi fornire i valori per i nomi degli oggetti di origine e di destinazione in una mappatura dei nomi utilizzando una combinazione delle seguenti parti del nome:
- Database: il livello superiore della gerarchia di denominazione. La tua piattaforma di origine potrebbe utilizzare un termine alternativo, ad esempio progetto.
- Schema: il secondo livello della gerarchia di denominazione. La tua piattaforma di origine potrebbe utilizzare un termine alternativo, ad esempio set di dati.
- Relazione: il terzo livello della gerarchia di denominazione. La tua piattaforma di origine potrebbe utilizzare un termine alternativo, ad esempio tabella.
- Attributo: il livello più basso della gerarchia di denominazione. La tua piattaforma di origine potrebbe utilizzare un termine alternativo, ad esempio colonna.
Tipi di oggetti
Devi inoltre specificare il tipo di oggetto di origine che rinomini in un una regola di mappatura dei nomi. Sono supportati i seguenti tipi di oggetti:
Database
: un oggetto di primo livello nella gerarchia degli oggetti, ad esempiodatabase
.schema.relation.attribute
La tua piattaforma di origine potrebbe utilizzare un termine alternativo, ad esempio progetto. Specificaredatabase
quando il tipo di oggetto modifica tutti i riferimenti alla stringa di origine in le istruzioni DDL e DML.Schema
: un oggetto di secondo livello nella gerarchia degli oggetti. La tua fonte piattaforma potrebbe utilizzare un termine alternativo, ad esempio set di dati. Se specifichischema
come tipo di oggetto, tutti i riferimenti all'origine vengono modificati nelle istruzioni DDL e DML.Relation
: un oggetto di terzo livello nella gerarchia degli oggetti. La tua fonte piattaforma potrebbe utilizzare un termine alternativo, ad esempio tabella. Se specifichirelation
come tipo di oggetto, vengono modificati tutti i riferimenti al stringa di origine nelle istruzioni DDL.Relation alias
: alias di un oggetto di terzo livello. Ad esempio, nel querySELECT t.field1, t.field2 FROM myTable t;
,t
è un alias di relazione. Nella querySELECT field1, field2 FROM schema1.table1
, anchetable1
è un alias di relazione. Se specifichirelation alias
come tipo di oggetto, vengono creati alias per tutti riferimenti alla stringa di origine nelle istruzioni DML. Ad esempio, setableA
è specificato come nome della destinazione, gli esempi precedenti sono tradotto comeSELECT tableA.field1, tableA.field2 FROM myTable AS tableA;
eSELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA
, rispettivamente.Function
: una procedura, ad esempiocreate procedure db.test.function1(a int)
. Specificafunction
come modifica tutti i riferimenti alla stringa di origine nei file DDL e DML.Attribute
: un oggetto di quarto livello nella gerarchia degli oggetti. La tua fonte piattaforma potrebbe utilizzare un termine alternativo per farlo, ad esempio colonna. Se specifichiattribute
come tipo di oggetto, vengono modificati tutti i riferimenti al stringa di origine nelle istruzioni DDL.Attribute alias
: alias di un oggetto di quarto livello. Ad esempio, nel querySELECT field1 FROM myTable;
,field1
è un attributo alias. Se specifichiattribute alias
come tipo di oggetto, tutti i riferimenti vengono modificati alla stringa di origine nelle istruzioni DML.
Parti nome obbligatorie per i tipi di oggetto
Per descrivere un oggetto in una regola di mappatura dei nomi, utilizza le parti del nome identificate per ogni tipo di oggetto nella seguente tabella:
Tipo | Nome oggetto di origine | Nome oggetto di destinazione | ||||||
---|---|---|---|---|---|---|---|---|
Parte del nome del database | Parte del nome dello schema | Parte del nome della relazione | Parte nome attributo | Parte del nome del database | Parte del nome dello schema | Parte del nome della relazione | Parte nome attributo | |
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 predefinito
Se vuoi aggiungere un nome di progetto BigQuery a tutte le traduzioni di oggetti, la cosa più semplice è specificare un nome predefinito del database quando tu crea un job di traduzione. Questa operazione funziona per i file sorgente in cui la denominazione in tre parti, o dove viene utilizzata la denominazione in quattro parti, ma quella più il nome dell'oggetto level non è specificato.
Ad esempio, se specifichi il nome predefinito del database myproject
, allora un valore
un'istruzione di origine come SELECT * FROM database.table
è tradotta in
SELECT * FROM myproject.database.table
. Se disponi di oggetti che utilizzano già un oggetto
del nome del database, come SELECT * FROM database.schema.table
, allora c'è
per utilizzare una regola di mappatura dei nomi per rinominare database.schema.table
in
myproject.schema.table
.
Schema predefinito
Se vuoi qualificare completamente tutti i nomi degli oggetti nei file di origine che non utilizzare la denominazione in quattro parti, puoi fornire sia una nome database predefinito e un nome schema predefinito quando tu crea un job di traduzione. Il nome dello schema predefinito è fornito come primo nome dello schema del percorso di ricerca.
Ad esempio, se specifichi il nome predefinito del database myproject
e
nome schema predefinito myschema
, seguito dalle seguenti istruzioni di origine:
SELECT * FROM database.table
SELECT * FROM table1
Sono tradotti in:
SELECT * FROM myproject.database.table
.SELECT * FROM myproject.myschema.table1
Comportamento della regola di mappatura dei nomi
Le seguenti sezioni descrivono il comportamento delle regole di mappatura dei nomi.
L'ereditarietà delle regole scorre verso il basso nella gerarchia degli oggetti
Una modifica del nome che interessa un oggetto di livello superiore influisce sull'oggetto target, mentre anche tutti i relativi oggetti figlio nella stessa gerarchia.
Ad esempio, se specifichi la seguente regola di mappatura dei nomi con un oggetto
tipo di schema
:
Nome della parte | Origine | Destinazione |
---|---|---|
Database | sales_db |
sales |
Schema | cust_mgmt |
cms |
Relazione | ||
Attributo |
Quando viene applicato, il database e lo schema assegnano un nome alle parti di tutti gli elementi relation
e
Vengono modificati anche attribute
oggetti nello schema sales_db.cust_mgmt
. Per
un'istanza, un oggetto relation
denominato sales_db.cust_mgmt.history
diventa
sales.cms.history
.
Al contrario, le modifiche ai nomi che interessano gli oggetti di livello inferiore non influiscono di oggetti di livello superiore o uguale nella gerarchia degli oggetti.
Ad esempio, se specifichi la seguente regola di mappatura dei nomi con un oggetto
tipo di relation
:
Nome della parte | Origine | Destinazione |
---|---|---|
Database | sales_db |
sales |
Schema | cust_mgmt |
cms |
Relazione | clients |
accounts |
Attributo |
Una volta applicato, nessun altro oggetto in sales_db
o sales_db.cust_mgmt
livello della gerarchia degli oggetti viene modificato.
Viene applicata la regola più specifica
A un oggetto viene applicata una sola regola di mappatura dei nomi. Se più regole potessero
interessa un singolo oggetto, la regola che influisce sulla parte del nome di livello più basso.
. Ad esempio, se una regola di mappatura dei nomi di tipo database
e un schema
la regola di mappatura dei nomi dei tipi può influire sul nome di un oggetto relation
,
È stata applicata la regola di mappatura dei nomi dei tipi schema
.
Utilizza una combinazione univoca di valori di tipo e origine
Non puoi specificare più di una regola di mappatura dei nomi con lo stesso tipo e origine e i relativi valori. Ad esempio, non puoi specificare entrambe le seguenti regole di mappatura dei nomi:
Regola 1, digita attribute |
Regola 2, digita attribute |
|||
---|---|---|---|---|
Nome della parte | Origine | Destinazione | Origine | Destinazione |
Database | project |
project |
||
Schema | dataset1 |
dataset1 |
||
Relazione | table1 |
table1 |
||
Attributo | lname |
last_name |
lname |
lastname |
Crea regole di mappatura dei nomi attribute
e attribute alias
corrispondenti
Quando utilizzi una regola di mappatura del nome del tipo attribute
per modificare il nome di un attributo
nelle istruzioni DDL, devi creare una regola di mappatura dei nomi attribute alias
per
modificare il nome di quell'attributo anche nelle istruzioni DML.
Le modifiche ai nomi non vengono applicate a cascata
Le modifiche ai nomi non vengono applicate a cascata tra le regole dei nomi.
Ad esempio, se hai creato una regola di mappatura dei nomi che rinomina database1
in
project1
e un'altra che rinomina project1
in project2
, il traduttore
non mappa database1
a project2
.
Gestire gli oggetti di origine che non hanno nomi in quattro parti
Alcuni sistemi di origine, come Teradata, utilizzano tre parti di nome per qualificare completamente l'oggetto
i nomi degli utenti. Molti sistemi di origine consentono anche di utilizzare nomi parzialmente qualificati
i relativi dialetti SQL,
ad esempio utilizzando database1.schema1.table1
, schema1.table1
e table1
per fare riferimento allo stesso oggetto in contesti diversi. Se i file di origine contengono
che non utilizzano nomi di oggetti suddivisi in quattro parti, puoi utilizzare la mappatura dei nomi
combinazione con la specifica di un nome predefinito del database
e un nome di schema predefinito per
la mappatura dei nomi desiderata.
Per esempi di utilizzo delle regole di mappatura dei nomi con un nome di database predefinito o un nome schema predefinito, consulta Modificare la parte del nome del database per gli oggetti con diversi livelli di completamento del nome e Modificare il nome di un oggetto relazione parzialmente qualificato.
Esempi di mappatura dei nomi
Utilizza gli esempi in questa sezione per scoprire come funzionano le regole di mappatura dei nomi per e casi d'uso specifici.
Modifica la parte del nome del database per gli oggetti completi
L'esempio seguente rinomina la parte del nome del database da td_project
a bq_project
per tutti i tipi di dati database
, schema
, relation
e function
che hanno nomi completi.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | td_project |
bq_project |
Schema | ||
Relazione | ||
Attributo |
Tipo
database
Input di esempio
SELECT * FROM td_project.schema.table;
SELECT * FROM td_project.schema1.table1;
Output di esempio
SELECT * FROM bq_project.schema.table;
SELECT * FROM bq_project.schema1.table1
Modificare la parte del nome del database per gli oggetti con diversi livelli di completamento del nome
L'esempio seguente rinomina la parte del nome del database project
in bq_project
per tutti i tipi di oggetti e aggiunge anche bq_project
come parte del nome del database
per gli oggetti che non ne
specificano uno.
Per farlo, devi specificare un valore predefinito del database quando configuri di traduzione automatica, oltre a specificare regole di mappatura dei nomi. Per maggiori informazioni informazioni su come specificare un nome di database predefinito, consulta Invia un job di traduzione.
Valore predefinito del database
project
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | project |
bq_project |
Schema | ||
Relazione | ||
Attributo |
Tipo
database
Input di esempio
SELECT * FROM project.schema.table;
SELECT * FROM schema1.table1;
Output di esempio
SELECT * FROM bq_project.schema.table;
SELECT * FROM bq_project.schema1.table1
Modifica la parte del nome del database e quella dello schema per gli oggetti completi
L'esempio seguente cambia la parte del nome del database warehouse1
in
myproject
e modifica anche la parte del nome dello schema database1
a mydataset
.
Puoi anche modificare le parti del nome di un oggetto relation
nella
allo stesso modo, utilizzando un tipo relation
e specificando origine e destinazione
per la parte del nome della relazione.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | warehouse1 |
myproject |
Schema | database1 |
mydataset |
Relazione | ||
Attributo |
Tipo
schema
Input di esempio
SELECT * FROM warehouse1.database1.table1;
SELECT * FROM database2.table2;
Output di esempio
SELECT * FROM myproject.mydataset.table1;
SELECT * FROM __DEFAULT_DATABASE__.database2.table2;
Modificare il nome completo di un oggetto relation
L'esempio seguente rinomina mydb.myschema.mytable
in
mydb.myschema.table1
.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | mydb |
mydb |
Schema | myschema |
myschema |
Relazione | mytable |
table1 |
Attributo |
Tipo
relation
Input di esempio
CREATE table mydb.myschema.mytable(id int, name varchar(64));
Output di esempio
CREATE table mydb.myschema.table1(id integer, name string(64));
Modificare il nome di un oggetto relation
parzialmente qualificato
L'esempio seguente rinomina myschema.mytable
in
mydb.myschema.table1
.
Valore predefinito del database
mydb
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | mydb |
mydb |
Schema | myschema |
myschema |
Relazione | mytable |
table1 |
Attributo |
Tipo
relation
Input di esempio
CREATE table myschema.mytable(id int, name varchar(64));
Output di esempio
CREATE table mydb.myschema.table1(id integer, name string(64));
Modifica il nome di un oggetto relation alias
L'esempio seguente rinomina tutte le istanze dell'oggetto relation alias
table
a t
.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | ||
Schema | ||
Relazione | table |
t |
Attributo |
Tipo
relation alias
Input di esempio
SELECT table.id, table.name FROM mydb.myschema.mytable table
Output di esempio
SELECT t.id, t.name FROM mydb.myschema.mytable AS t
Modifica il nome di un oggetto function
L'esempio seguente rinomina mydb.myschema.myfunction
in
mydb.myschema.function1
.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | mydb |
mydb |
Schema | myschema |
myschema |
Relazione | myprocedure |
procedure1 |
Attributo |
Tipo
function
Input di esempio
CREATE PROCEDURE mydb.myschema.myprocedure(a int) BEGIN declare i int; SET i = a + 1; END;
CALL mydb.myschema.myprocedure(7)
Output di esempio
CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;
CALL mydb.myschema.procedure1(7);
Modifica il nome di un oggetto attribute
L'esempio seguente rinomina mydb.myschema.mytable.myfield
in
mydb.myschema.mytable.field1
. Poiché attribute
oggetti sono al livello più basso
livello della gerarchia degli oggetti, questa mappatura dei nomi non cambia il nome
di qualsiasi altro oggetto.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | mydb |
|
Schema | myschema |
|
Relazione | mytable |
|
Attributo | myfield |
field1 |
Tipo
attribute
Input di esempio
CREATE table mydb.myschema.mytable(myfield int, name varchar(64), revenue int);
Output di esempio
CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);
Modifica il nome di un oggetto attribute alias
L'esempio seguente rinomina mydb.myschema.mytable.myfield
in
mydb.myschema.mytable.field1
. Poiché attribute alias
oggetti si trovano
livello più basso della gerarchia degli oggetti, questa mappatura dei nomi non modifica
di qualsiasi altro oggetto.
Parti dei nomi di origine e di destinazione
Nome della parte | Origine | Destinazione |
---|---|---|
Database | mydb |
|
Schema | myschema |
|
Relazione | mytable |
|
Attributo | myfield |
field1 |
Tipo
attribute alias
Input di esempio
SELECT myfield, name FROM mydb.myschema.mytable;
Output di esempio
SELECT field1, name FROM mydb.myschema.mytable;
Formato file JSON
Se scegli di specificare le regole di mappatura dei nomi utilizzando un file JSON anziché nella console Google Cloud, il file JSON deve essere nel seguente formato:
{
"name_map": [
{
"source": {
"type": "string",
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
},
"target": {
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
}
}
]
}
Le dimensioni del file devono essere inferiori a 5 MB.
Per ulteriori informazioni sulla specifica di regole di mappatura dei nomi per un job di traduzione, consulta Invia un job di traduzione.
Esempi JSON
Gli esempi seguenti mostrano come specificare le regole di mappatura dei nomi utilizzando JSON.
Esempio 1
Le regole di mappatura dei nomi in questo esempio apportano le seguenti modifiche ai nomi degli oggetti:
- Rinomina le istanze dell'oggetto
project.dataset2.table2
relation
inbq_project.bq_dataset2.bq_table2
. - Rinomina tutte le istanze dell'oggetto
project
database
inbq_project
. Per ad esempioproject.mydataset.table2
diventabq_project.mydataset.table2
, eCREATE DATASET project.mydataset
diventaCREATE 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"
}
}]
}
Esempio 2
Le regole di mappatura dei nomi in questo esempio apportano le seguenti modifiche ai nomi degli oggetti:
- Rinomina le istanze dell'oggetto
project.dataset2.table2.field1
attribute
inbq_project.bq_dataset2.bq_table2.bq_field
nelle istruzioni DDL e 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"
}
}]
}