Asignar nombres de objetos SQL para la traducción por lotes

En este documento se describe cómo configurar la asignación de nombres para cambiar el nombre de los objetos SQL durante la traducción por lotes.

Información general

La asignación de nombres le permite identificar los nombres de los objetos SQL en sus archivos de origen y especificar los nombres de destino de esos objetos en BigQuery. Puede usar algunos o todos los componentes siguientes para configurar la asignación de nombres de un objeto:

  • Una regla de asignación de nombres compuesta por:
    • Partes del nombre de origen que proporcionan el nombre completo del objeto en el sistema de origen.
    • Un type que identifica el tipo del objeto de origen.
    • Partes del nombre de destino que proporcionan el nombre del objeto en BigQuery.
  • Nombre de la base de datos predeterminada que se va a usar con los objetos de origen que no especifiquen ninguno.
  • Nombre del esquema predeterminado que se va a usar con los objetos de origen que no especifiquen ninguno.

Nombrar partes

Para proporcionar los valores de los nombres de los objetos de origen y de destino en una regla de asignación de nombres, utilice una combinación de las siguientes partes de nombres:

  • Base de datos: el nivel superior de la jerarquía de nomenclatura. Es posible que tu plataforma de origen use otro término para referirse a esto, como proyecto.
  • Esquema: el segundo nivel de la jerarquía de nomenclatura. Es posible que tu plataforma de origen use otro término para referirse a esto, como conjunto de datos.
  • Relación: el tercer nivel de la jerarquía de nomenclatura. Es posible que tu plataforma de origen use otro término para referirse a esto, como tabla.
  • Atributo: el nivel más bajo de la jerarquía de nomenclatura. Es posible que tu plataforma de origen use otro término para referirse a esto, como columna.

Tipos de objetos

También debe especificar el tipo de objeto de origen al que va a cambiar el nombre en una regla de asignación de nombres. Se admiten los siguientes tipos de objetos:

  • Database: objeto de nivel superior en la jerarquía de objetos. Por ejemplo, database.schema.relation.attribute. Es posible que tu plataforma de origen use otro término para referirse a esto, como proyecto. Si se especifica database como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DDL y DML.
  • Schema: objeto de segundo nivel en la jerarquía de objetos. Es posible que tu plataforma de origen use otro término para referirse a este concepto, como conjunto de datos. Si se especifica schema como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DDL y DML.
  • Relation: objeto de tercer nivel en la jerarquía de objetos. Es posible que la plataforma de origen use otro término para referirse a esto, como tabla. Si se especifica relation como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DDL.
  • Relation alias: alias de un objeto de tercer nivel. Por ejemplo, en la consulta SELECT t.field1, t.field2 FROM myTable t;, t es un alias de relación. En la consulta SELECT field1, field2 FROM schema1.table1, table1 también es un alias de relación. Si se especifica relation alias como tipo de objeto, se crean alias para todas las referencias a la cadena de origen en las instrucciones DML. Por ejemplo, si se especifica tableA como nombre de destino, los ejemplos anteriores se traducen como SELECT tableA.field1, tableA.field2 FROM myTable AS tableA; y SELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA, respectivamente.
  • Function: un procedimiento, por ejemplo create procedure db.test.function1(a int). Si se especifica function como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DDL y DML.
  • Attribute: objeto de cuarto nivel en la jerarquía de objetos. Es posible que tu plataforma de origen use otro término para referirse a esto, como columna. Si se especifica attribute como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DDL.
  • Attribute alias: alias de un objeto de cuarto nivel. Por ejemplo, en la consulta SELECT field1 FROM myTable;, field1 es un alias de atributo. Si se especifica attribute alias como tipo de objeto, se cambiarán todas las referencias a la cadena de origen en las instrucciones DML.

Partes obligatorias del nombre de los tipos de objeto

Para describir un objeto en una regla de asignación de nombres, usa las partes del nombre identificadas para cada tipo de objeto en la siguiente tabla:

Tipo Nombre del objeto de origen Nombre del objeto de destino
Parte del nombre de la base de datos Parte del nombre del esquema Parte del nombre de la relación Parte del nombre del atributo Parte del nombre de la base de datos Parte del nombre del esquema Parte del nombre de la relación Parte del nombre del atributo
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

Base de datos predeterminada

