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 Sie database 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 Sie schema 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 Sie relation 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 Abfrage SELECT t.field1, t.field2 FROM myTable t; ist beispielsweise t ein Beziehungsalias. In der Abfrage SELECT field1, field2 FROM schema1.table1 ist table1 auch ein Beziehungsalias. Wenn Sie relation alias als Objekttyp angeben, werden Aliasse für alle Verweise auf den Quellstring in DML-Anweisungen erstellt. Wenn beispielsweise tableA als Zielname angegeben ist, werden die obigen Beispiele als SELECT 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 Sie function 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 Sie attribute 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 Abfrage SELECT field1 FROM myTable; ist beispielsweise field1 ein Attributalias. Wenn Sie attribute 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-Objekts relation in bq_project.bq_dataset2.bq_table2 um.
  • Benennt alle Instanzen des project database-Objekts in bq_project um. Beispiel: project.mydataset.table2 wird zu bq_project.mydataset.table2 und CREATE DATASET project.mydataset zu 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"
    }
  }]
}

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-Objekts attribute in DDL- und DML-Anweisungen in bq_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"
    }
  }]
}