SQL-Objektnamen für Batchübersetzungen zuordnen
In diesem Dokument wird beschrieben, wie Sie die Namenszuordnung konfigurieren, um SQL-Objekte während der Batchübersetzung umzubenennen.
Überblick
Mit der Namenszuordnung können Sie die Namen von SQL-Objekten in Ihren Quelldateien identifizieren und Zielnamen für diese Objekte in BigQuery angeben. Sie können einige oder alle der folgenden Komponenten verwenden, um die Namenszuordnung für ein Objekt zu konfigurieren:
- Eine Namenszuordnungsregel, die aus folgenden Elementen besteht:
- Quell-Namensteile, die den voll qualifizierten Namen des Objekts im Quellsystem angeben.
- Ein Typ, der den Typ des Quellobjekts identifiziert.
- Teile von Zielnamen, die den Namen des Objekts in BigQuery angeben.
- Ein Standarddatenbankname zur Verwendung mit allen Quellobjekten, die keine angeben.
- Ein Standardschemaname zur Verwendung mit allen Quellobjekten, die keines angeben.
Namensteile
Sie geben die Werte für die Quell- und Zielobjektnamen in einer Namenszuordnungsregel an, indem Sie eine Kombination der folgenden Namensteile verwenden:
- Datenbank: Die oberste Ebene der Namenshierarchie. Ihre Quellplattform kann einen alternativen Begriff dafür verwenden, z. B. Projekt.
- Schema: Die zweite Ebene der Namenshierarchie. Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Dataset.
- Beziehung: Die dritte Ebene der Benennungshierarchie. Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Tabelle.
- Attribut: Die unterste Ebene der Benennungshierarchie. Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Spalte.
Objekttypen
Sie müssen auch den Typ des Quellobjekts angeben, das Sie in einer Namenszuordnungsregel umbenennen möchten. Die folgenden Objekttypen werden unterstützt:
Database
: Ein Objekt der obersten Ebene in der Objekthierarchie, z. B.database
.schema.relation.attribute
. Ihre Quellplattform kann einen alternativen Begriff dafür verwenden, z. B. Projekt. Wenn Siedatabase
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DDL- und DML-Anweisungen geändert.Schema
: Ein Objekt der zweiten Ebene in der Objekthierarchie Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Dataset. Wenn Sieschema
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DDL- und DML-Anweisungen geändert.Relation
: Ein Objekt der dritten Ebene in der Objekthierarchie. Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Tabelle. Wenn Sierelation
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DDL-Anweisungen geändert.Relation alias
: Ein Alias für ein Objekt der dritten Ebene. In der AbfrageSELECT t.field1, t.field2 FROM myTable t;
ist beispielsweiset
ein Beziehungsalias. In der AbfrageSELECT field1, field2 FROM schema1.table1
isttable1
auch ein Beziehungsalias. Wenn Sierelation alias
als Objekttyp angeben, werden Aliasse für alle Verweise auf den Quellstring in DML-Anweisungen erstellt. Wenn beispielsweisetableA
als Zielname angegeben ist, werden die obigen Beispiele alsSELECT tableA.field1, tableA.field2 FROM myTable AS tableA;
bzw.SELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA
übersetzt.Function
: Ein Verfahren, z. B.create procedure db.test.function1(a int)
. Wenn Siefunction
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DDL- und DML-Anweisungen geändert.Attribute
: Ein Objekt der vierten Ebene in der Objekthierarchie. Ihre Quellplattform verwendet möglicherweise einen alternativen Begriff, z. B. Spalte. Wenn Sieattribute
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DDL-Anweisungen geändert.Attribute alias
: Ein Alias für ein Objekt der vierten Ebene. In der AbfrageSELECT field1 FROM myTable;
ist beispielsweisefield1
ein Attributalias. Wenn Sieattribute alias
als Objekttyp angeben, werden alle Verweise auf den Quellstring in DML-Anweisungen geändert.
Erforderliche Namensteile für Objekttypen
Verwenden Sie zum Beschreiben eines Objekts in einer Namenszuordnungsregel die Namensteile, die für jeden Objekttyp in der folgenden Tabelle identifiziert wurden:
Typ | Name des Quellobjekts | Name des Zielobjekts | ||||||
---|---|---|---|---|---|---|---|---|
Teil des Datenbanknamens | Teil des Schemanamens | Teil des Beziehungsnamens | Teil des Attributnamen | Teil des Datenbanknamens | Teil des Schemanamens | Teil des Beziehungsnamens | Teil des Attributnamen | |
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 |
Standarddatenbank
Wenn Sie einen BigQuery-Projektnamen an alle übersetzten Objekte anhängen möchten, ist es am einfachsten, wenn Sie beim Erstellen eines Übersetzungsjobs einen Standarddatenbanknamen angeben. Dies funktioniert bei Quelldateien, bei denen eine dreiteilige Benennung verwendet wird oder wenn eine vierteilige Benennung verwendet wird, aber der Objektname der obersten Ebene nicht angegeben ist.
Wenn Sie beispielsweise den Standarddatenbanknamen myproject
angeben, wird eine Quellanweisung wie SELECT * FROM database.table
in SELECT * FROM myproject.database.table
übersetzt. Wenn Objekte bereits einen Datenbanknamenteil wie SELECT * FROM database.schema.table
verwenden, müssen Sie eine Namenszuordnungsregel verwenden, um database.schema.table
in myproject.schema.table
umzubenennen.
Standardschema
Wenn Sie alle Objektnamen in den Quelldateien, die keine vierteilige Benennung verwenden, vollständig qualifizieren möchten, können Sie sowohl einen Standarddatenbanknamen als auch einen Standardschemanamen angeben, wenn Sie einen Übersetzungsjob erstellen. Der Standardschemaname wird in der Option für den Schemasuchpfad als erster Schemaname angegeben.
Wenn Sie beispielsweise den Standarddatenbanknamen myproject
und den Standardschemanamen myschema
angeben, können Sie die folgenden Quellanweisungen verwenden:
SELECT * FROM database.table
SELECT * FROM table1
Sie sind übersetzt in:
SELECT * FROM myproject.database.table
.SELECT * FROM myproject.myschema.table1
Verhalten der Namenszuordnungsregel
In den folgenden Abschnitten wird beschrieben, wie sich Regeln zur Namenszuordnung verhalten.
Regelübernahme in der Objekthierarchie
Eine Namensänderung, die sich auf ein höheres Objekt auswirkt, wirkt sich auf das Zielobjekt und auch alle untergeordneten Objekte in derselben Hierarchie aus.
Wenn Sie beispielsweise die folgende Namenszuordnungsregel mit dem Objekttyp schema
angeben:
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | sales_db |
sales |
Schema | cust_mgmt |
cms |
Beziehung | ||
Attribut |
Wenn sie angewendet wird, werden auch die Teile zur Datenbank- und Schemanamen aller relation
- und attribute
-Objekte unter dem Schema sales_db.cust_mgmt
geändert. Beispiel: Ein relation
-Objekt namens sales_db.cust_mgmt.history
wird zu sales.cms.history
.
Umgekehrt haben Änderungen an Namen, die auf untergeordnete Objekte gerichtet sind, keine Auswirkungen auf Objekte auf höherer Ebene oder auf derselben Ebene in der Objekthierarchie.
Wenn Sie beispielsweise die folgende Namenszuordnungsregel mit dem Objekttyp relation
angeben:
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | sales_db |
sales |
Schema | cust_mgmt |
cms |
Beziehung | clients |
accounts |
Attribut |
Wenn sie angewendet wird, haben sich keine anderen Objekte auf der Ebene sales_db
oder sales_db.cust_mgmt
der Objekthierarchie geändert.
Die spezifischste Regel wird angewendet
Auf ein Objekt wird nur eine Namenszuordnungsregel angewendet. Wenn sich mehrere Regeln auf ein einzelnes Objekt auswirken könnten, wird die Regel angewendet, die sich auf den Namen der niedrigsten Ebene auswirkt. Wenn beispielsweise eine Regel für die Typzuordnung eines database
-Typs und eine Regel für die Typzuordnung für den Typ schema
sich sowohl auf den Namen eines relation
-Objekts auswirken können, wird Typname-Zuordnungsregel des Typs schema
angewendet.
Eindeutige Kombination aus Typ und Quellwerten verwenden
Sie können nicht mehr als eine Namenszuordnungsregel mit demselben Typ und denselben Quellwerten angeben. Sie können beispielsweise nicht die beiden folgenden Regeln für die Namenszuordnung angeben:
Regel 1, Typ attribute |
Regel 2, Typ attribute |
|||
---|---|---|---|---|
Namensteil | Quelle | Ziel- | Quelle | Ziel- |
Datenbank | project |
project |
||
Schema | dataset1 |
dataset1 |
||
Beziehung | table1 |
table1 |
||
Attribut | lname |
last_name |
lname |
lastname |
Erstellen Sie passende Namenszuordnungs regeln für attribute
und attribute alias
.
Wenn Sie eine Regel zur Typzuordnung von attribute
verwenden, um einen Attributnamen in DDL-Anweisungen zu ändern, müssen Sie eine Regel für die Namenszuordnung von attribute alias
erstellen, um auch den Namen dieses Attributs in DML-Anweisungen zu ändern.
Namensänderungen werden nicht kaskadiert
Namensänderungen werden nicht über Namensregeln kaskadiert.
Wenn Sie beispielsweise eine Namenszuordnungsregel erstellt haben, diedatabase1
in project1
und eine weitere, die project1
in project2
umbenenntm wird der Übersetzer nicht database1
zu project2
zuordnen.
Quellobjekte ohne vierteilige Namen verarbeiten
Einige Quellsysteme wie Teradata verwenden drei Namensteile, um Objektnamen vollständig zu qualifizieren. Bei vielen Quellsystemen können Sie auch teilweise qualifizierte Namen in ihren SQL-Dialekten verwenden, zum Beispiel mit database1.schema1.table1
, schema1.table1
und table1
, um sich auf dasselbe Objekt in unterschiedlichen Kontexten zu beziehen. Wenn Ihre Quelldateien Objekte enthalten, die keine vierteiligen Objektnamen verwenden, können Sie die Namenszuordnung in Kombination mit einemStandarddatenbanknamen und einStandardschemaname um die gewünschte Namenszuordnung zu erreichen.
Beispiele für die Verwendung von Namenszuordnungsregeln mit einem Standarddatenbanknamen oder einem Standardschemanamen finden Sie unter Datenbanknamenteil für Objekte mit unterschiedlicher Namensvervollständigung ändern und Einen teilweis qualifizierten Beziehungsobjektnamen ändern.
Beispiele für die Namenszuordnung
In den Beispielen in diesem Abschnitt sehen Sie, wie Namenszuordnungsregeln für gängige Anwendungsfälle funktionieren.
Teil des Datenbanknamens für vollständig qualifizierte Objekte ändern
Im folgenden Beispiel wird der Datenbanknameteil von td_project
in bq_project
umbenannt für alle database
, schema
, relation
und function
-Objekte, die voll qualifizierte Namen haben.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | td_project |
bq_project |
Schema | ||
Beziehung | ||
Attribut |
Typ
database
Beispieleingabe
SELECT * FROM td_project.schema.table;
SELECT * FROM td_project.schema1.table1;
Beispielausgabe
SELECT * FROM bq_project.schema.table;
SELECT * FROM bq_project.schema1.table1
Teil des Datenbanknamens für Objekte mit unterschiedlichen Namensvervollständigungen ändern
Im folgenden Beispiel wird der Datenbankteil project
für alle Objekttypen in bq_project
umbenannt. Außerdem wird bq_project
als Datenbanknameteil für Objekte hinzugefügt, die keinen angeben.
Dazu müssen Sie bei der Konfiguration des Übersetzungsjobs zusätzlich zur Festlegung der Regeln für die Namenszuordnung einen Standarddatenbankwert angeben. Weitere Informationen zum Festlegen eines Standarddatenbanknamens finden Sie unter Übersetzungsjob senden.
Standard-Datenbankwert
project
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | project |
bq_project |
Schema | ||
Beziehung | ||
Attribut |
Typ
database
Beispieleingabe
SELECT * FROM project.schema.table;
SELECT * FROM schema1.table1;
Beispielausgabe
SELECT * FROM bq_project.schema.table;
SELECT * FROM bq_project.schema1.table1
Datenbanknamen und den Schemanamen für vollständig qualifizierte Objekte ändern
Im folgenden Beispiel wird der Teil der Datenbanknamen warehouse1
in myproject
geändert und der Schemaname database1
in mydataset
.
Sie können auch die Teile eines relation
-Objektnamens auf die gleiche Weise ändern. Dazu verwenden Sie einen relation
-Typ und geben Quell- und Zielwerte für den Beziehungsnamen an.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | warehouse1 |
myproject |
Schema | database1 |
mydataset |
Beziehung | ||
Attribut |
Typ
schema
Beispieleingabe
SELECT * FROM warehouse1.database1.table1;
SELECT * FROM database2.table2;
Beispielausgabe
SELECT * FROM myproject.mydataset.table1;
SELECT * FROM __DEFAULT_DATABASE__.database2.table2;
Vollständig qualifizierten relation
-Objektnamen ändern
Im folgenden Beispiel wird mydb.myschema.mytable
in mydb.myschema.table1
umbenannt.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | mydb |
mydb |
Schema | myschema |
myschema |
Beziehung | mytable |
table1 |
Attribut |
Typ
relation
Beispieleingabe
CREATE table mydb.myschema.mytable(id int, name varchar(64));
Beispielausgabe
CREATE table mydb.myschema.table1(id integer, name string(64));
Teilweise qualifizierten relation
-Objektnamen ändern
Im folgenden Beispiel wird myschema.mytable
in mydb.myschema.table1
umbenannt.
Standard-Datenbankwert
mydb
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | mydb |
mydb |
Schema | myschema |
myschema |
Beziehung | mytable |
table1 |
Attribut |
Typ
relation
Beispieleingabe
CREATE table myschema.mytable(id int, name varchar(64));
Beispielausgabe
CREATE table mydb.myschema.table1(id integer, name string(64));
relation alias
-Objektnamen ändern
Im folgenden Beispiel werden alle Instanzen des relation alias
-Objekts table
in t
umbenannt.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | ||
Schema | ||
Beziehung | table |
t |
Attribut |
Typ
relation alias
Beispieleingabe
SELECT table.id, table.name FROM mydb.myschema.mytable table
Beispielausgabe
SELECT t.id, t.name FROM mydb.myschema.mytable AS t
function
-Objektnamen ändern
Im folgenden Beispiel wird mydb.myschema.myfunction
in mydb.myschema.function1
umbenannt.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | mydb |
mydb |
Schema | myschema |
myschema |
Beziehung | myprocedure |
procedure1 |
Attribut |
Typ
function
Beispieleingabe
CREATE PROCEDURE mydb.myschema.myprocedure(a int) BEGIN declare i int; SET i = a + 1; END;
CALL mydb.myschema.myprocedure(7)
Beispielausgabe
CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;
CALL mydb.myschema.procedure1(7);
attribute
-Objektnamen ändern
Im folgenden Beispiel wird mydb.myschema.mytable.myfield
in mydb.myschema.mytable.field1
umbenannt. Da sich attribute
-Objekte auf der untersten Ebene der Objekthierarchie befinden, ändert diese Namenszuordnung den Namen irgendeines anderen Objekts nicht.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | mydb |
|
Schema | myschema |
|
Beziehung | mytable |
|
Attribut | myfield |
field1 |
Typ
attribute
Beispieleingabe
CREATE table mydb.myschema.mytable(myfield int, name varchar(64), revenue int);
Beispielausgabe
CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);
attribute alias
-Objektnamen ändern
Im folgenden Beispiel wird mydb.myschema.mytable.myfield
in mydb.myschema.mytable.field1
umbenannt. Da sich attribute alias
-Objekte auf der untersten Ebene der Objekthierarchie befinden, ändert diese Namenszuordnung den Namen eines anderen Objekts nicht.
Teile von Quell- und Zielnamen
Namensteil | Quelle | Ziel- |
---|---|---|
Datenbank | mydb |
|
Schema | myschema |
|
Beziehung | mytable |
|
Attribut | myfield |
field1 |
Typ
attribute alias
Beispieleingabe
SELECT myfield, name FROM mydb.myschema.mytable;
Beispielausgabe
SELECT field1, name FROM mydb.myschema.mytable;
JSON-Dateiformat
Wenn Sie Namenszuordnungsregeln mithilfe einer JSON-Datei anstelle der Google Cloud Console angeben, muss die JSON-Datei dieses Format haben:
{
"name_map": [
{
"source": {
"type": "string",
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
},
"target": {
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
}
}
]
}
Die Datei muss kleiner als 5 MB sein.
Weitere Informationen zum Angeben von Namenszuordnungsregeln für einen Übersetzungsjob finden Sie unter Übersetzungsjob senden.
JSON-Beispiele
Die folgenden Beispiele zeigen, wie Regeln für die Namenszuordnung mithilfe von JSON-Dateien angegeben werden.
Beispiel 1
Durch die Regeln für die Namenszuordnung in diesem Beispiel werden folgende Objektnamen geändert:
- Benennen Sie Instanzen des
project.dataset2.table2
-Objektsrelation
inbq_project.bq_dataset2.bq_table2
um. - Benennt alle Instanzen des
project
database
-Objekts inbq_project
um. Beispiel:project.mydataset.table2
wird zubq_project.mydataset.table2
undCREATE DATASET project.mydataset
zuCREATE 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"
}
}]
}
Beispiel 2
Durch die Regeln für die Namenszuordnung in diesem Beispiel werden folgende Objektnamen geändert:
- Benennen Sie Instanzen des
project.dataset2.table2.field1
-Objektsattribute
in DDL- und DML-Anweisungen inbq_project.bq_dataset2.bq_table2.bq_field
um.
{
"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"
}
}]
}