Si quieres añadir un nombre de proyecto de BigQuery a todos los objetos traducidos, lo más fácil es especificar un nombre de base de datos predeterminado al crear un trabajo de traducción. Esto funciona en archivos de origen en los que se usa un nombre de tres partes o un nombre de cuatro partes, pero no se especifica el nombre del objeto de nivel más alto.

Por ejemplo, si especifica el nombre de base de datos predeterminado myproject, una instrucción de origen como SELECT * FROM database.table se traduce a SELECT * FROM myproject.database.table. Si tiene objetos que ya usan una parte del nombre de la base de datos, como SELECT * FROM database.schema.table, debe usar una regla de asignación de nombres para cambiar el nombre de database.schema.table a myproject.schema.table.

Esquema predeterminado

Si quiere calificar completamente todos los nombres de objeto de los archivos de origen que no usen nombres de cuatro partes, puede proporcionar un nombre de base de datos predeterminado y un nombre de esquema predeterminado al crear un trabajo de traducción. El nombre del esquema predeterminado se proporciona como el primer nombre de esquema en la opción de ruta de búsqueda de esquemas.

Por ejemplo, si especificas el nombre de la base de datos predeterminada myproject y el nombre del esquema predeterminado myschema, las siguientes instrucciones de origen:

  • SELECT * FROM database.table
  • SELECT * FROM table1

Se traducen a:

  • SELECT * FROM myproject.database.table.
  • SELECT * FROM myproject.myschema.table1

Comportamiento de la regla de asignación de nombres

En las siguientes secciones se describe cómo se comportan las reglas de asignación de nombres.

La herencia de reglas se aplica a la jerarquía de objetos

Si se cambia el nombre de un objeto de nivel superior, se modifica el nombre del objeto de destino y de todos sus objetos secundarios en la misma jerarquía.

Por ejemplo, si especifica la siguiente regla de asignación de nombres con un tipo de objeto schema:

Parte del nombre Origen Objetivo
Base de datos sales_db sales
Esquema cust_mgmt cms
Relación
Atributo

Cuando se aplica, también se cambian las partes del nombre de la base de datos y del esquema de todos los objetos relation y attribute del esquema sales_db.cust_mgmt. Por ejemplo, un objeto relation llamado sales_db.cust_mgmt.history se convierte en sales.cms.history.

Por el contrario, los cambios de nombre que se aplican a objetos de nivel inferior no afectan a los objetos de nivel superior o del mismo nivel en la jerarquía de objetos.

Por ejemplo, si especifica la siguiente regla de asignación de nombres con un tipo de objeto relation:

Parte del nombre Origen Objetivo
Base de datos sales_db sales
Esquema cust_mgmt cms
Relación clients accounts
Atributo

Cuando se aplica, no se cambia el nombre de ningún otro objeto en el nivel sales_db o sales_db.cust_mgmt de la jerarquía de objetos.

Se aplica la regla más específica

Solo se aplica una regla de asignación de nombres a un objeto. Si varias reglas pueden afectar a un mismo objeto, se aplica la regla que afecta a la parte del nombre del nivel más bajo. Por ejemplo, si una regla de asignación de nombres de tipo database y una regla de asignación de nombres de tipo schema pueden afectar al nombre de un objeto relation, se aplica la regla de asignación de nombres de tipo schema.

Utiliza una combinación única de valores de tipo y de origen.

No puede especificar más de una regla de asignación de nombres con el mismo tipo y los mismos valores de origen. Por ejemplo, no puede especificar las dos reglas de asignación de nombres siguientes:

Regla 1, tipo attribute Regla 2, tipo attribute
Parte del nombre Origen Objetivo Origen Objetivo
Base de datos project project
Esquema dataset1 dataset1
Relación table1 table1
Atributo lname last_name lname lastname

Crea reglas de asignación de nombres attribute y attribute alias coincidentes

Si usa una regla de asignación de nombres de tipo attribute para cambiar el nombre de un atributo en instrucciones DDL, debe crear una regla de asignación de nombres attribute alias para cambiar el nombre de ese atributo también en instrucciones DML.

Los cambios de nombre no se aplican en cascada

Los cambios de nombre no se aplican en cascada a las reglas de nomenclatura. Por ejemplo, si has creado una regla de asignación de nombres que cambia el nombre database1 por project1 y otra que cambia el nombre project1 por project2, el traductor no asignará database1 a project2.

