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.
Übersicht
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 Siedatabaseals 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 Sieschemaals 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 Sierelationals 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 beispielsweisetein Beziehungsalias. In der AbfrageSELECT field1, field2 FROM schema1.table1isttable1auch ein Beziehungsalias. Wenn Sierelation aliasals Objekttyp angeben, werden Aliasse für alle Verweise auf den Quellstring in DML-Anweisungen erstellt. Wenn beispielsweisetableAals 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 Siefunctionals 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 Sieattributeals 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 beispielsweisefield1ein Attributalias. Wenn Sieattribute aliasals 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.tableSELECT * 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-Objektsrelationinbq_project.bq_dataset2.bq_table2um. - Benennt alle Instanzen des
projectdatabase-Objekts inbq_projectum. Beispiel:project.mydataset.table2wird zubq_project.mydataset.table2undCREATE DATASET project.mydatasetzuCREATE 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-Objektsattributein DDL- und DML-Anweisungen inbq_project.bq_dataset2.bq_table2.bq_fieldum.
{
"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"
}
}]
}