En este documento, se describe cómo modificar las definiciones de esquema para tablas de BigQuery existentes. BigQuery es compatible con las modificaciones de esquema siguientes de forma nativa:
- Agregar columnas a una definición de esquema
- Disminuir la rigurosidad del modo de una columna de
REQUIRED
aNULLABLE
Es válido crear una tabla sin definir un esquema inicial y agregar una definición de esquema a la tabla más adelante.
Todas las demás modificaciones del esquema no son compatibles y requieren soluciones alternativas manuales, que incluyen las opciones siguientes:
- Cambiar el nombre de una columna
- Cambiar el tipo de datos de una columna
- Cambiar el modo de una columna (además de disminuir la rigurosidad de las columnas
REQUIRED
aNULLABLE
) - Borra una columna
Para obtener más información sobre cambios de esquema no compatibles que requieren soluciones alternativas, consulta Cambia esquemas de tablas de forma manual.
Agrega columnas a la definición de esquema de una tabla
Puedes agregar columnas a la definición de esquema de una tabla existente de las formas siguientes:
- De forma manual (crea una columna vacía).
- Cuando usas un trabajo o consulta de carga para reemplazar una tabla
- Cuando adjuntas datos a una tabla con un trabajo de carga o consulta
Toda columna que agregas se debe adherir a las funciones de BigQuery para los nombres de consultas. Para obtener más información sobre cómo crear componentes de esquema, consulta Especifica un esquema.
Agrega una columna vacía de forma manual
Puedes agregar una columna vacía a una tabla existente con uno de estos métodos:
- Usa Cloud Console.
- Usar el comando
bq update
de la herramienta de línea de comandos debq
- Llamar al método de la API
tables.patch
- Mediante la ejecución de la declaración de lenguaje de definición de datos (DDL)
ALTER TABLE ADD COLUMN
- Usa bibliotecas cliente.
Si agregas columnas nuevas a un esquema de tabla existente, las columnas deben ser NULLABLE
o REPEATED
. No puedes agregar una columna REQUIRED
a un esquema de tabla existente. Si intentas agregar una columna REQUIRED
a un esquema de tabla existente en la API o la herramienta de línea de comandos de bq
, se mostrará el siguiente error: BigQuery error in update operation: Provided Schema does not
match Table project_id:dataset.table. Cannot add required columns to
an existing schema.
Las columnas REQUIRED
solo pueden agregarse cuando creas una tabla mientras cargas datos, o cuando creas una tabla vacía con una definición de esquema.
Después de agregar una columna nueva a la definición de esquema de tu tabla, puedes cargar datos en la columna nueva si usas estos elementos:
- Declaración DML para realizar una actualización de forma masiva en cada fila
- Trabajo de carga que reemplaza la tabla.
- Resultado de la consulta que reemplace la tabla.
Para agregar columnas vacías a la definición de esquema de una tabla, sigue estos pasos:
Console
En el panel Explorador, expande el proyecto y conjunto de datos y, luego, selecciona la tabla.
En el panel de detalles, haga clic en la pestaña Esquema.
Haz clic en Editar esquema. Es posible que deba desplazarse para ver este botón.
En la página Esquema actual, en Campos nuevos, haz clic en Agregar campo.
- Para Nombre, escribe el nombre de la columna.
- Para Tipo, elige el tipo de datos.
- Para Modo, elige
NULLABLE
oREPEATED
.
Cuando termines de agregar columnas, haz clic en Guardar.
SQL
Para agregar una columna nueva a una tabla existente con la declaración
DDL ALTER TABLE ADD COLUMN
, sigue estos pasos:
En Cloud Console, haz clic en Redactar consulta nueva.
Escribe tu declaración DDL en el campo Editor de consultas.
ALTER TABLE mydataset.mytable ADD COLUMN A STRING
Haga clic en Ejecutar.
Para obtener más información sobre el uso de SQL estándar, consulta Cambiar los dialectos de SQL.
bq
Ejecuta el comando bq update
y proporciona un archivo de esquema JSON. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
.
bq update project_id:dataset.table schema
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema es la ruta al archivo de esquema JSON en tu máquina local.
Cuando especificas el esquema con la herramienta de línea de comandos de bq
, no puedes incluir un tipo RECORD
(STRUCT
) ni una descripción de columna, y tampoco puedes especificar el modo de la columna. Todos los modos están establecidos como NULLABLE
de forma predeterminada.
Si intentas agregar columnas con una definición de esquema intercalada, debes suministrar la definición de esquema completa que incluye las columnas nuevas. Debido a que no puedes especificar los modos de columnas con una definición de esquema intercalada, la actualización intentará cambiar cualquier columna REQUIRED
existente a NULLABLE
. Esto genera el error siguiente: BigQuery error in update
operation: Provided Schema does not match Table
project_id:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
El método recomendado para agregar columnas a una tabla existente mediante la herramienta de línea de comandos de bq
es suministrar un archivo de esquema JSON.
Para agregar columnas vacías al esquema de una tabla con un archivo de esquema JSON, sigue estos pasos:
Primero, ejecuta el comando
bq show
con la marca--schema
y escribe el esquema de tabla existente en un archivo. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq show \ --schema \ --format=prettyjson \ project_id:dataset.table > schema_file
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema_file es el archivo de definición de esquema que se escribe en tu máquina local.
Por ejemplo, para escribir la definición de esquema de
mydataset.mytable
en un archivo, ingresa el siguiente comando.mydataset.mytable
está en tu proyecto predeterminado.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abre el archivo del esquema en un editor de texto. El esquema debe verse de la manera siguiente:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Agrega las columnas nuevas al final de la definición del esquema. Si intentas agregar columnas nuevas en otra parte del arreglo, se muestra el siguiente error:
BigQuery error in update operation: Precondition Failed
.Con un archivo JSON, puedes especificar descripciones, modos
NULLABLE
oREPEATED
, y tiposRECORD
para columnas nuevas. Por ejemplo, mediante la definición de esquema del paso anterior, tu arreglo JSON nuevo se vería de la manera siguiente. En este ejemplo, se agrega una columnaNULLABLE
nueva llamadacolumn4
.column4
incluye una descripción.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]
Para obtener más información sobre cómo trabajar con archivos de esquema JSON, consulta Especifica un archivo de esquema JSON.
Después de actualizar tu archivo de esquema, ejecuta el comando siguiente para actualizar el esquema de la tabla. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:
project_id:dataset
.bq update project_id:dataset.table schema
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema es la ruta al archivo de esquema JSON en tu máquina local.
Por ejemplo, ingresa el siguiente comando para actualizar la definición de esquema de
mydataset.mytable
en tu proyecto predeterminado. La ruta al archivo de esquema en tu máquina local es/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Llama al método tables.patch
y usa la propiedad schema
para agregar columnas vacías a la definición del esquema. Debido a que, con el método tables.update
se reemplaza todo el recurso de tabla, es preferible usar el método tables.patch
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Agrega un objeto SchemaField nuevo a una copia de Table.schema y, luego, reemplaza el valor de la propiedad Table.schema por el esquema actualizado.Agrega una columna anidada a RECORD
Además de agregar columnas nuevas al esquema de una tabla, también puedes agregar columnas anidadas nuevas a un RECORD
. El proceso a fin de agregar una columna anidada nueva es muy similar al proceso para agregar una columna nueva.
Console
En la actualidad, Cloud Console no admite agregar un nuevo campo anidado a una columna RECORD
existente.
bq
Ejecuta el comando bq update
y proporciona un archivo de esquema JSON que agregue el campo anidado a la definición de esquema de la columna RECORD
existente. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
.
bq update project_id:dataset.table schema
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema es la ruta al archivo de esquema JSON en tu máquina local.
Cuando especificas el esquema con la herramienta de línea de comandos de bq
, no puedes incluir un tipo RECORD
(STRUCT
) ni una descripción de columna, y tampoco puedes especificar el modo de la columna. Todos los modos están establecidos como NULLABLE
de forma predeterminada. Como resultado, si agregas una columna anidada nueva a RECORD
, debes proporcionar un archivo de esquema JSON.
Para agregar una columna anidada a RECORD
mediante un archivo de esquema JSON, haz lo siguiente:
Primero, ejecuta el comando
bq show
con la marca--schema
y escribe el esquema de tabla existente en un archivo. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset.table
.bq show \ --schema \ --format=prettyjson \ project_id:dataset.table > schema_file
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema_file es el archivo de definición de esquema que se escribe en tu máquina local.
Por ejemplo, para escribir la definición de esquema de
mydataset.mytable
en un archivo, ingresa el siguiente comando.mydataset.mytable
está en tu proyecto predeterminado.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abre el archivo del esquema en un editor de texto. El esquema debe verse de la manera siguiente. En este ejemplo,
column3
es una columna repetida anidada. Las columnas anidadas sonnested1
ynested2
. El arreglofields
enumera los campos anidados encolumn3
.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Agrega la columna anidada nueva en el final del arreglo
fields
. En este ejemplo,nested3
es la columna anidada nueva.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
Para obtener más información sobre cómo trabajar con archivos de esquema JSON, consulta Especifica un archivo de esquema JSON.
Después de actualizar tu archivo de esquema, ejecuta el comando siguiente para actualizar el esquema de la tabla. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:
project_id:dataset
.bq update project_id:dataset.table schema
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema es la ruta al archivo de esquema JSON en tu máquina local.
Por ejemplo, ingresa el siguiente comando para actualizar la definición de esquema de
mydataset.mytable
en tu proyecto predeterminado. La ruta al archivo de esquema en tu máquina local es/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Llama al método tables.patch
y usa la propiedad schema
para agregar las columnas anidadas a tu definición de esquema. Debido a que, con el método tables.update
se reemplaza todo el recurso de tabla, es preferible usar el método tables.patch
.
Agrega una columna cuando reemplazas o agregas datos
Puedes agregar columnas nuevas a una tabla existente cuando cargas datos en esta y eliges reemplazar la tabla existente. Cuando reemplazas una tabla existente, el esquema de los datos que cargaste se usa para reemplazar el esquema de la tabla existente. Para obtener información sobre cómo reemplazar una tabla con un trabajo de carga, consulta:
- Cómo anexar o reemplazar una tabla con datos de Avro
- Cómo anexar o reemplazar una tabla con datos de Parquet
- Cómo anexar o reemplazar una tabla con datos ORC
- Cómo anexar o reemplazar una tabla con datos CSV
- Cómo anexar o reemplazar una tabla con datos JSON
También puedes agregar columnas nuevas a una tabla existente cuando agregas datos a esta con un trabajo de carga o consulta.
Agrega una columna en un trabajo de carga de anexo
Puedes agregar columnas a una tabla mientras le anexas datos en un trabajo de carga con uno de los siguientes métodos:
- Usar el comando
bq load
de la herramienta de línea de comandos debq
- Llamar al método
jobs.insert
de la API y configurar un trabajoload
- Usa bibliotecas cliente.
Agregar una columna a una tabla existente durante una operación de anexo no es compatible con Cloud Console en este momento.
Cuando agregas columnas con una operación de anexo en un trabajo de carga, el esquema actualizado puede encontrarse de la manera siguiente:
- Detectado de forma automática (para archivos CSV y JSON)
- Especificado en un archivo de esquema JSON (para archivos CSV y JSON)
- Recuperado de los datos fuente autodescriptivos de los archivos de exportación de Avro, ORC, Parquet y Datastore
Si especificas el esquema en un archivo JSON, las columnas nuevas se deben definir en él.
Si faltan las definiciones nuevas de la columna, se muestra el error siguiente cuando intentas anexar los datos: Error while reading data, error message:
parsing error in row starting at position int: No such field:
field.
Cuando agregas columnas nuevas durante una operación de anexo, los valores en las columnas nuevas se establecen en NULL
para las filas existentes.
Para agregar una columna nueva cuando anexas datos en una tabla durante un trabajo de carga, ten en cuenta esta información:
Console
No puedes agregar columnas nuevas a una tabla existente cuando cargas datos con Cloud Console.
bq
Usa el comando bq load
para cargar tus datos y especifica la marca --noreplace
a fin de indicar que anexas los datos a una tabla existente.
Si los datos que agregas están en formato CSV o JSON delimitado por saltos de línea, especifica la marca --autodetect
para usar la detección automática de esquemas o suministra el esquema en un archivo de esquema JSON. Las columnas agregadas se pueden inferir de forma automática desde los archivos de exportación Avro o Datastore.
Establece la marca --schema_update_option
en ALLOW_FIELD_ADDITION
para indicar que los datos que anexas contienen nuevas columnas.
Si la tabla que anexas se encuentra en un conjunto de datos de un proyecto distinto a tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
.
Opcional: Proporciona la marca --location
y configura el valor en tu ubicación.
Ingresa el comando load
de la siguiente manera:
bq --location=location load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=format \ project_id:dataset.table \ path_to_source \ schema
Aquí:
- location es el nombre de tu ubicación. La marca
--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca comoasia-northeast1
. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc. - format es
NEWLINE_DELIMITED_JSON
,CSV
,AVRO
,PARQUET
,ORC
oDATASTORE_BACKUP
. - project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla.
- table es el nombre de la tabla que agregas.
- path_to_source es un URI de Cloud Storage completamente calificado, una lista de URI separada por comas o la ruta a un archivo de datos en tu máquina local.
- schema es la ruta a un archivo de esquema JSON local. Solo se requiere un archivo de esquema para los archivos CSV y JSON cuando
--autodetect
no se especifica. Los esquemas de Avro y Datastore se infieren de los datos de origen.
Ejemplos:
Ingresa el siguiente comando para anexar un archivo de datos de Avro local, /tmp/mydata.avro
, a mydataset.mytable
mediante un trabajo de carga. Debido a que los esquemas se pueden deducir de forma automática de los datos de Avro, no es necesario usar la marca --autodetect
. mydataset
está en tu proyecto predeterminado.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Ingresa el siguiente comando para anexar un archivo de datos JSON delimitado por saltos de línea en Cloud Storage a mydataset.mytable
mediante un trabajo de carga. La marca --autodetect
se usa para detectar las columnas nuevas. mydataset
está en tu proyecto predeterminado.
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
Ingresa el siguiente comando para anexar un archivo de datos JSON delimitado por saltos de línea en Cloud Storage a mydataset.mytable
mediante un trabajo de carga. El esquema que contiene las columnas nuevas se especifica en un archivo de esquema JSON local, /tmp/myschema.json
. mydataset
se encuentra en myotherproject
, no en tu proyecto predeterminado.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
Realiza una llamada al método jobs.insert
. Configura un trabajo load
y establece las propiedades siguientes:
- Haz referencia a tus datos en Cloud Storage mediante la propiedad
sourceUris
. - Para especificar el formato de datos, configura la propiedad
sourceFormat
. - Especifica el esquema en la propiedad
schema
. - Especifica la opción de actualización del esquema con la propiedad
schemaUpdateOptions
. - Establece la disposición de escritura de la tabla de destino en
WRITE_APPEND
con la propiedadwriteDisposition
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Agrega una columna en un trabajo de anexo de consulta
Puedes agregar columnas a una tabla mientras le anexas resultados de consulta con uno de los siguientes métodos:
- Usar el comando
bq query
de la herramienta de línea de comandos debq
- Llamar al método
jobs.insert
de la API y configurar un trabajoquery
- Usa bibliotecas cliente.
Agregar una columna durante una operación de anexo no es compatible con Cloud Console en este momento.
Cuando agregas columnas con una operación de anexo a un trabajo de consulta, el esquema de los resultados de la consulta se usa para actualizar el esquema de la tabla de destino. Ten en cuenta que no puedes consultar una tabla en una ubicación y escribir los resultados en una tabla de otra ubicación.
Para agregar una columna nueva cuando anexas datos a una tabla durante un trabajo de consulta, ten en cuenta esta información:
Console
No puedes agregar nuevas columnas a una tabla existente cuando anexas resultados de consulta mediante Cloud Console.
bq
Usa el comando bq query
para consultar tus datos y especifica la marca --destination_table
a fin de indicar qué tabla anexas.
Para especificar que anexas resultados de consulta a una tabla de destino existente, agrega la marca --append_table
.
Establece la marca --schema_update_option
en ALLOW_FIELD_ADDITION
para indicar que los resultados de consulta que anexas contienen columnas nuevas.
Especifica la marca use_legacy_sql=false
para usar la sintaxis de SQL estándar en la consulta.
Si la tabla que anexas se encuentra en un conjunto de datos de un proyecto distinto a tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
. Ten en cuenta que la tabla que consultas y la tabla de destino deben estar en la misma ubicación.
Opcional: Proporciona la marca --location
y configura el valor en tu ubicación.
bq --location=location query \ --destination_table project_id:dataset.table \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'query'
Aquí:
- location es el nombre de tu ubicación. La marca
--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca comoasia-northeast1
. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc. Ten en cuenta que no puedes agregar resultados de consultas a una tabla en otra ubicación. - project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas agregar.
- table es el nombre de la tabla que deseas agregar.
- query es una consulta en la sintaxis de SQL estándar.
Ejemplos:
Ingresa el siguiente comando para consultar mydataset.mytable
en tu proyecto predeterminado y anexar los resultados de consulta a mydataset.mytable2
(que también está en tu proyecto predeterminado).
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Ingresa el siguiente comando para consultar mydataset.mytable
en tu proyecto predeterminado y anexar los resultados de consulta a mydataset.mytable2
en myotherproject
.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Realiza una llamada al método jobs.insert
. Configura un trabajo query
y establece las propiedades siguientes:
- Especifica la tabla de destino con la propiedad
destinationTable
. - Establece la disposición de escritura de la tabla de destino en
WRITE_APPEND
con la propiedadwriteDisposition
. - Especifica la opción de actualización del esquema con la propiedad
schemaUpdateOptions
. - Especifica la consulta de SQL estándar mediante la propiedad
query
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Disminuye la rigurosidad del modo de una columna
Por el momento, la única modificación que puedes hacer al modo de una columna es cambiar de REQUIRED
a NULLABLE
. Cambiar el modo de una columna de REQUIRED
a NULLABLE
se denomina disminución de la rigurosidad del modo de una columna. Puedes disminuir la rigurosidad de las columnas REQUIRED
:
- De forma manual
- Cuando reemplazas una tabla con un trabajo de carga o consulta.
- Cuando anexas datos a una tabla con un trabajo de consulta.
Cambia las columnas REQUIRED
a NULLABLE
de forma manual
Puedes cambiar de forma manual el modo de una columna de REQUIRED
a NULLABLE
con uno de los siguientes métodos:
- Usa Cloud Console.
- Usar el comando
bq update
de la herramienta de línea de comandos debq
- Llamar al método de la API
tables.patch
- Usa bibliotecas cliente.
Para cambiar de forma manual el modo de una columna de REQUIRED
a NULLABLE
, haz lo siguiente:
Console
En el panel Explorador, expande el proyecto y conjunto de datos y, luego, selecciona la tabla.
En el panel de detalles, haga clic en la pestaña Esquema.
Haz clic en Editar esquema. Es posible que deba desplazarse para ver este botón.
En la página Esquema actual, busca el campo que deseas cambiar.
En la lista desplegable de recursos Modo, selecciona
NULLABLE
.Haz clic en Guardar.
bq
Primero, ejecuta el comando
bq show
con la marca--schema
y escribe el esquema de tabla existente en un archivo. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq show \ --schema \ --format=prettyjson \ project_id:dataset.table > schema_file
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema_file es el archivo de definición de esquema que se escribe en tu máquina local.
Por ejemplo, para escribir la definición de esquema de
mydataset.mytable
en un archivo, ingresa el siguiente comando.mydataset.mytable
está en tu proyecto predeterminado.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
Abre el archivo del esquema en un editor de texto. El esquema debe verse de la manera siguiente:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Cambia el modo de una columna existente de
REQUIRED
aNULLABLE
. En este ejemplo, se disminuye la rigurosidad del modo decolumn1
.[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
Para obtener más información sobre cómo trabajar con archivos de esquema JSON, consulta Especifica un archivo de esquema JSON.
Después de actualizar tu archivo de esquema, ejecuta el comando siguiente para actualizar el esquema de la tabla. Si la tabla que actualizas está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:
project_id:dataset
.bq update project_id:dataset.table schema
En el ejemplo anterior, se ilustra lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
- table es el nombre de la tabla que deseas actualizar.
- schema es la ruta al archivo de esquema JSON en tu máquina local.
Por ejemplo, ingresa el siguiente comando para actualizar la definición de esquema de
mydataset.mytable
en tu proyecto predeterminado. La ruta al archivo de esquema en tu máquina local es/tmp/myschema.json
.bq update mydataset.mytable /tmp/myschema.json
API
Llama a tables.patch
y usa la propiedad schema
para cambiar una columna REQUIRED
a NULLABLE
en tu definición de esquema. Debido a que, con el método tables.update
se reemplaza todo el recurso de tabla, es preferible usar el método tables.patch
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Reemplaza la propiedad Table.schema por una lista de objetos SchemaField con la propiedad mode establecida en'NULLABLE'
Cambia REQUIRED
a NULLABLE
en un trabajo de carga o consulta
Puedes disminuir la rigurosidad de las columnas REQUIRED
a NULLABLE
en un esquema de tabla existente cuando cargas datos en ella y eliges reemplazar la tabla existente. Cuando reemplazas una tabla existente, el esquema de los datos que cargaste se usa para reemplazar el esquema de la tabla existente. Para obtener información sobre cómo reemplazar una tabla con un trabajo de carga, consulta:
- Cómo anexar o reemplazar una tabla con datos de Avro
- Cómo anexar o reemplazar una tabla con datos de Parquet
- Cómo anexar o reemplazar una tabla con datos ORC
- Cómo anexar o reemplazar una tabla con datos CSV
- Cómo anexar o reemplazar una tabla con datos JSON
También puedes disminuir la rigurosidad de las columnas REQUIRED
a NULLABLE
en un esquema de tabla existente cuando agregas datos a estas con un trabajo de consulta.
Cambia REQUIRED
a NULLABLE
en un trabajo agregado de carga
Puedes disminuir la rigurosidad del modo de una columna mientras anexas datos a una tabla en un trabajo de carga con uno de los siguientes métodos:
- Usar el comando
bq load
de la herramienta de línea de comandos debq
- Llamar al método
jobs.insert
de la API y configurar un trabajo de carga - Usa bibliotecas cliente.
Cambiar el modo de una columna durante una operación de anexo no es compatible con Cloud Console en este momento.
Cuando disminuyes la rigurosidad del modo de una columna con una operación de anexo en un trabajo de carga, puedes hacer estas acciones:
- Disminuir la rigurosidad del modo para las columnas individuales mediante la especificación de un archivo de esquema JSON (cuando agregas datos de los archivos CSV y JSON).
- Disminuir la rigurosidad de las columnas a
null
en tu esquema de Avro, ORC o Parquet y permite que la inferencia de esquemas detecte las columnas con rigurosidad disminuida
A la hora de disminuir la rigurosidad de una columna de REQUIRED
a NULLABLE
cuando agregas datos a una tabla durante un trabajo de carga, ten en cuenta esta información:
Console
En la actualidad, no puedes disminuir la rigurosidad del modo de una columna mediante Cloud Console.
bq
Usa el comando bq load
para cargar tus datos y especifica la marca --noreplace
a fin de indicar que anexas los datos a una tabla existente.
Si los datos que agregas están en formato CSV o JSON delimitado por saltos de línea, especifica las columnas con rigurosidad disminuida en un archivo de esquema JSON local o usa la marca --autodetect
a fin de usar la detección del esquema para detectar las columnas con rigurosidad disminuida en los datos de origen. Para obtener más información sobre cómo disminuir la rigurosidad de los modos de columna con el archivo de esquema JSON, consulta cómo cambiar las columnas REQUIRED
a NULLABLE
de forma manual.
Las columnas con rigurosidad disminuida se pueden inferir de forma automática en los archivos Avro, ORC y Parquet. La disminución de la rigurosidad de columnas no se aplica a los anexos de exportación de Datastore. Las columnas en las tablas creadas mediante la carga de archivos de exportación de Datastore siempre son NULLABLE
.
Establece la marca --schema_update_option
en ALLOW_FIELD_RELAXATION
para indicar que los datos que anexas contienen columnas con rigurosidad disminuida.
Si la tabla que anexas se encuentra en un conjunto de datos de un proyecto distinto a tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
.
Opcional: Proporciona la marca --location
y configura el valor en tu ubicación.
Ingresa el comando load
de la siguiente manera:
bq --location=location load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=format \ project_id:dataset.table \ path_to_source \ schema
Aquí:
- location es el nombre de tu ubicación. La marca
--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca comoasia-northeast1
. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc. - format es
NEWLINE_DELIMITED_JSON
,CSV
PARQUET
,ORC
oAVRO
. Los archivosDATASTORE_BACKUP
no requieren disminuir la rigurosidad de las columnas. Las columnas de las tablas creadas a partir de archivos de exportación de Datastore siempre sonNULLABLE
. - project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla.
- table es el nombre de la tabla que deseas agregar.
- path_to_source es un URI de Cloud Storage completamente calificado, una lista de URI separada por comas o la ruta a un archivo de datos en tu máquina local.
- schema es la ruta a un archivo de esquema JSON local. Esta opción se usa solo para los archivos CSV y JSON. Las columnas con rigurosidad disminuida se infieren de forma automática desde los archivos Avro.
Ejemplos:
Ingresa el siguiente comando para anexar un archivo de datos de Avro local, /tmp/mydata.avro
, a mydataset.mytable
mediante un trabajo de carga. Debido a que las columnas con rigurosidad disminuida se pueden inferir de forma automática de los datos de Avro, no necesitas especificar un archivo de esquema. mydataset
está en tu proyecto predeterminado.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
Ingresa el siguiente comando para agregar datos de un archivo JSON delimitado por saltos de línea en Cloud Storage a mydataset.mytable
mediante un trabajo de carga. El esquema que contiene las columnas con rigurosidad disminuida está en un archivo de esquema JSON local, /tmp/myschema.json
. mydataset
está en tu proyecto predeterminado.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
Ingresa el siguiente comando para anexar datos de un archivo CSV en tu máquina local a mydataset.mytable
mediante un trabajo de carga. El comando usa la detección automática de esquemas para detectar las columnas con rigurosidad disminuida en los datos de origen. mydataset
se encuentra en myotherproject
, no en tu proyecto predeterminado.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
Realiza una llamada al método jobs.insert
. Configura un trabajo load
y establece las propiedades siguientes:
- Haz referencia a tus datos en Cloud Storage mediante la propiedad
sourceUris
. - Para especificar el formato de datos, configura la propiedad
sourceFormat
. - Especifica el esquema en la propiedad
schema
. - Especifica la opción de actualización del esquema con la propiedad
schemaUpdateOptions
. - Establece la disposición de escritura de la tabla de destino en
WRITE_APPEND
con la propiedadwriteDisposition
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de Node.js de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Cambia de REQUIRED
a NULLABLE
en un trabajo de anexo de consulta
Puedes disminuir la rigurosidad de todas las columnas de una tabla mientras le anexas resultados de consulta con uno de los siguientes métodos:
- Usar el comando
bq query
de la herramienta de línea de comandos debq
- Llamar al método
jobs.insert
de la API y configurar un trabajo de consulta - Usa bibliotecas cliente.
La disminución de rigurosidad de las columnas durante una operación de anexo no es compatible Cloud Console por el momento.
Cuando disminuyes la rigurosidad de las columnas mediante una operación de anexo en un trabajo de consulta, puedes disminuir la rigurosidad de todos los campos obligatorios en la tabla de destino si estableces la marca --schema_update_option
en ALLOW_FIELD_RELAXATION
. No puedes reducir la rigurosidad de columnas individuales en una tabla de destino mediante un anexo de consulta.
Para disminuir la rigurosidad de todas las columnas en una tabla de destino cuando agregas los datos a esta durante un trabajo de consulta, haz lo siguiente:
Console
En la actualidad, no puedes disminuir la rigurosidad del modo de una columna mediante Cloud Console.
bq
Usa el comando bq query
para consultar tus datos y especifica la marca --destination_table
a fin de indicar qué tabla anexas.
Para especificar que anexas resultados de consulta a una tabla de destino existente, agrega la marca --append_table
.
Establece la marca --schema_update_option
en ALLOW_FIELD_RELAXATION
para indicar que todas las columnas REQUIRED
en la tabla que anexas deben cambiarse a NULLABLE
.
Especifica la marca use_legacy_sql=false
para usar la sintaxis de SQL estándar en la consulta.
Si la tabla que anexas se encuentra en un conjunto de datos de un proyecto distinto a tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el siguiente formato: project_id:dataset
.
Opcional: Proporciona la marca --location
y configura el valor en tu ubicación.
bq --location=location query \ --destination_table project_id:dataset.table \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'query'
Aquí:
- location es el nombre de tu ubicación. La marca
--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca comoasia-northeast1
. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc. - project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos que contiene la tabla que deseas agregar.
- table es el nombre de la tabla que deseas agregar.
- query es una consulta en la sintaxis de SQL estándar.
Ejemplos:
Ingresa el siguiente comando para consultar mydataset.mytable
en tu proyecto predeterminado y anexar los resultados de consulta a mydataset.mytable2
(que también está en tu proyecto predeterminado). El comando cambia todas las columnas REQUIRED
de la tabla de destino a NULLABLE
.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
Ingresa el siguiente comando para consultar mydataset.mytable
en tu proyecto predeterminado y anexar los resultados de consulta a mydataset.mytable2
en myotherproject
. El comando cambia todas las columnas REQUIRED
de la tabla de destino a NULLABLE
.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
Realiza una llamada al método jobs.insert
. Configura un trabajo query
y establece las propiedades siguientes:
- Especifica la tabla de destino con la propiedad
destinationTable
. - Establece la disposición de escritura de la tabla de destino en
WRITE_APPEND
con la propiedadwriteDisposition
. - Especifica la opción de actualización del esquema con la propiedad
schemaUpdateOptions
. - Especifica la consulta de SQL estándar mediante la propiedad
query
.
Go
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.