Gestionar objetos de origen que no tengan nombres de cuatro partes

Algunos sistemas de origen, como Teradata, usan tres partes de nombre para cualificar completamente los nombres de los objetos. Muchos sistemas de origen también te permiten usar nombres parcialmente cualificados en sus dialectos de SQL. Por ejemplo, puedes usar database1.schema1.table1, schema1.table1 y table1 para hacer referencia al mismo objeto en contextos diferentes. Si los archivos de origen contienen objetos que no usan nombres de objeto de cuatro partes, puede usar la asignación de nombres junto con la especificación de un nombre de base de datos predeterminado y un nombre de esquema predeterminado para conseguir la asignación de nombres que quiera.

Para ver ejemplos de cómo usar reglas de asignación de nombres con un nombre de base de datos predeterminado o un nombre de esquema predeterminado, consulte Cambiar la parte del nombre de la base de datos de objetos con distintos niveles de finalización de nombres y Cambiar el nombre de un objeto de relación parcialmente cualificado.

Ejemplos de asignación de nombres

Usa los ejemplos de esta sección para ver cómo funcionan las reglas de asignación de nombres en casos prácticos habituales.

Cambiar la parte del nombre de la base de datos de los objetos totalmente cualificados

En el siguiente ejemplo se cambia el nombre de la base de datos de td_project a bq_project para todos los objetos database, schema, relation y function que tengan nombres completos.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos td_project bq_project
Esquema
Relación
Atributo

Tipo

  • database

Entrada de ejemplo

  • SELECT * FROM td_project.schema.table;
  • SELECT * FROM td_project.schema1.table1;

Ejemplo de salida

  • SELECT * FROM bq_project.schema.table;
  • SELECT * FROM bq_project.schema1.table1

Cambiar la parte del nombre de la base de datos de los objetos con distintos niveles de finalización de nombres

En el siguiente ejemplo, se cambia el nombre de la parte de la base de datos project a bq_project para todos los tipos de objetos y también se añade bq_project como parte del nombre de la base de datos para los objetos que no especifican ninguno.

Para ello, debe especificar un valor de base de datos predeterminado al configurar el trabajo de traducción, además de especificar reglas de asignación de nombres. Para obtener más información sobre cómo especificar un nombre de base de datos predeterminado, consulta Enviar un trabajo de traducción.

Valor predeterminado de la base de datos

  • project

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos project bq_project
Esquema
Relación
Atributo

Tipo

  • database

Entrada de ejemplo

  • SELECT * FROM project.schema.table;
  • SELECT * FROM schema1.table1;

Ejemplo de salida

  • SELECT * FROM bq_project.schema.table;
  • SELECT * FROM bq_project.schema1.table1

Cambiar la parte del nombre de la base de datos y la parte del nombre del esquema de los objetos totalmente cualificados

En el siguiente ejemplo, se cambia la parte del nombre de la base de datos warehouse1 por myproject y también se cambia la parte del nombre del esquema database1 por mydataset.

También puedes cambiar las partes del nombre de un objeto relation de la misma forma, usando un tipo relation y especificando los valores de origen y de destino de la parte del nombre de la relación.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos warehouse1 myproject
Esquema database1 mydataset
Relación
Atributo

Tipo

  • schema

Entrada de ejemplo

  • SELECT * FROM warehouse1.database1.table1;
  • SELECT * FROM database2.table2;

Ejemplo de salida

  • SELECT * FROM myproject.mydataset.table1;
  • SELECT * FROM __DEFAULT_DATABASE__.database2.table2;

Cambiar el nombre de un objeto relation completo

En el siguiente ejemplo se cambia el nombre de mydb.myschema.mytable a mydb.myschema.table1.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos mydb mydb
Esquema myschema myschema
Relación mytable table1
Atributo

Tipo

  • relation

Entrada de ejemplo

  • CREATE table mydb.myschema.mytable(id int, name varchar(64));

Ejemplo de salida

  • CREATE table mydb.myschema.table1(id integer, name string(64));

Cambiar el nombre de un objeto relation parcialmente cualificado

En el siguiente ejemplo se cambia el nombre de myschema.mytable a mydb.myschema.table1.

