Asigna nombres de objetos SQL para la traducción
La asignación de nombres te permite asignar nombres de objetos SQL en tus archivos de origen a nombres de destino en BigQuery con un archivo YAML de configuración. Durante la traducción de SQL, todas las referencias a cada nombre de origen en tus sentencias de SQL se actualizan al nombre de destino en el resultado traducido.
Puedes usar algunos de los siguientes componentes o todos ellos a fin de configurar la asignación de nombres para un objeto:
- Una regla de asignación de nombres, que consta de los siguientes elementos:
- Partes del nombre de origen que proporcionan el nombre completamente calificado del objeto en el sistema de origen.
- Partes del nombre de destino que proporcionan el nombre del objeto en BigQuery.
- Un nombre de base de datos predeterminada que se usará con objetos de origen que no especifiquen una.
- Un nombre de esquema predeterminado que se usará con cualquier objeto de origen que no especifique uno.
Partes del nombre
Debes proporcionar los valores para los nombres de los objetos de origen y de destino en una regla de asignación de nombres mediante una combinación de las siguientes partes del nombre:
Database: Un objeto de nivel superior en la jerarquía de objetos, por ejemplo,database.schema.relation.attributeTu plataforma de origen puede usar un término alternativo para esto, por ejemplo, proyecto.Schema: Un objeto de segundo nivel en la jerarquía de objetos. Tu plataforma de origen puede usar un término alternativo para esto, por ejemplo, conjunto de datos.Relation: Un objeto de tercer nivel en la jerarquía de objetos. Tu plataforma de origen puede usar un término alternativo para esto, por ejemplo, tabla o vista.Function: Es un objeto de tercer nivel en la jerarquía de objetos que representa una función definida por el usuario o un procedimiento almacenado, por ejemplo,create procedure db.test.function1(a int).Attribute: Un objeto de cuarto nivel en la jerarquía de objetos. Tu plataforma de origen puede usar un término alternativo para esto, por ejemplo, columna.
Cuando configuras reglas de asignación de nombres en un archivo YAML de configuración, solo necesitas incluir las partes del nombre de destino que deseas cambiar. Las partes del nombre del destino que se omitan no se modificarán.
Base de datos predeterminada
Si deseas agregar un nombre de proyecto de BigQuery a todos los objetos traducidos, lo más sencillo es especificar un nombre de base de datos predeterminada en un archivo YAML de configuración. Esto funciona para archivos de origen en los que se usa el nombre de tres partes o en los que se usa el nombre de cuatro partes, pero no se especifica el nombre del objeto de nivel más alto.
Por ejemplo, si especificas el nombre de base de datos predeterminada myproject, una declaración de origen como SELECT * FROM database.table se traducirá a SELECT * FROM myproject.database.table. Si tienes objetos que ya usan una parte de nombre de base de datos, como SELECT * FROM database.schema.table, debes usar una regla de asignación de nombres para cambiar el nombre de database.schema.table a myproject.schema.table.
Esquema predeterminado
Si deseas calificar por completo todos los nombres de objetos en los archivos de origen que no usan nombres de cuatro partes, puedes proporcionar un nombre de base de datos predeterminada y un nombre de esquema predeterminado en un archivo YAML de configuración. El nombre de esquema predeterminado se proporciona como el primer nombre de esquema en la opción de ruta de búsqueda del esquema.
Por ejemplo, si especificas el nombre de base de datos predeterminada myproject y el nombre de esquema predeterminado myschema, entonces las siguientes declaraciones de origen:
SELECT * FROM database.tableSELECT * FROM table1
Se traducen a:
SELECT * FROM myproject.database.table.SELECT * FROM myproject.myschema.table1
Comportamiento de las reglas 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 fluye hacia abajo en la jerarquía de objetos
Un cambio de nombre que afecta a un objeto de nivel superior afecta al objeto de destino y, también, a todos sus objetos secundarios en la misma jerarquía.
Por ejemplo, si especificas la siguiente regla de asignación de nombres con un tipo de objeto schema:
| Parte de nombre | Origen | Target |
|---|---|---|
| Base de datos | sales_db |
sales |
| Esquema | cust_mgmt |
cms |
| Relación | ||
| Atributo |
Cuando se aplica, también se cambian las partes de 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 destinados a objetos de nivel inferior no afectan los objetos de nivel superior o igual en la jerarquía de objetos.
Por ejemplo, si especificas la siguiente regla de asignación de nombres con un tipo de objeto relation:
| Parte de nombre | Origen | Target |
|---|---|---|
| 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 de 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 solo objeto, se aplica la regla que afecta 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 podrían afectar el nombre de un objeto relation, se aplica la regla de asignación de nombres de tipo schema.
Usa una combinación única de valores de tipo y origen
No puedes especificar más de una regla de asignación de nombres con los mismos valores de tipo y origen. Por ejemplo, no puedes especificar las siguientes dos reglas de asignación de nombres:
Regla 1, tipo attribute |
Regla 2, tipo attribute |
|||
|---|---|---|---|---|
| Parte de nombre | Origen | Target | Origen | Target |
| Base de datos | project |
project |
||
| Esquema | dataset1 |
dataset1 |
||
| Relación | table1 |
table1 |
||
| Atributo | lname |
last_name |
lname |
lastname |
Los cambios de nombre no se aplican en cascada
Los cambios de nombre no se aplican en cascada a las reglas de nombres.
Por ejemplo, si creaste una regla de asignación de nombres que cambia el nombre de database1 a project1 y otra que cambia el nombre de project1 a project2, el traductor no asigna database1 a project2.
Maneja los objetos de origen que no tienen nombres de cuatro partes
Algunos sistemas de origen, como Teradata, usan tres partes de nombre para calificar por completo los nombres de objetos. Muchos sistemas de origen también te permiten usar nombres parcialmente calificados en sus dialectos de SQL, por ejemplo, usar database1.schema1.table1, schema1.table1 y table1 para hacer referencia al mismo objeto. diferentes contextos. Si tus archivos de origen contienen objetos que no usan nombres de objetos de cuatro partes, puedes usar la asignación de nombres junto con la especificación de un nombre de base de datos predeterminada y un nombre de esquema predeterminado para lograr la asignación de nombre que desees.
Para ver ejemplos de cómo usar reglas de asignación de nombres con un nombre de base de datos predeterminada o un nombre de esquema predeterminado, consulta Cambia la parte del nombre de la base de datos para objetos con diferentes niveles de finalización de nombre y Cambia un nombre de objeto de relación parcialmente calificado.
Ejemplos de asignación de nombres
Usa los ejemplos de esta sección a fin de ver cómo funcionan las reglas de asignación de nombres para los casos de uso comunes. Para ver la sintaxis y los ejemplos de configuración de YAML, consulta Asignación de nombres de salida.
Cambia la parte del nombre de la base de datos para objetos completamente calificados
En el siguiente ejemplo, se cambia la parte del nombre de la base de datos de td_project a bq_project para todos los objetos database, schema, relation y function que tienen nombres completamente calificados.
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| 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;
Resultado de ejemplo
SELECT * FROM bq_project.schema.table;SELECT * FROM bq_project.schema1.table1
Cambia la parte del nombre de la base de datos para objetos con diferentes niveles de finalización de nombre
En el siguiente ejemplo, se cambia la parte del nombre de la base de datos de project a bq_project para todos los tipos de objetos y también se agrega bq_project como la parte del nombre de la base de datos para los objetos que no especifican una.
Para hacerlo, debes especificar un valor de base de datos predeterminado, 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 Especifica la base de datos predeterminada y la ruta de búsqueda del esquema.
Valor de base de datos predeterminada
project
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| Base de datos | project |
bq_project |
| Esquema | ||
| Relación | ||
| Atributo |
Tipo
database
Entrada de ejemplo
SELECT * FROM project.schema.table;SELECT * FROM schema1.table1;
Resultado de ejemplo
SELECT * FROM bq_project.schema.table;SELECT * FROM bq_project.schema1.table1
Cambia la parte de nombre de la base de datos y la parte de nombre del esquema para objetos completamente calificados
En el siguiente ejemplo, se cambia la parte del nombre de la base de datos de warehouse1 a myproject y también la parte del nombre del esquema de database1 a mydataset.
También puedes cambiar las partes de un nombre de objeto relation de la misma manera, si usas un tipo relation y especificas valores de origen y destino para la parte de nombre de la relación.
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| 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;
Resultado de ejemplo
SELECT * FROM myproject.mydataset.table1;SELECT * FROM __DEFAULT_DATABASE__.database2.table2;
Cambia un nombre de objeto relation completamente calificado
En el siguiente ejemplo, se cambia el nombre de mydb.myschema.mytable a mydb.myschema.table1.
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| 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));
Resultado de ejemplo
CREATE table mydb.myschema.table1(id integer, name string(64));
Cambia un nombre de objeto relation calificado parcialmente
En el siguiente ejemplo, se cambia el nombre de myschema.mytable a mydb.myschema.table1.
Valor de base de datos predeterminada
mydb
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| 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));
Resultado de ejemplo
CREATE table mydb.myschema.table1(id integer, name string(64));
Cambia un nombre de objeto function
En el siguiente ejemplo, se cambia el nombre de mydb.myschema.myprocedure a mydb.myschema.procedure1.
Partes de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| Base de datos | mydb |
mydb |
| Esquema | myschema |
myschema |
| Funció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)
Resultado de ejemplo
CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;CALL mydb.myschema.procedure1(7);
Cambia un nombre de objeto attribute
En el siguiente ejemplo, se cambia el nombre de mydb.myschema.mytable.myfield a mydb.myschema.mytable.field1. Debido a que 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 de nombre de origen y de destino
| Parte de nombre | Origen | Target |
|---|---|---|
| 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);SELECT myfield, name FROM mydb.myschema.mytable;
Resultado de ejemplo
CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);SELECT field1, name FROM mydb.myschema.mytable;