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 especificadatabase
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 especificaschema
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 especificarelation
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 consultaSELECT t.field1, t.field2 FROM myTable t;
,t
es un alias de relación. En la consultaSELECT field1, field2 FROM schema1.table1
,table1
también es un alias de relación. Si se especificarelation 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 especificatableA
como nombre de destino, los ejemplos anteriores se traducen comoSELECT tableA.field1, tableA.field2 FROM myTable AS tableA;
ySELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA
, respectivamente.Function
: un procedimiento, por ejemplocreate procedure db.test.function1(a int)
. Si se especificafunction
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 especificaattribute
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 consultaSELECT field1 FROM myTable;
,field1
es un alias de atributo. Si se especificaattribute 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
abq_project.bq_dataset2.bq_table2
. - Cambia el nombre de todas las instancias del objeto
project
database
porbq_project
. Por ejemplo,project.mydataset.table2
se convierte enbq_project.mydataset.table2
yCREATE DATASET project.mydataset
enCREATE 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
porbq_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"
}
}]
}