Valor predeterminado de la base de datos

  • mydb

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos mydb mydb
Esquema myschema myschema
Relación mytable table1
Atributo

Tipo

  • relation

Entrada de ejemplo

  • CREATE table myschema.mytable(id int, name varchar(64));

Ejemplo de salida

  • CREATE table mydb.myschema.table1(id integer, name string(64));

Cambiar el nombre de un objeto relation alias

En el siguiente ejemplo se cambia el nombre de todas las instancias del objeto relation alias table a t.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos
Esquema
Relación table t
Atributo

Tipo

  • relation alias

Entrada de ejemplo

  • SELECT table.id, table.name FROM mydb.myschema.mytable table

Ejemplo de salida

  • SELECT t.id, t.name FROM mydb.myschema.mytable AS t

Cambiar el nombre de un objeto function

En el siguiente ejemplo se cambia el nombre de mydb.myschema.myfunction a mydb.myschema.function1.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos mydb mydb
Esquema myschema myschema
Relación myprocedure procedure1
Atributo

Tipo

  • function

Entrada de ejemplo

  • CREATE PROCEDURE mydb.myschema.myprocedure(a int) BEGIN declare i int; SET i = a + 1; END;
  • CALL mydb.myschema.myprocedure(7)

Ejemplo de salida

  • CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;
  • CALL mydb.myschema.procedure1(7);

Cambiar el nombre de un objeto attribute

En el siguiente ejemplo se cambia el nombre de mydb.myschema.mytable.myfield a mydb.myschema.mytable.field1. Como los objetos attribute están en el nivel más bajo de la jerarquía de objetos, esta asignación de nombres no cambia el nombre de ningún otro objeto.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos mydb
Esquema myschema
Relación mytable
Atributo myfield field1

Tipo

  • attribute

Entrada de ejemplo

  • CREATE table mydb.myschema.mytable(myfield int, name varchar(64), revenue int);

Ejemplo de salida

  • CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);

Cambiar el nombre de un objeto attribute alias

En el siguiente ejemplo se cambia el nombre de mydb.myschema.mytable.myfield a mydb.myschema.mytable.field1. Como los objetos attribute alias están en el nivel más bajo de la jerarquía de objetos, esta asignación de nombres no cambia el nombre de ningún otro objeto.

Partes del nombre de origen y de destino

Parte del nombre Origen Objetivo
Base de datos mydb
Esquema myschema
Relación mytable
Atributo myfield field1

Tipo

  • attribute alias

Entrada de ejemplo

  • SELECT myfield, name FROM mydb.myschema.mytable;

Ejemplo de salida

  • SELECT field1, name FROM mydb.myschema.mytable;

Formato de archivo JSON

Si decides especificar reglas de asignación de nombres mediante un archivo JSON en lugar de la consola Google Cloud , el archivo JSON debe tener este formato:

{
  "name_map": [
    {
      "source": {
        "type": "string",
        "database": "string",
        "schema": "string",
        "relation": "string",
        "attribute": "string"
      },
      "target": {
        "database": "string",
        "schema": "string",
        "relation": "string",
        "attribute": "string"
      }
    }
  ]
}

El tamaño del archivo debe ser inferior a 5 MB.

Para obtener más información sobre cómo especificar reglas de asignación de nombres para un trabajo de traducción, consulta Enviar un trabajo de traducción.

Ejemplos de JSON

En los siguientes ejemplos se muestra cómo especificar reglas de asignación de nombres mediante archivos JSON.

Ejemplo 1

Las reglas de asignación de nombres de este ejemplo hacen los siguientes cambios en los nombres de los objetos:

  • Cambia el nombre de las instancias del objeto project.dataset2.table2 relation a bq_project.bq_dataset2.bq_table2.
  • Cambia el nombre de todas las instancias del objeto project database por bq_project. Por ejemplo, project.mydataset.table2 se convierte en bq_project.mydataset.table2 y CREATE DATASET project.mydataset en 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"
    }
  }]
}

Ejemplo 2

Las reglas de asignación de nombres de este ejemplo hacen los siguientes cambios en los nombres de los objetos:

  • Cambia el nombre de las instancias del objeto project.dataset2.table2.field1 attribute por bq_project.bq_dataset2.bq_table2.bq_field en las instrucciones DDL y 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"
    }
  }]
}