Declaraciones de lenguaje de definición de datos (DDL) en SQL estándar
Las declaraciones del lenguaje de definición de datos (DDL) te permiten crear y modificar recursos de BigQuery mediante la sintaxis de consultas SQL estándar. Puedes usar comandos de DDL para crear, modificar y borrar recursos, como los siguientes: tablas, clonaciones de tablas, instantáneas de tablas, vistas, funciones definidas por el usuario (UDF) y políticas de acceso a nivel de fila.
Permisos necesarios
Si quieres crear un trabajo que ejecute una declaración DDL, debes tener el permiso bigquery.jobs.create
para el proyecto en el que ejecutas el trabajo.
Cada declaración DDL también requiere permisos específicos sobre los recursos afectados, que se documentan en cada declaración.
Funciones de IAM
Las funciones predefinidas de IAM bigquery.user
,
bigquery.jobUser
y bigquery.admin
incluyen el permiso
bigquery.jobs.create
requerido.
Para obtener más información sobre las funciones de IAM en BigQuery, consulta Funciones y permisos predefinidos o la referencia de permisos de IAM.
Ejecuta declaraciones DDL
Puedes ejecutar declaraciones de DDL con Cloud Console, con la herramienta de línea de comandos de bq
, una llamada a la API de REST de jobs.query
o de manera programática con las bibliotecas cliente de la API de BigQuery.
Console
Ve a la página de BigQuery en Cloud Console.
Haz clic en Redactar consulta nueva.
Ingresa la declaración DDL en el área de texto Editor de consultas. Por ejemplo:
CREATE TABLE mydataset.newtable ( x INT64 )
Haz clic en Ejecutar.
bq
Ingresa el comando bq query
y proporciona la declaración DDL como parámetro de consulta. Establece la marca use_legacy_sql
en false
.
bq query --use_legacy_sql=false \ 'CREATE TABLE mydataset.newtable ( x INT64 )'
API
Llama al método jobs.query
y proporciona la declaración de DDL en la propiedad query
del cuerpo de la solicitud.
La funcionalidad de DDL amplía la información que muestra un recurso Jobs.
statistics.query.statementType
incluye los siguientes valores adicionales para la compatibilidad con DDL:
CREATE_TABLE
CREATE_TABLE_AS_SELECT
DROP_TABLE
CREATE_VIEW
DROP_VIEW
statistics.query
tiene 2 campos adicionales:
ddlOperationPerformed
: la operación de DDL realizada, que posiblemente depende de la existencia del objetivo de DDL. Entre los valores actuales, se incluyen los siguientes:CREATE
: la consulta creó el objetivo de DDL.SKIP
: no-ops. Ejemplos: se envióCREATE TABLE IF NOT EXISTS
y la tabla existe. O se envióDROP TABLE IF EXISTS
y la tabla no existe.REPLACE
: la consulta reemplazó el objetivo de DDL. Ejemplo: se envióCREATE OR REPLACE TABLE
y la tabla ya existe.DROP
: la consulta borró el objetivo de DDL.
ddlTargetTable
: cuando envías una declaraciónCREATE TABLE/VIEW
oDROP TABLE/VIEW
, la tabla de destino se muestra como un objeto con 3 campos:- "projectId": string
- "datasetId": string
- "tableId": string
Java
Llama al método BigQuery.create()
para iniciar un trabajo de consulta. Llama al método Job.waitFor()
para esperar a que finalice la consulta de DDL.
Node.js
Python
Llama al método Client.query()
para iniciar un trabajo de consulta. Llama al método QueryJob.result()
para esperar a que finalice la consulta de DDL.
Declaración CREATE SCHEMA
Crea un conjunto de datos nuevo.
Sintaxis
CREATE SCHEMA [ IF NOT EXISTS ] [project_name.]dataset_name [DEFAULT COLLATE collate_specification] [OPTIONS(schema_option_list)]
Argumentos
IF NOT EXISTS
: Si existe un conjunto de datos con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.DEFAULT COLLATE collate_specification
: cuando se crea una tabla nueva en el esquema, la tabla hereda una especificación de la intercalación predeterminada, a menos que se especifique una especificación de la intercalación de forma explícita para una columna.Si quitas o cambias esta especificación de la intercalación más adelante con la declaración
ALTER SCHEMA
, esto no cambiará las especificaciones de intercalación existentes en este esquema. Si deseas actualizar una especificación de la intercalación existente en un esquema, debes modificar la columna que contiene la especificación.project_name
: Es el nombre del proyecto en el que crearás el conjunto de datos. La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.dataset_name
: El nombre del conjunto de datos que se borrará.schema_option_list
: Una lista de opciones para crear el conjunto de datos.
Detalles
El conjunto de datos se crea en la ubicación que especificas en la configuración de la consulta. Para obtener más información, consulta Especifica tu ubicación.
Para obtener más información sobre la creación de un conjunto de datos, consulta Crea conjuntos de datos. Para obtener más información sobre las cuotas, consulta Límites de conjuntos de datos.
schema_option_list
La lista de opciones especifica las opciones para el conjunto de datos. Especifica las opciones en el siguiente formato: NAME=VALUE, ...
Se admiten las siguientes opciones:
NAME |
VALUE |
Detalles |
---|---|---|
default_kms_key_name |
STRING |
Especifica la clave predeterminada de Cloud KMS para encriptar los datos de la tabla en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
default_partition_expiration_days |
FLOAT64 |
Especifica la fecha de vencimiento predeterminado, en días, de las particiones de tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
default_table_expiration_days |
FLOAT64 |
Especifica la fecha de vencimiento predeterminado, en días, de las tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
description |
STRING |
Es la descripción del conjunto de datos. |
friendly_name |
STRING |
Es un nombre descriptivo para el conjunto de datos. |
labels |
<ARRAY<STRUCT<STRING, STRING>>> |
Un arreglo de etiquetas para el conjunto de datos, expresado como pares clave-valor. |
location |
STRING |
La ubicación en la que se crea el conjunto de datos. Si no especificas esta opción, el conjunto de datos se creará en la ubicación en la que se ejecuta la consulta. Si especificas esta opción y también estableces explícitamente la ubicación para el trabajo de consulta, los dos valores deben coincidir; de lo contrario, la consulta fallará. |
max_time_travel_hours |
SMALLINT |
En vista previa Especifica la duración en horas del período del viaje en el tiempo para el conjunto de datos. El valor Para obtener más información sobre el período de viaje en el tiempo, consulta Configura el período de viaje en el tiempo. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.datasets.create |
El proyecto en el que creas el conjunto de datos. |
Ejemplos
Crea un esquema nuevo
En el ejemplo siguiente, se crea un conjunto de datos con un vencimiento predeterminado de la tabla y un conjunto de etiquetas.
CREATE SCHEMA mydataset OPTIONS( location="us", default_table_expiration_days=3.75, labels=[("label1","value1"),("label2","value2")] )
Crea un esquema con compatibilidad de intercalación
En el siguiente ejemplo, se crea un conjunto de datos con una especificación de la intercalación.
CREATE SCHEMA mydataset DEFAULT COLLATE 'und:ci'
Declaración CREATE TABLE
Crea una nueva tabla.
Sintaxis
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] TABLE [ IF NOT EXISTS ] table_name [( column[, ...] )] [DEFAULT COLLATE collate_specification] [PARTITION BY partition_expression] [CLUSTER BY clustering_column_list] [OPTIONS(table_option_list)] [AS query_statement]
Argumentos
OR REPLACE
: Reemplaza cualquier tabla con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.TEMP | TEMPORARY
: crea una tabla temporal.IF NOT EXISTS
: Si existe una tabla con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla. En el caso de las tablas temporales, no incluyas el nombre del proyecto ni el nombre del conjunto de datos.column
: La información del esquema de la tabla.collation_specification
: cuando se crea una columna nueva en el esquema y, si la columna no tiene una especificación de la intercalación explícita, la columna hereda esta especificación de la intercalación para los tiposSTRING
.Si quitas o cambias esta especificación de la intercalación más adelante con la declaración
ALTER TABLE
, esto no cambiará las especificaciones de intercalación existentes en esta tabla. Si deseas actualizar una especificación de intercalación existente en una tabla, debes modificar la columna que contiene la especificación.Si la tabla forma parte de un esquema, la especificación de la intercalación predeterminada de esta tabla anula la especificación de la intercalación predeterminada para el esquema.
partition_expression
es una expresión que determina cómo particionar la tabla.clustering_column_list
: Una lista de referencias de columnas separadas por comas que determinan cómo agrupar la tabla en clústeres. No puedes tener intercalaciones en las columnas de esta lista.table_option_list
: Una lista de opciones para crear la tabla.query_statement
: La consulta a partir de la cual se debe crear la tabla. Para ver la sintaxis de la consulta, visita Referencia de la sintaxis de SQL. {: #query_statement } Si se usa una especificación de la intercalación en esta tabla, la intercalación pasa por esta declaración de consulta.
Detalles
Las declaraciones CREATE TABLE
deben cumplir con las siguientes reglas:
- Se permite solo una declaración
CREATE
. - La lista de columnas, la cláusula
as query_statement
o ambas deben estar presentes. - Cuando tanto la lista de columnas como la cláusula
as query_statement
están presentes, BigQuery ignora los nombres en la cláusulaas query_statement
y hace coincidir las columnas con la lista de columnas por posición. - Cuando la cláusula
as query_statement
está presente, pero la lista de columnas está ausente, BigQuery determina los nombres y tipos de columnas a partir de la cláusulaas query_statement
. - Los nombres de las columnas deben especificarse mediante la lista de columnas, la cláusula
as query_statement
o el esquema de la tabla en la cláusulaLIKE
. - No se permiten nombres de columna duplicados.
- Cuando las cláusulas
LIKE
yas query_statement
están presentes, la lista de columnas en la declaración de consulta debe coincidir con las columnas de la tabla a las que hace referencia la cláusulaLIKE
.
Limitaciones:
- No es posible crear una tabla particionada por tiempo de transferencia a partir del resultado de una consulta. En cambio, usa una declaración DDL
CREATE TABLE
para crear la tabla y, luego, utiliza una Declaración DMLINSERT
a fin de ingresar datos. - No es posible utilizar el modificador
OR REPLACE
para reemplazar una tabla con un tipo diferente de partición. En su lugar,DROP
la tabla y, luego, usa una declaraciónCREATE TABLE ... AS SELECT ...
para recrearla.
Esta declaración admite las siguientes variantes:
CREATE TABLE LIKE
: Crea una tabla con el mismo esquema que una tabla existente.CREATE TABLE COPY
: Para crear una tabla, copia el esquema y los datos de una tabla existente.
column
(column_name column_schema[, ...])
contiene la información de esquema de la tabla en una lista separada por comas:
column := column_name column_schema column_schema := { simple_type [NOT NULL] | STRUCT<field_list> [NOT NULL] | ARRAY<array_element_schema> } [OPTIONS(column_option_list)] field_list := field_name column_schema [, ...] array_element_schema := { simple_type | STRUCT<field_list> } [NOT NULL] simple_type := { data_type | STRING COLLATE collate_specification }
column_name
es el nombre de la columna. Los nombres de columnas deben cumplir los siguientes requisitos:- Contener solo letras (a-z, A-Z), números (0-9) o guiones bajos (_)
- Comenzar con una letra o un guion bajo
- Tener un máximo de 300 caracteres
column_schema
es similar a un tipo de datos, pero admite una restricciónNOT NULL
opcional para tipos distintos deARRAY
.column_schema
también admite opciones en columnas de nivel superior y camposSTRUCT
.column_schema
solo se puede usar en la lista de definición de columnas de las declaracionesCREATE TABLE
. No se puede usar como tipo en las expresiones. Parasimple_type
es cualquier tipo de datos compatible aparte deSTRUCT
yARRAY
.Si
simple_type
es unaSTRING
, admite una cláusula adicional para la intercalación, que define cómo se puede comparar y ordenar unaSTRING
resultante. La sintaxis se verá de la siguiente manera:STRING COLLATE collate_specification
Si asignaste
DEFAULT COLLATE collate_specification
a la tabla, la especificación de la intercalación de una columna anula la especificación de la tabla.field_list
representa los campos de un struct.field_name
: El nombre del campo struct. Los nombres de los campos struct tienen las mismas restricciones que los nombres de columnas.NOT NULL
: Cuando la restricciónNOT NULL
está presente para una columna o un campo, la columna o el campo se crean con el modoREQUIRED
. Por el contrario, cuando la restricciónNOT NULL
está ausente, la columna o el campo se crean con el modoNULLABLE
.Las columnas y los campos del tipo
ARRAY
no son compatibles con el modificadorNOT NULL
. Por ejemplo, uncolumn_schema
deARRAY<INT64> NOT NULL
no es válido, ya que las columnasARRAY
tienen el modoREPEATED
y pueden estar vacías, pero no pueden serNULL
. Un elemento ARRAY en una tabla nunca puede serNULL
, independientemente de si se especifica la restricciónNOT NULL
. Por ejemplo,ARRAY<INT64>
es equivalente aARRAY<INT64 NOT NULL>
.El atributo
NOT NULL
delcolumn_schema
de una tabla no se propaga a través de las consultas en la tabla. Si la tablaT
contiene una columna declarada comox INT64 NOT NULL
, por ejemplo,CREATE TABLE dataset.newtable AS SELECT x FROM T
crea una tabla llamadadataset.newtable
en la quex
esNULLABLE
.
partition_expression
PARTITION BY
es una cláusula opcional que controla la partición de la tabla. partition_expression
es una expresión que determina cómo particionar la tabla. La expresión de partición puede contener los siguientes valores:
_PARTITIONDATE
. Partición por tiempo de transferencia con particiones diarias. Esta sintaxis no se puede usar con la cláusulaAS query_statement
.DATE(_PARTITIONTIME)
: Equivale a_PARTITIONDATE
. Esta sintaxis no se puede usar con la cláusulaAS query_statement
.<date_column>
. Partición por una columnaDATE
con particiones diarias.DATE({ <timestamp_column> | <datetime_column> })
. Partición por una columnaTIMESTAMP
oDATETIME
con particiones diarias.DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR })
. Partición por una columnaDATETIME
con el tipo de partición especificado.TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR })
. Partición por una columnaTIMESTAMP
con el tipo de partición especificado.TIMESTAMP_TRUNC(_PARTITIONTIME, { DAY | HOUR | MONTH | YEAR })
. Partición por tiempo de transferencia con el tipo de partición especificado. Esta sintaxis no se puede usar con la cláusulaAS query_statement
.DATE_TRUNC(<date_column>, { MONTH | YEAR })
. Partición por una columnaDATE
con el tipo de partición especificado.RANGE_BUCKET(<int64_column>, GENERATE_ARRAY(<start>, <end>[, <interval>]))
. Partición por una columna de números enteros con el rango especificado, en el que:start
es el inicio de la partición por rango (inclusivo).end
es el final de la partición por rango (exclusivo).interval
es el ancho de cada rango dentro de la partición. El valor predeterminado es 1.
clustering_column_list
CLUSTER BY
es una cláusula opcional que controla el agrupamiento en clústeres de la tabla.
clustering_column_list
es una lista separada por comas que determina cómo agrupar la tabla. La lista de columnas de agrupación en clústeres puede contener un máximo de cuatro de estas columnas.
table_option_list
La lista de opciones te permite configurar las opciones de la tabla, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la tabla con el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
partition_expiration_days |
|
Ejemplo: Establece el vencimiento de la partición en días. Para obtener más información, consulta Configura el vencimiento de la partición. De forma predeterminada, las particiones no se vencen. Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.expirationMs, pero utiliza días en lugar de milisegundos. Un día equivale a 86,400,000 milisegundos o 24 horas. Esta propiedad solo se puede configurar si la tabla está particionada. |
require_partition_filter |
|
Ejemplo: Especifica si las consultas en esta tabla deben incluir un filtro de predicado que filtre la columna de partición. Si deseas obtener más información, consulta Configura requisitos para filtros de partición. El valor predeterminado es Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.requirePartitionFilter. Esta propiedad solo se puede configurar si la tabla está particionada. |
kms_key_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla encryptionConfiguration.kmsKeyName. Para obtener más detalles, consulta Cómo proteger los datos con claves de Cloud KMS. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
VALUE
es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Si VALUE
se evalúa como NULL
, se ignora la opción correspondiente NAME
en la declaración CREATE TABLE
.
column_option_list
La column_option_list
de column_schema
te permite especificar opciones de campo o columna opcionales. Las opciones de columna tienen la misma sintaxis y los mismos requisitos que las opciones de tabla, pero la lista de elementos NAME
y VALUE
difiere:
NAME |
VALUE |
Detalles |
---|---|---|
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla schema.fields[].description. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la tabla. |
Además, la cláusula OR REPLACE
requiere los permisos bigquery.tables.update
y bigquery.tables.updateData
.
Si la cláusula OPTIONS
incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
Crea una tabla nueva
En el siguiente ejemplo, se crea una tabla particionada llamada newtable
en mydataset
.
CREATE TABLE mydataset.newtable ( x INT64 OPTIONS(description="An optional INTEGER field"), y STRUCT< a ARRAY<STRING> OPTIONS(description="A repeated STRING field"), b BOOL > ) PARTITION BY _PARTITIONDATE OPTIONS( expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC", partition_expiration_days=1, description="a table that expires in 2025, with each partition living for 24 hours", labels=[("org_unit", "development")] )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.newtable
, el calificador de tabla podría ser `myproject.mydataset.newtable`
.
Si el nombre de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.table
La tabla usa las siguientes partition_expression
para particionar la tabla: PARTITION BY _PARTITIONDATE
. Esta expresión particiona la tabla con la fecha en la seudocolumna _PARTITIONDATE
.
El esquema de la tabla contiene dos columnas:
- x: un número entero, con la descripción “Un campo opcional de NÚMERO ENTERO”
y: UNA STRUCT que contiene dos columnas:
- a: un arreglo de strings, con la descripción “Un campo de STRING repetido”
- b: un valor booleano
La lista de opciones de la tabla especifica lo siguiente:
- Tiempo de vencimiento de la tabla: 1 de enero de 2025, a las 00:00:00 UTC
- Vencimiento de la partición: 1 día
- Descripción:
A table that expires in 2025
- Etiqueta
org_unit = development
Crea una tabla nueva a partir de una tabla existente
En el siguiente ejemplo, se crea una tabla llamada top_words
en mydataset
a partir de una consulta:
CREATE TABLE mydataset.top_words OPTIONS( description="Top ten words per Shakespeare corpus" ) AS SELECT corpus, ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words FROM bigquery-public-data.samples.shakespeare GROUP BY corpus;
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.top_words
, el calificador de tabla podría ser `myproject.mydataset.top_words`
.
Si el nombre de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.table
El esquema de la tabla contiene 2 columnas:
- corpus: el nombre de un corpus de Shakespeare
top_words : un
ARRAY
deSTRUCT
que contiene 2 campos:word
(unaSTRING
) yword_count
(unINT64
con el recuento de palabras )
La lista de opciones de la tabla especifica lo siguiente:
- Descripción:
Top ten words per Shakespeare corpus
Crea una tabla solo si no existe
En el siguiente ejemplo, se crea una tabla llamada newtable
en mydataset
solo si no existe una tabla llamada newtable
en mydataset
. Si el nombre de la tabla existe en el conjunto de datos, no se muestra ningún error y no se realiza ninguna acción.
CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>) OPTIONS( expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC", description="a table that expires in 2025", labels=[("org_unit", "development")] )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.newtable
, el calificador de tabla podría ser `myproject.mydataset.newtable`
.
El esquema de la tabla contiene 2 columnas:
- x: un número entero
y: un STRUCT que contiene a (un arreglo de strings) y b (un valor booleano)
La lista de opciones de la tabla especifica lo siguiente:
- Hora de vencimiento: 1 de enero de 2025, a las 00:00:00 UTC
- Descripción:
A table that expires in 2025
- Etiqueta
org_unit = development
Crea o reemplaza una tabla
En el siguiente ejemplo, se crea una tabla llamada newtable
en mydataset
y, si newtable
existe en mydataset
, se la reemplaza por una tabla vacía.
CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>) OPTIONS( expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC", description="a table that expires in 2025", labels=[("org_unit", "development")] )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.newtable
, el calificador de tabla podría ser `myproject.mydataset.newtable`
.
El esquema de la tabla contiene 2 columnas:
- x: un número entero
y: un STRUCT que contiene a (un arreglo de strings) y b (un valor booleano)
La lista de opciones de la tabla especifica lo siguiente:
- Hora de vencimiento: 1 de enero de 2025, a las 00:00:00 UTC
- Descripción:
A table that expires in 2025
- Etiqueta
org_unit = development
Crea una tabla con columnas REQUIRED
En el siguiente ejemplo, se crea una tabla llamada newtable
en mydataset
. El modificador NOT
NULL
en la lista de definición de columnas de una declaración CREATE TABLE
especifica que una columna o un campo se crea en modo REQUIRED
.
CREATE TABLE mydataset.newtable ( x INT64 NOT NULL, y STRUCT< a ARRAY<STRING>, b BOOL NOT NULL, c FLOAT64 > NOT NULL, z STRING )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.newtable
, el calificador de tabla podría ser `myproject.mydataset.newtable`
.
Si el nombre de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.table
El esquema de la tabla contiene 3 columnas:
- x: un número entero
REQUIRED
- y: un STRUCT
REQUIRED
que contiene a (un arreglo de strings), b (un valor booleanoREQUIRED
) y c (un valor flotanteNULLABLE
) z: una string
NULLABLE
Crea una tabla con compatibilidad de intercalación
En los siguientes ejemplos, se crea una tabla llamada newtable
en mydataset
con las columnas a
, b
, c
y un struct con los campos x
y y
. .
Todos los esquemas de columnas STRING
en esta tabla se recopilan con 'und:ci'
:
CREATE TABLE mydataset.newtable ( a STRING, b STRING, c STRUCT< x FLOAT64 y ARRAY<STRING> > ) DEFAULT COLLATE 'und:ci';
Solo b
y y
se intercalan con 'und:ci'
:
CREATE TABLE mydataset.newtable ( a STRING, b STRING COLLATE 'und:ci', c STRUCT< x FLOAT64 y ARRAY<STRING COLLATE 'und:ci'> > );
Crea una tabla con tipos de datos con parámetros
En el siguiente ejemplo, se crea una tabla llamada newtable
en mydataset
. Los
parámetros entre paréntesis especifican que la columna contiene un tipo de datos
con parámetros. Consulta Tipos de datos con parámetros
para obtener más información al respecto.
CREATE TABLE mydataset.newtable ( x STRING(10), y STRUCT< a ARRAY<BYTES(5)>, b NUMERIC(15, 2), c FLOAT64 >, z BIGNUMERIC(35) )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. En lugar de
mydataset.newtable
, el calificador de tabla debe ser
`myproject.mydataset.newtable`
.
Si el nombre de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.table
El esquema de la tabla contiene 3 columnas:
- x: Una string con parámetros, con una longitud máxima de 10
- y: Un STRUCT que contiene a (un arreglo de bytes con parámetros, con una longitud máxima de 5), b (un valor NUMERIC con parámetros, con una precisión máxima de 15 y una escala máxima de 2) y c (un número de punto flotante)
- z: un valor BIGNUMERIC con parámetros, con una precisión máxima de 35 y una escala máxima de 0
Crea una tabla con particiones
En el siguiente ejemplo, se crea una tabla particionada llamada newtable
en mydataset
mediante una columna DATE
.
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS( partition_expiration_days=3, description="a table partitioned by transaction_date" )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.newtable
, el calificador de tabla podría ser `myproject.mydataset.newtable`
.
El esquema de la tabla contiene 2 columnas:
- transaction_id: un número entero
- transaction_date: una fecha
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento de la partición: tres días
- Descripción:
A table partitioned by transaction_date
Crea una tabla con particiones a partir del resultado de una consulta
En el siguiente ejemplo, se crea una tabla particionada llamada days_with_rain
en mydataset
mediante una columna DATE
.
CREATE TABLE mydataset.days_with_rain PARTITION BY date OPTIONS ( partition_expiration_days=365, description="weather stations with precipitation, partitioned by day" ) AS SELECT DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date, (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations WHERE stations.usaf = stn) AS station_name, -- Stations can have multiple names prcp FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather WHERE prcp != 99.9 -- Filter unknown values AND prcp > 0 -- Filter stations/days with no precipitation
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.days_with_rain
, el calificador de tabla podría ser `myproject.mydataset.days_with_rain`
.
El esquema de la tabla contiene 2 columnas:
- date: la
DATE
de recopilación de los datos - station_name: el nombre de la estación meteorológica como un valor
STRING
- prcp: el volumen de precipitaciones en pulgadas como un valor
FLOAT64
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento de la partición: un año
- Descripción:
Weather stations with precipitation, partitioned by day
Crea una tabla agrupada en clústeres
Ejemplo 1
En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable
en mydataset
. La tabla es una tabla particionada; particionada por una columna TIMESTAMP
y agrupada por una columna STRING
llamada customer_id
.
CREATE TABLE mydataset.myclusteredtable ( timestamp TIMESTAMP, customer_id STRING, transaction_amount NUMERIC ) PARTITION BY DATE(timestamp) CLUSTER BY customer_id OPTIONS ( partition_expiration_days=3, description="a table clustered by customer_id" )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.myclusteredtable
, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`
.
El esquema de la tabla contiene 3 columnas:
- marca de tiempo: la fecha y hora de recopilación de los datos como
TIMESTAMP
- customer_id: El ID de cliente como
STRING
- transaction_amount: el importe de la transacción como
NUMERIC
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento de la partición: 3 días
- Descripción:
A table clustered by customer_id
Ejemplo 2
En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable
en mydataset
. Es una tabla particionada por tiempo de transferencia.
CREATE TABLE mydataset.myclusteredtable ( customer_id STRING, transaction_amount NUMERIC ) PARTITION BY DATE(_PARTITIONTIME) CLUSTER BY customer_id OPTIONS ( partition_expiration_days=3, description="a table clustered by customer_id" )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.myclusteredtable
, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`
.
El esquema de la tabla contiene 2 columnas:
- customer_id: El ID de cliente como
STRING
- transaction_amount: el importe de la transacción como
NUMERIC
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento de la partición: 3 días
- Descripción:
A table clustered by customer_id
Ejemplo 3
En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable
en mydataset
. La tabla no está particionada.
CREATE TABLE mydataset.myclusteredtable ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id OPTIONS ( description="a table clustered by customer_id" )
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.myclusteredtable
, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`
.
El esquema de la tabla contiene 2 columnas:
- customer_id: El ID de cliente como
STRING
- transaction_amount: el importe de la transacción como
NUMERIC
La lista de opciones de la tabla especifica lo siguiente:
- Descripción:
A table clustered by customer_id
Crea una tabla agrupada en clústeres a partir del resultado de una consulta
Ejemplo 1
En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable
en mydataset
con el resultado de una consulta. Se trata de una tabla particionada por una columna TIMESTAMP
.
CREATE TABLE mydataset.myclusteredtable ( timestamp TIMESTAMP, customer_id STRING, transaction_amount NUMERIC ) PARTITION BY DATE(timestamp) CLUSTER BY customer_id OPTIONS ( partition_expiration_days=3, description="a table clustered by customer_id" ) AS SELECT * FROM mydataset.myothertable
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.myclusteredtable
, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`
.
El esquema de la tabla contiene 3 columnas:
- marca de tiempo: la fecha y hora de recopilación de los datos como
TIMESTAMP
- customer_id: El ID de cliente como
STRING
- transaction_amount: el importe de la transacción como
NUMERIC
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento de la partición: 3 días
- Descripción:
A table clustered by customer_id
Ejemplo 2
En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable
en mydataset
con el resultado de una consulta. La tabla no está particionada.
CREATE TABLE mydataset.myclusteredtable ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id OPTIONS ( description="a table clustered by customer_id" ) AS SELECT * FROM mydataset.myothertable
Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id
contiene caracteres especiales: `project_id.dataset.table`
. Por lo tanto, en lugar de mydataset.myclusteredtable
, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`
.
El esquema de la tabla contiene 2 columnas:
- customer_id: El ID de cliente como
STRING
- transaction_amount: el importe de la transacción como
NUMERIC
La lista de opciones de la tabla especifica lo siguiente:
- Descripción:
A table clustered by customer_id
Crea una tabla temporal
En el siguiente ejemplo, se crea una tabla temporal llamada Example
y se insertan
valores en ella.
CREATE TEMP TABLE Example
(
x INT64,
y STRING
);
INSERT INTO Example
VALUES (5, 'foo');
INSERT INTO Example
VALUES (6, 'bar');
SELECT *
FROM Example;
Esta secuencia de comandos muestra el siguiente resultado:
+-----+---+-----+
| Row | x | y |
+-----+---|-----+
| 1 | 5 | foo |
| 2 | 6 | bar |
+-----+---|-----+
Declaración CREATE TABLE LIKE
Crea una tabla nueva con todos los mismos metadatos de otra tabla.
Sintaxis
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name LIKE [[project_name.]dataset_name.]source_table_name ... [OPTIONS(table_option_list)]
Detalles
Además del uso de la cláusula LIKE
en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE
.
La declaración CREATE TABLE LIKE
solo copia los metadatos de la tabla de origen.
Puedes usar la cláusula as query_statement
para incluir datos en la tabla nueva.
La tabla nueva no tiene relación con la tabla fuente después de su creación. Por lo tanto, las modificaciones en la tabla de origen no se propagarán a la tabla nueva.
De forma predeterminada, la tabla nueva hereda los metadatos de partición, agrupamiento en clústeres y opciones de la tabla de origen. Puedes personalizar los metadatos en la tabla nueva mediante las cláusulas opcionales en la instrucción de SQL. Por ejemplo, si deseas especificar un conjunto de opciones diferente para la tabla nueva, incluye la cláusula OPTIONS
con una lista de opciones y valores. Este comportamiento coincide con el de ALTER TABLE SET OPTIONS
.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la tabla. |
bigquery.tables.get |
La tabla de origen. |
Además, la cláusula OR REPLACE
requiere los permisos bigquery.tables.update
y bigquery.tables.updateData
.
Si la cláusula OPTIONS
incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
Ejemplo 1
En el siguiente ejemplo, se crea una tabla nueva llamada newtable
en mydataset
con los mismos metadatos que sourcetable
:
CREATE TABLE mydataset.newtable LIKE mydataset.sourcetable
Ejemplo 2
En el siguiente ejemplo, se crea una tabla nueva llamada newtable
en mydataset
con los mismos metadatos que sourcetable
y los datos de la declaración SELECT
:
CREATE TABLE mydataset.newtable LIKE mydataset.sourcetable AS SELECT * FROM mydataset.myothertable
Declaración CREATE TABLE COPY
Crea una tabla con los mismos metadatos y datos que otra tabla. La tabla de origen puede ser una tabla estándar, una clonación de tabla o una instantánea de tabla.
Sintaxis
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name COPY source_table_name ... [OPTIONS(table_option_list)]
Detalles
Además del uso de la cláusula COPY
en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE
.
La declaración CREATE TABLE COPY
copia los metadatos y los datos de la tabla de origen.
La tabla nueva hereda la partición y el agrupamiento en clústeres de la tabla de origen. De forma predeterminada, los metadatos de las opciones de tabla de la tabla de origen también se heredan, pero puedes anular las opciones de tabla con la cláusula OPTIONS
. El comportamiento es equivalente a ejecutar ALTER TABLE SET OPTIONS
después de copiar la tabla.
La tabla nueva no tiene relación con la tabla de origen después de su creación. Las modificaciones de la tabla de origen no se propagan a la tabla nueva.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la instantánea de la tabla. |
bigquery.tables.get |
La tabla de origen. |
bigquery.tables.getData |
La tabla de origen. |
Además, la cláusula OR REPLACE
requiere los permisos bigquery.tables.update
y bigquery.tables.updateData
.
Si la cláusula OPTIONS
incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Declaración CREATE SNAPSHOT TABLE
Crea una instantánea de tabla a partir de una tabla de origen. La tabla de origen puede ser una tabla, una clonación de tabla o una instantánea de tabla.
Sintaxis
CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] table_snapshot_name CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression] [OPTIONS(snapshot_option_list)]
Argumentos
IF NOT EXISTS
: Si existe una instantánea de tabla o algún otro recurso de tabla con el mismo nombre, la declaraciónCREATE
no tiene efecto.table_snapshot_name
: Es el nombre de la tabla que deseas crear. El nombre de la instantánea de la tabla debe ser único en cada conjunto de datos. Consulta Sintaxis de ruta de la tabla.source_table_name
: Es el nombre de la tabla de la que deseas realizar una instantánea o la instantánea que deseas copiar. Consulta Sintaxis de ruta de la tabla.Si la tabla de origen es estándar, BigQuery crea una instantánea de tabla de la tabla de origen. Si la tabla de origen es una instantánea de tabla, BigQuery crea una copia de la instantánea de la tabla.
FOR SYSTEM_TIME AS OF
te permite seleccionar la versión de la tabla que estaba vigente en el momento especificado portimestamp_expression
. Solo se puede usar cuando se crea una instantánea de una tabla. No se puede usar cuando se hace una copia de una instantánea de tabla.snapshot_option_list
: Opciones adicionales de creación de instantáneas de tablas, como una etiqueta, y una fecha y hora de vencimiento.
Detalles
Las declaraciones CREATE SNAPSHOT TABLE
deben cumplir con las siguientes reglas:
- Se permite solo una declaración
CREATE
. - La tabla de origen debe ser una de las siguientes:
- Una tabla
- Una clonación de tabla
- Una instantánea de la tabla
- La cláusula
FOR SYSTEM_TIME AS OF
solo se puede usar cuando se crea una instantánea de tabla o una clonación de tabla. No se puede usar cuando se hace una copia de una instantánea de tabla.
snapshot_option_list
La lista de opciones te permite configurar las opciones de instantáneas de tablas, como una etiqueta y una hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la instantánea de la tabla en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla |
VALUE
es una expresión constante que contiene solo literales, parámetros de consulta y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Si VALUE
se evalúa como NULL
, se ignora la opción correspondiente NAME
en la declaración CREATE SNAPSHOT TABLE
.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create
|
El conjunto de datos en el que se crea la instantánea de la tabla. |
bigquery.tables.createSnapshot |
La tabla de origen. |
bigquery.tables.get |
La tabla de origen. |
bigquery.tables.getData |
La tabla de origen. |
Ejemplos
Crea una instantánea de la tabla: falla si ya existe
En el siguiente ejemplo, se crea una instantánea de la tabla myproject.mydataset.mytable
. La instantánea de la tabla se crea en el conjunto de datos mydataset
y se llama mytablesnapshot
:
CREATE SNAPSHOT TABLE `myproject.mydataset.mytablesnapshot` CLONE `myproject.mydataset.mytable` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR), friendly_name="my_table_snapshot", description="A table snapshot that expires in 2 days", labels=[("org_unit", "development")] )
Si el nombre de la instantánea de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: myproject.mydataset.mytablesnapshot
La lista de opciones de la tabla especifica lo siguiente:
- Hora de vencimiento: 48 horas después de la creación de la instantánea de la tabla
- Nombre descriptivo
my_table_snapshot
- Descripción:
A table snapshot that expires in 2 days
- Etiqueta
org_unit = development
Crea una instantánea de la tabla: se ignora si ya existe
En el siguiente ejemplo, se crea una instantánea de la tabla myproject.mydataset.mytable
. La instantánea de la tabla se crea en el conjunto de datos mydataset
y se llama mytablesnapshot
:
CREATE SNAPSHOT TABLE IF NOT EXISTS `myproject.mydataset.mytablesnapshot` CLONE `myproject.mydataset.mytable` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR), friendly_name="my_table_snapshot", description="A table snapshot that expires in 2 days" labels=[("org_unit", "development")] )
La lista de opciones de la tabla especifica lo siguiente:
- Hora de vencimiento: 48 horas después de la creación de la instantánea de la tabla
- Nombre descriptivo
my_table_snapshot
- Descripción:
A table snapshot that expires in 2 days
- Etiqueta
org_unit = development
Si el nombre de la instantánea de la tabla ya existe en el conjunto de datos, no se realiza ninguna acción y no se muestra ningún error.
Para obtener información sobre cómo restablecer instantáneas de tablas, consulta CREATE TABLE CLONE
.
Para obtener información sobre cómo quitar instantáneas de tablas, consulta DROP SNAPSHOT TABLE
.
Declaración CREATE TABLE CLONE
Crea una clonación de tabla a partir de una tabla de origen. La tabla de origen puede ser una tabla, una clonación de tabla o una instantánea de tabla.
Sintaxis
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] destination_table_name CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression] ... [OPTIONS(table_option_list)]
Detalles
Además del uso de la cláusula CLONE
en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE
.
Argumentos
OR REPLACE
: Reemplaza cualquier tabla con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si el nombre de la tabla de destino especificado ya existe, la declaraciónCREATE
no tiene ningún efecto. No puede aparecer conOR REPLACE
.
destination_table_name
es el nombre de la tabla que deseas crear.
El nombre de la tabla debe ser único por conjunto de datos. El nombre del conjunto de datos puede contener lo siguiente:
- Hasta 1,024 caracteres
- Contiene letras (mayúsculas o minúsculas), números o guiones bajos
OPTIONS(table_option_list)
te permite especificar opciones adicionales de creación de vistas, como una etiqueta y una fecha y hora de vencimiento.
source_table_name
es el nombre de la tabla de origen.
Las declaraciones CREATE TABLE CLONE
deben cumplir con las siguientes reglas:
- Se permite solo una declaración
CREATE
. - La tabla que se clona debe ser una tabla, una clonación de tabla o una instantánea de tabla.
OPTIONS
Las opciones CREATE TABLE CLONE
son las mismas que las opciones de CREATE TABLE
.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la clonación de tabla. |
bigquery.tables.get |
La tabla de origen. |
bigquery.tables.getData |
La tabla de origen. |
bigquery.tables.restoreSnapshot |
La tabla de origen (obligatorio solo si la tabla de origen es una instantánea de tabla). |
Además, la cláusula OR REPLACE
requiere los permisos bigquery.tables.update
y bigquery.tables.updateData
.
Si la cláusula OPTIONS
incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
Restablece una instantánea de la tabla: falla si la tabla de destino ya existe
En el siguiente ejemplo, se crea la tabla myproject.mydataset.mytable
a partir de la instantánea de la tabla myproject.mydataset.mytablesnapshot
:
CREATE TABLE `myproject.mydataset.mytable` CLONE `myproject.mydataset.mytablesnapshot` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY), friendly_name="my_table", description="A table that expires in 1 year", labels=[("org_unit", "development")] )
Si el nombre de la tabla ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: myproject.mydataset.mytable.
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento: 365 días después de la fecha de creación de la tabla
- Nombre descriptivo
my_table
- Descripción:
A table that expires in 1 year
- Etiqueta
org_unit = development
Crea una clonación de tabla: ignora si la tabla de destino ya existe
En el siguiente ejemplo, se crea la clonación de tabla myproject.mydataset.mytableclone
a partir de la tabla myproject.mydataset.mytable
:
CREATE TABLE IF NOT EXISTS `myproject.mydataset.mytableclone` CLONE `myproject.mydataset.mytable` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY), friendly_name="my_table", description="A table that expires in 1 year", labels=[("org_unit", "development")] )
La lista de opciones de la tabla especifica lo siguiente:
- Vencimiento: 365 días después de la fecha de creación de la tabla
- Nombre descriptivo
my_table
- Descripción:
A table that expires in 1 year
- Etiqueta
org_unit = development
Si el nombre de la tabla ya existe en el conjunto de datos, no se realiza ninguna acción y no se muestra ningún error.
Para obtener información sobre cómo crear una copia de una tabla, consulta CREATE TABLE COPY
.
Para obtener información sobre cómo crear una instantánea de una tabla, consulta CREATE SNAPSHOT TABLE
.
Declaración CREATE VIEW
Crea una nueva vista.
Sintaxis
CREATE [ OR REPLACE ] VIEW [ IF NOT EXISTS ] view_name [(view_column_name_list)] [OPTIONS(view_option_list)] AS query_expression
Argumentos
OR REPLACE
: Reemplaza cualquier tabla con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe una vista o algún otro recurso de tabla con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.view_name
: Es el nombre de la vista que crearás. Consulta Sintaxis de ruta de la tabla.view_column_name_list
te permite especificar de forma explícita los nombres de las columnas de la vista, que pueden ser alias de los nombres de las columnas en la consulta de SQL subyacente.view_option_list
: Opciones adicionales de creación de vistas, como una etiqueta, y una fecha y hora de vencimiento.query_expression
es la expresión de consulta de SQL estándar utilizada para definir la vista.
Detalles
Las declaraciones CREATE VIEW
deben cumplir con las siguientes reglas:
- Se permite solo una declaración
CREATE
.
view_column_name_list
La lista de nombres de columnas de la vista es opcional. Los nombres deben ser únicos, pero no tienen que ser los mismos que los nombres de las columnas de la consulta de SQL subyacente. Por ejemplo, si tu vista se crea con la siguiente declaración:
CREATE VIEW mydataset.age_groups(age, count) AS SELECT age, COUNT(*)
FROM mydataset.people
group by age;
Luego, puedes consultarlo con lo siguiente:
SELECT age, count from mydataset.age_groups;
La cantidad de columnas en la lista de nombres de columnas debe coincidir con la cantidad de columnas en la consulta de SQL subyacente. Si se agregan o se suprimen las columnas de la tabla de la consulta de SQL subyacente, la vista deja de ser válida y se debe volver a crear. Por ejemplo, si la columna age
se descarta de la tabla mydataset.people
, la vista creada en el ejemplo anterior deja de ser válida.
view_option_list
La lista de opciones te permite establecer las opciones de la vista, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la vista en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
VALUE
es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Si VALUE
se evalúa como NULL
, se ignora la opción correspondiente NAME
en la declaración CREATE VIEW
.
Proyecto predeterminado en el cuerpo de la vista
Si la vista se crea en el mismo proyecto que se usa para ejecutar la declaración CREATE VIEW
, el cuerpo de la vista query_expression
puede hacer referencia a entidades sin especificar el proyecto. El proyecto predeterminado es aquel al que pertenece la vista. Considera la siguiente consulta de muestra.
CREATE VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;
Después de ejecutar la consulta CREATE VIEW
anterior en el proyecto myProject
, puedes ejecutar la consulta SELECT * FROM myProject.myDataset.myView
. Sin importar qué proyecto elijas para ejecutar esta consulta SELECT
, la tabla anotherDataset.myTable
a la que se hace referencia siempre se resuelve en el proyecto myProject
.
Si la vista no se crea en el mismo proyecto que se usa para ejecutar la declaración CREATE VIEW
, todas las referencias en el cuerpo de la vista query_expression
deben calificarse con los ID del proyecto. Por ejemplo, la consulta CREATE VIEW
de muestra anterior no es válida si se ejecuta en un proyecto diferente de myProject
.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la vista. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.tables.update
.
Si la cláusula OPTIONS
incluye una fecha de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
Crea una vista nueva
En el siguiente ejemplo, se crea una vista llamada newview
en mydataset
.
CREATE VIEW `myproject.mydataset.newview` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR), friendly_name="newview", description="a view that expires in 2 days", labels=[("org_unit", "development")] ) AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
Si el nombre de la vista existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.table
La vista se define con la siguiente consulta de SQL estándar:
SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La lista de opciones de vista especifica lo siguiente:
- Vencimiento: 48 horas después de la creación de la vista
- Nombre descriptivo
newview
- Descripción:
A view that expires in 2 days
- Etiqueta
org_unit = development
Crea una vista solo si no existe
En el siguiente ejemplo, se crea una vista llamada newview
en mydataset
solo si no existe una vista con el nombre newview
en mydataset
. Si el nombre de la vista existe en el conjunto de datos, no se muestra ningún error ni se realiza ninguna acción.
CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR), friendly_name="newview", description="a view that expires in 2 days", labels=[("org_unit", "development")] ) AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La vista se define con la siguiente consulta de SQL estándar:
SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La lista de opciones de vista especifica lo siguiente:
- Vencimiento: 48 horas después de la creación de la vista
- Nombre descriptivo
newview
- Descripción:
A view that expires in 2 days
- Etiqueta
org_unit = development
Crea o reemplaza una vista
En el siguiente ejemplo, se crea una vista llamada newview
en mydataset
y, si newview
existe en mydataset
, se reemplaza mediante la expresión de consulta especificada.
CREATE OR REPLACE VIEW `myproject.mydataset.newview` OPTIONS( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR), friendly_name="newview", description="a view that expires in 2 days", labels=[("org_unit", "development")] ) AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La vista se define con la siguiente consulta de SQL estándar:
SELECT column_1, column_2, column_3 FROM
myproject.mydataset.mytable
La lista de opciones de vista especifica lo siguiente:
- Vencimiento: 48 horas después de la creación de la vista
- Nombre descriptivo
newview
- Descripción:
A view that expires in 2 days
- Etiqueta
org_unit = development
Declaración CREATE MATERIALIZED VIEW
Crea una vista materializada nueva.
Sintaxis
CREATE [ OR REPLACE ] MATERIALIZED VIEW [ IF NOT EXISTS ] materialized_view_name [PARTITION BY partition_expression] [CLUSTER BY clustering_column_list] [OPTIONS(materialized_view_option_list)] AS query_expression
Argumentos
OR REPLACE
: Reemplaza cualquier vista materializada con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe una vista materializada o algún otro recurso de tabla con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.materialized_view_name
: Es el nombre de la vista materializada que crearás. Consulta Sintaxis de ruta de la tabla.Si se omite el
project_name
del nombre de la vista materializada o es igual que el proyecto que ejecuta esta consulta de DDL, el último también se usa como el proyecto predeterminado para hacer referencias a tablas, funciones. y otros recursos enquery_expression
. El proyecto predeterminado de las referencias es fijo y no depende de las consultas futuras que invoquen la nueva vista materializada. De lo contrario, todas las referencias enquery_expression
deben calificarse con nombres de proyectos.El nombre de la vista materializada debe ser único en cada conjunto de datos.
partition_expression
es una expresión que determina cómo particionar la tabla. Una vista materializada solo se puede particionar de la misma manera que la tabla enquery expression
(la tabla base).clustering_column_list
: Una lista de referencias de columnas separadas por comas que determinan cómo agrupar la vista materializada en clústeres.materialized_view_option_list
te permite especificar opciones adicionales de las vistas materializadas, como la habilitación de las actualizaciones, el intervalo de actualización, una etiqueta, y una fecha y hora de vencimiento.query_expression
es la expresión de consulta de SQL estándar que se usa para definir la vista materializada.
Detalles
Las declaraciones CREATE MATERIALIZED VIEW
deben cumplir con las siguientes reglas:
- Se permite solo una declaración
CREATE
.
Proyecto predeterminado en el cuerpo de la vista materializada
Si la vista materializada se crea en el mismo proyecto que se usa para ejecutar la declaración CREATE MATERIALIZED VIEW
, el cuerpo de la vista materializada query_expression
puede hacer referencia a entidades sin especificar el proyecto. El proyecto predeterminado es aquel al que pertenece la vista materializada. Considera la siguiente consulta de muestra.
CREATE MATERIALIZED VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;
Después de ejecutar la consulta CREATE MATERIALIZED VIEW
anterior en el proyecto myProject
, puedes ejecutar la consulta SELECT * FROM myProject.myDataset.myView
. Sin importar qué proyecto elijas para ejecutar esta consulta SELECT
, la tabla anotherDataset.myTable
a la que se hace referencia siempre se resuelve en el proyecto myProject
.
Si la vista materializada no se crea en el mismo proyecto que se usa para ejecutar la declaración CREATE VIEW
, todas las referencias en el cuerpo de la vista materializada query_expression
deben calificarse con los ID del proyecto. Por ejemplo, la consulta CREATE MATERIALIZED VIEW
de muestra anterior no es válida si se ejecuta en un proyecto diferente de myProject
.
materialized_view_option_list
La lista de opciones te permite establecer las opciones de la vista materializada, como la habilitación de las actualizaciones, el intervalo de actualización, una etiqueta, y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la vista materializada en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
enable_refresh |
BOOLEAN |
Ejemplo: |
refresh_interval_minutes |
FLOAT64 |
Ejemplo: |
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create
|
El conjunto de datos en el que creas la vista materializada. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.tables.update
.
Si la cláusula OPTIONS
incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
Crea una vista materializada nueva
En el siguiente ejemplo, se crea una vista materializada llamada new_mv
en mydataset
.
CREATE MATERIALIZED VIEW `myproject.mydataset.new_mv`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
friendly_name="new_mv",
description="a materialized view that expires in 2 days",
labels=[("org_unit", "development")],
enable_refresh=true,
refresh_interval_minutes=20
)
AS SELECT column_1, SUM(column_2) AS sum_2, AVG(column_3) AS avg_3
FROM `myproject.mydataset.mytable`
GROUP BY column_1
Si el nombre de la vista materializada ya existe en el conjunto de datos, se muestra el siguiente error:
Already Exists: project_id:dataset.materialized_view
Cuando usas una declaración DDL para crear una vista materializada, debes especificar el proyecto, el conjunto de datos y la vista materializada en el siguiente formato: `project_id.dataset.materialized_view`
(incluidos los acentos graves si project_id
contiene caracteres especiales); por ejemplo, `myproject.mydataset.new_mv`
.
La vista materializada se define mediante la siguiente consulta de SQL estándar:
SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La lista materializada de opciones de vista especifica lo siguiente:
- Vencimiento: 48 horas después de la creación de la vista materializada
- Nombre descriptivo
new_mv
- Descripción:
A materialized view that expires in 2 days
- Etiqueta
org_unit = development
- Actualización habilitada: verdadero
- Intervalo de actualización: 20 minutos
Crea una vista materializada solo si esta no existe
En el siguiente ejemplo, se crea una vista materializada llamada new_mv
en mydataset
solo si no existe una que se llame new_mv
en mydataset
. Si el nombre de la vista materializada ya existe en el conjunto de datos, no se muestra ningún error ni se realiza ninguna acción.
CREATE MATERIALIZED VIEW IF NOT EXISTS `myproject.mydataset.new_mv`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
friendly_name="new_mv",
description="a view that expires in 2 days",
labels=[("org_unit", "development")],
enable_refresh=false
)
AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La vista materializada se define mediante la siguiente consulta de SQL estándar:
SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`
La lista materializada de opciones de vista especifica lo siguiente:
- Vencimiento: 48 horas después de la creación de la vista
- Nombre descriptivo
new_mv
- Descripción:
A view that expires in 2 days
- Etiqueta
org_unit = development
- Actualización habilitada: falso
Crea una vista materializada con particiones y agrupamiento en clústeres
En el siguiente ejemplo, se crea una vista materializada llamada new_mv
en mydataset
, particionada por la columna col_datetime
y agrupada por la columna col_int
:
CREATE MATERIALIZED VIEW `myproject.mydataset.new_mv`
PARTITION BY DATE(col_datetime)
CLUSTER BY col_int
AS SELECT col_int, col_datetime, COUNT(1) as cnt
FROM `myproject.mydataset.mv_base_table`
GROUP BY col_int, col_datetime
La tabla base, mv_base_table
, también debe particionarse con la columna col_datetime
. Para obtener más información, consulta Trabaja con tablas particionadas y agrupadas.
Declaración CREATE EXTERNAL TABLE
Crea una tabla externa nueva.
Las tablas externas permiten que los datos de consulta de BigQuery se almacenen fuera del almacenamiento de BigQuery. Para obtener más información sobre las tablas externas, consulta Introducción a las fuentes de datos externas.
Sintaxis
CREATE [ OR REPLACE ] EXTERNAL TABLE [ IF NOT EXISTS ] table_name [( column_name column_schema, ... )] [WITH CONNECTION connection_name] [WITH PARTITION COLUMNS [( partition_column_name partition_column_type, ... )] ] OPTIONS ( external_table_option_list, ... );
Argumentos
OR REPLACE
: Reemplaza cualquier tabla externa con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe una tabla externa o algún otro recurso de tabla con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.table_name
: El nombre de la tabla externa. Consulta Sintaxis de ruta de la tabla.column_name
: El nombre de una columna en la tabla.column_schema
especifica el esquema de la columna. Usa la misma sintaxis que la definicióncolumn_schema
en la instrucciónCREATE TABLE
. Si no incluyes esta cláusula, BigQuery detecta el esquema de forma automática.connection_name
: especifica un recurso de conexión que tiene credenciales para acceder a los datos externos. Especifica el nombre de la conexión con el formato PROJECT_ID.LOCATION.CONNECTION_ID. Si la ubicación o el ID del proyecto contienen un guion, escribe el nombre de la conexión entre acentos graves (`
).partition_column_name
: El nombre de una columna de partición. Incluye este campo si tus datos externos usan un diseño particionado de subárbol. Para obtener más información, consulta los Tipos de datos compatibles.partition_column_type
: El tipo de columna de partición.external_table_option_list
: Una lista de opciones para crear la tabla externa.
Detalles
La declaración CREATE EXTERNAL TABLE
no admite la creación de tablas externas temporales.
Para crear una tabla particionada de forma externa, usa la cláusula WITH PARTITION COLUMNS
a fin de especificar los detalles del esquema de partición. BigQuery valida las definiciones de la columna contra la ubicación de los datos externos. La declaración del esquema debe seguir estrictamente el orden de los campos en la ruta externa. Para obtener más información sobre la partición externa, visita Busca datos particionados de forma externa.
external_table_option_list
La lista de opciones especifica las opciones para crear la tabla externa. Las opciones format
y uris
son obligatorias. Especifica la lista de opciones en el siguiente formato: NAME=VALUE, ...
Opciones | |
---|---|
allow_jagged_rows |
Si es Se aplica a los datos CSV. |
allow_quoted_newlines |
Si es Se aplica a los datos CSV. |
compression |
El tipo de compresión de la fuente de datos. Entre los valores admitidos, se incluyen los siguientes: Se aplica a los datos CSV y JSON. |
description |
Una descripción de esta tabla. |
enable_logical_types |
Si es Se aplica a los datos de Avro. |
enum_as_string |
Si es Se aplica a los datos de Parquet. |
enable_list_inference |
Si es Se aplica a los datos de Parquet. |
encoding |
La codificación de caracteres de los datos. Los valores admitidos son los siguientes: Se aplica a los datos CSV. |
expiration_timestamp |
La hora a la que vence esta tabla. Si no se especifica, la tabla no expira. Ejemplo: |
field_delimiter |
El separador de campos de un archivo CSV (opcional). Se aplica a los datos CSV. |
format |
El formato de los datos externos.
Los valores admitidos son los siguientes: El valor |
decimal_target_types |
Determina cómo convertir un tipo Ejemplo: |
json_extension |
Para los datos JSON, indica un formato de intercambio JSON en particular. Si no se especifica, BigQuery lee los datos como registros JSON genéricos. Entre los valores admitidos, se incluyen los siguientes: |
hive_partition_uri_prefix |
Prefijo común para todos los URI de origen antes de que comience la codificación de la clave de partición. Se aplica solo a las tablas externas particionadas de subárbol. Se aplica a los datos de Avro, CSV, JSON, Parquet y ORC. Ejemplo: |
ignore_unknown_values |
Si es Se aplica a los datos CSV y JSON. |
max_bad_records |
La cantidad máxima de registros erróneos que se deben ignorar cuando se leen los datos. Se aplica a los datos CSV, JSON y de Hojas de cálculo. |
null_marker |
La string que representa los valores Se aplica a los datos CSV. |
projection_fields |
Una lista de propiedades de entidad para cargar. Se aplica a los datos de Datastore. |
quote |
La string que se usa para entrecomillar secciones de datos en un archivo de CSV. Si tus datos contienen caracteres de salto de línea entrecomillados, también establece la propiedad Se aplica a los datos CSV. |
require_hive_partition_filter |
Si es Se aplica a los datos de Avro, CSV, JSON, Parquet y ORC. |
sheet_range |
Rango de Hojas de cálculo desde el que se realiza la búsqueda. Se aplica a los datos de Hojas de cálculo. Ejemplo: |
skip_leading_rows |
La cantidad de filas en la parte superior de un archivo que se deben omitir cuando se leen los datos. Se aplica a los datos CSV y Hojas de cálculo. |
uris |
Un arreglo de URI completamente calificados para las ubicaciones de datos externas. Ejemplo: |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.create |
El conjunto de datos en el que creas la tabla externa. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.tables.update
.
Si la cláusula OPTIONS
incluye una fecha de vencimiento, también se requiere el permiso bigquery.tables.delete
.
Ejemplos
En el siguiente ejemplo, se crea una tabla externa a partir de varios URI. El formato de los datos es CSV. En este ejemplo, se usa la detección automática de esquemas.
CREATE EXTERNAL TABLE dataset.CsvTable OPTIONS (
format = 'CSV',
uris = ['gs://bucket/path1.csv', 'gs://bucket/path2.csv']
);
En el siguiente ejemplo, se crea una tabla externa a partir de un archivo CSV y se especifica el esquema de forma explícita. También especifica el delimitador de campo ('|'
) y establece la cantidad máxima de registros erróneos permitidos.
CREATE OR REPLACE EXTERNAL TABLE dataset.CsvTable
(
x INT64,
y STRING
)
OPTIONS (
format = 'CSV',
uris = ['gs://bucket/path1.csv'],
field_delimiter = '|',
max_bad_records = 5
);
En el siguiente ejemplo, se crea una tabla particionada de forma externa. Usa la detección automática de esquemas para detectar el esquema de archivos y el diseño de partición de subárbol.
Por ejemplo, si la ruta de acceso externa es gs://bucket/path/field_1=first/field_2=1/data.csv
, las columnas de partición serían field_1
(STRING
) y field_2
(INT64
).
CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable
WITH PARTITION COLUMNS
OPTIONS (
uris=['gs://bucket/path/*'],
format=csv,
hive_partition_uri_prefix='gs://bucket/path'
);
En el siguiente ejemplo, se crean una tabla particionada de forma externa mediante la especificación explícita de las columnas de partición. En este ejemplo, se supone que la ruta de acceso al archivo externo tiene el patrón gs://bucket/path/field_1=first/field_2=1/data.csv
.
CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable
WITH PARTITION COLUMNS (
field_1 STRING, -- column order must match the external path
field_2 INT64
)
OPTIONS (
uris=['gs://bucket/path/*'],
format=csv,
hive_partition_uri_prefix='gs://bucket/path'
);
Declaración CREATE FUNCTION
Crea una función definida por el usuario (UDF) nueva. BigQuery admite las UDF escritas en SQL o JavaScript.
Sintaxis
Para crear una UDF de SQL, usa la siguiente sintaxis:
CREATE [ OR REPLACE ] [ TEMPORARY | TEMP ] FUNCTION [ IF NOT EXISTS ] [[project_name.]dataset_name.]function_name ([named_parameter[, ...]]) ([named_parameter[, ...]]) [RETURNS data_type] AS (sql_expression) named_parameter: param_name param_type
Para crear una UDF de JavaScript, usa la siguiente sintaxis:
CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS] [[project_name.]dataset_name.]function_name ([named_parameter[, ...]]) RETURNS data_type [determinism_specifier] LANGUAGE js [OPTIONS (function_option_list)] AS javascript_code named_parameter: param_name param_type determinism_specifier: { DETERMINISTIC | NOT DETERMINISTIC }
Para crear una función remota, usa la siguiente sintaxis:
CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS] [[project_name.]dataset_name.]function_name ([named_parameter[, ...]]) RETURNS data_type REMOTE WITH CONNECTION connection_path [OPTIONS (function_option_list)] named_parameter: param_name param_type
Los nombres de rutinas deben contener solo letras, números y guiones bajos, y tener como máximo 256 caracteres.
Argumentos
OR REPLACE
: Reemplaza cualquier función con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe un conjunto de datos con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.TEMP
oTEMPORARY
: Crea una función temporal. Si la cláusula no está presente, la declaración crea una UDF persistente. Puedes reutilizar las UDF persistentes en varias consultas, mientras que solo puedes usar las UDF temporales en una única consulta, secuencia de comandos o procedimiento.project_name
: En el caso de las funciones persistentes, el nombre del proyecto en el que crearás la función. La configuración predeterminada es el proyecto que ejecuta la consulta de DDL. No incluyas el nombre del proyecto para las funciones temporales.dataset_name
: Para las funciones persistentes, el nombre del conjunto de datos en el que creas la función. El valor predeterminado esdefaultDataset
en la solicitud. No incluyas el nombre del conjunto de datos para funciones temporales.function_name
: Es el nombre de la función.named_parameter
: Un parparam_name
yparam_type
separados por comas. El valor deparam_type
es un tipo de datos de BigQuery. Para una UDF de SQL, el valor deparam_type
también puede serANY TYPE
.determinism_specifier
: Se aplica solo a las UDF de JavaScript. Proporciona una sugerencia a BigQuery para decidir si el resultado de la consulta se puede almacenar en caché. Puede ser uno de los siguientes valores:DETERMINISTIC
: La función siempre muestra el mismo resultado cuando se pasan los mismos argumentos. El resultado de la consulta puede almacenarse en caché. Por ejemplo, si la funciónadd_one(i)
siempre muestrai + 1
, la función es determinista.NOT DETERMINISTIC
: La función no siempre muestra el mismo resultado cuando se pasa los mismos argumentos y, por lo tanto, no se puede almacenar en caché. Por ejemplo, siadd_random(i)
de la función muestrai + rand()
, la función no es determinista y BigQuery no usará resultados almacenados en caché.Si todas las funciones invocadas son
DETERMINISTIC
, BigQuery intentará almacenar en caché el resultado, a menos que estos no se puedan almacenar en caché por otros motivos. Para obtener más información, consulta Usa resultados de consultas almacenados en caché.
data_type
: Especifica el tipo de datos que muestra la función.- Si la función está definida en SQL, la cláusula
RETURNS
es opcional. Si se omite la cláusulaRETURNS
, BigQuery deduce el tipo de resultado de la función a partir del cuerpo de la función SQL cuando una consulta llama a la función. - Si la función está definida en JavaScript, la cláusula
RETURNS
es obligatoria. Si deseas obtener más información sobre los valores permitidos paradata_type
, consulta Tipos de datos de UDF de JavaScript admitidos.
- Si la función está definida en SQL, la cláusula
sql_expression
: Especifica la expresión SQL que define la función.function_option_list
: Una lista de opciones para crear la función.javascript_code
: Especifica la definición de una función de JavaScript. El valor es un literal de string. Si el código incluye comillas y barras inversas, se debe escapar o representar como una string sin procesar. Por ejemplo, el códigoreturn "\n";
se puede representar como una de las siguientes opciones:- String entrecomillada
"return \"\\n\";"
. Se deben escapar las comillas y las barras invertidas. - String entre comillas triples:
"""return "\\n";"""
. Las barras invertidas deben escaparse, mientras que las comillas no. - String sin procesar:
r"""return "\n";"""
. No se necesita escape.
- String entrecomillada
connection_name
: Especifica un recurso de conexión que tiene credenciales para acceder al extremo remoto. Especifica el nombre de la conexión con el formatoproject_name.location.connection_id
. Si el nombre o la ubicación del proyecto contienen un guion, escribe el nombre de la conexión entre tildes invertidas (`
).
function_option_list
La lista de opciones especifica las opciones para crear una UDF. Se admiten las siguientes opciones:
NAME |
VALUE |
Detalles |
---|---|---|
description |
|
Una descripción de la UDF. |
library |
|
Corresponde al array de bibliotecas de JavaScript que se incluirá en la definición de la función. Solo se aplica a las UDF de JavaScript. Para obtener más información, consulta Incluye bibliotecas de JavaScript. Ejemplo: |
endpoint |
|
Un extremo HTTP de Cloud Functions. Solo se aplica a funciones remotas. Ejemplo: Para obtener más información, consulta Crea una función remota. |
user_defined_context |
|
Una lista de pares clave-valor que se enviará con cada solicitud HTTP cuando se invoque la función. Solo se aplica a funciones remotas. Ejemplo: |
max_batching_rows |
|
La cantidad máxima de filas en cada solicitud HTTP. Si no se especifica, BigQuery decide cuántas filas se incluyen en una solicitud HTTP. Solo se aplica a funciones remotas. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.create |
El conjunto de datos en el que creas la función. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.routines.update
.
Para crear una función remota, se necesitan permisos de IAM adicionales:
Permiso | Recurso |
---|---|
bigquery.connections.delegate
|
La conexión que usas para crear la función remota. |
Ejemplos
Crea una UDF de SQL
En el siguiente ejemplo, se crea una UDF de SQL persistente llamada multiplyInputs
en un conjunto de datos llamado mydataset
.
CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
AS (x * y);
Crea una UDF de JavaScript
En el siguiente ejemplo, se crea una UDF de JavaScript temporal llamada multiplyInputs
y se la llama desde una declaración SELECT
.
CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS r"""
return x*y;
""";
SELECT multiplyInputs(a, b) FROM (SELECT 3 as a, 2 as b);
Crea una función remota
En el siguiente ejemplo, se crea una función remota persistente llamada remoteMultiplyInputs
en un conjunto de datos llamado mydataset
, si suponemos que mydataset
se encuentra en la ubicación US
y que hay una conexión myconnection
en la misma ubicación y el mismo proyecto.
CREATE FUNCTION mydataset.remoteMultiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
REMOTE WITH CONNECTION us.myconnection
OPTIONS(endpoint="https://us-central1-myproject.cloudfunctions.net/multiply");
Declaración CREATE TABLE FUNCTION
Crea una función de tabla nueva, también llamada función con valor de la tabla (TVF).
Sintaxis
CREATE [ OR REPLACE ] TABLE FUNCTION [ IF NOT EXISTS ] [[project_name.]dataset_name.]function_name ( [ function_parameter [, ...] ] ) [RETURNS TABLE < column_declaration [, ...] > ] AS sql_query function_parameter: parameter_name { data_type | ANY TYPE } column_declaration: column_name data_type
Argumentos
OR REPLACE
: Reemplaza cualquier función con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe una función de tabla con el mismo nombre, la declaraciónCREATE
no tiene ningún efecto. No puede aparecer conOR REPLACE
.project_name
: Es el nombre del proyecto en el que crearás la función. La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.dataset_name
: Es el nombre del conjunto de datos en el que crearás la función.function_name
: Es el nombre de la función que se creará.function_parameter
: Es un parámetro para la función, especificado como un nombre de parámetro y un tipo de datos. El valor dedata_type
es un tipo de datos de BigQuery escalar oANY TYPE
.RETURNS TABLE
: Es el esquema de la tabla que muestra la función, especificada como una lista separada por comas de pares de nombre de columna y tipo de datos. SiRETURNS TABLE
está ausente, BigQuery infiere el esquema de salida a partir de la declaración de consulta en el cuerpo de la función. Si se incluyeRETURNS TABLE
, los nombres en el tipo de tabla que se muestre deben coincidir con los nombres de columna de la consulta de SQL.sql_query
: Especifica la consulta de SQL que se ejecutará. La consulta de SQL debe incluir nombres para todas las columnas.
Detalles
BigQuery convierte los tipos de argumentos cuando es posible. Por ejemplo, si el tipo de parámetro es FLOAT64
y pasas un valor INT64
, BigQuery lo convierte en un FLOAT64
.
Si un tipo de parámetro es ANY TYPE
, la función acepta una entrada de cualquier tipo para este argumento. El tipo que pasas a la función debe ser compatible con la definición de la función. Si pasas un argumento con un tipo incompatible, la consulta muestra un error. Si hay más de un parámetro con el tipo ANY TYPE
, BigQuery no impone ninguna relación entre ellos.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.create
|
El conjunto de datos en el que creas la función de tabla. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.routines.update
.
Ejemplos
La siguiente función de tabla toma un parámetro INT64
que se usa para filtrar los resultados de una consulta:
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
AS
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = y
GROUP BY year, name
En el siguiente ejemplo, se especifica el tipo TABLE
que se muestra en la cláusula RETURNS
:
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64) RETURNS TABLE<name STRING, year INT64, total INT64> AS SELECT year, name, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE year = y GROUP BY year, name
Declaración CREATE PROCEDURE
Crea unprocedimiento nuevo, que es un bloque de declaraciones a las que se puede llamar desde otras consultas. Los procedimientos pueden llamarse a sí mismos de forma recursiva.
Sintaxis
CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS] [[project_name.]dataset_name.]procedure_name (procedure_argument[, ...] ) [OPTIONS(procedure_option_list)] BEGIN multi_statement_query END; procedure_argument: [procedure_argument_mode] argument_name argument_type
procedure_argument_mode: IN | OUT | INOUT
Argumentos
OR REPLACE
: Reemplaza cualquier procedimiento con el mismo nombre si existe. No puede aparecer conIF NOT EXISTS
.IF NOT EXISTS
: Si existe algún procedimiento con el mismo nombre, la declaraciónCREATE
no tiene ningún efecto. No puede aparecer conOR REPLACE
.project_name
** es el nombre del proyecto en el que crearás el procedimiento. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves`
(ejemplo:`google.com:my_project`
).dataset_name
: Es el nombre del conjunto de datos en el que crearás el procedimiento. El valor predeterminado esdefaultDataset
en la solicitud.procedure_name
: Es el nombre del procedimiento que se creará.multi_statement_query
: la consulta de varias declaraciones que se ejecutará.argument_type
: Cualquier tipo de BigQuery válido.procedure_argument_mode
especifica si un argumento es una entrada, un resultado o ambos.
procedure_option_list
procedure_option_list
te permite especificar opciones de procedimiento. Las opciones de procedimiento tienen los mismos requisitos y la misma sintaxis que las opciones de tabla, pero con una lista diferente de NAME
y VALUE
:
NAME |
VALUE |
Detalles |
---|---|---|
strict_mode |
|
Ejemplo: Si Si bien Si El valor predeterminado es |
Modo de argumento
IN
indica que el argumento es solo una entrada del procedimiento. Puedes especificar una variable o una expresión de valor para los argumentos IN
.
OUT
indica que el argumento es un resultado del procedimiento. Un argumento OUT
se inicializa en NULL
cuando comienza el procedimiento. Debes especificar una variable para los argumentos OUT
.
INOUT
indica que el argumento es tanto una entrada como un resultado del procedimiento. Debes especificar una variable para los argumentos INOUT
. En el cuerpo de un procedimiento, se puede hacer referencia a un argumento INOUT
como una variable y asignarle valores nuevos.
Si no se especifica IN
, OUT
ni INOUT
, el argumento se trata como un argumento IN
.
Alcance de la variable
Si una variable se declara fuera de un procedimiento, si se pasa como un argumento INOUT o OUT a un procedimiento, y el procedimiento asigna un valor nuevo a esa variable, ese valor nuevo es visible fuera del procedimiento.
Las variables declaradas en un procedimiento no son visibles fuera de este y viceversa.
A los argumentos OUT
o INOUT
se les puede asignar un valor mediante SET
, en cuyo caso el valor modificado es visible fuera del procedimiento. Si el procedimiento sale correctamente, entonces el valor del argumento OUT
o INOUT
es el valor final asignado a esa variable INOUT
.
Las tablas temporales duran lo mismo que la secuencia de comandos, por lo que si un procedimiento crea una tabla temporal, el emisor del procedimiento también podrá hacer referencia a esa tabla.
Proyecto predeterminado en el cuerpo del procedimiento
Los cuerpos de procedimientos pueden hacer referencia a entidades sin especificar el proyecto. El proyecto predeterminado es aquel al que pertenece el procedimiento, no siempre se trata del que se usó para ejecutar la declaración CREATE PROCEDURE
. Considera la siguiente consulta de muestra.
CREATE PROCEDURE myProject.myDataset.QueryTable()
BEGIN
SELECT * FROM anotherDataset.myTable;
END;
Después de crear el procedimiento anterior, puedes ejecutar la consulta CALL myProject.myDataset.QueryTable()
. Sin importar qué proyecto elijas para ejecutar esta consulta CALL
, la tabla anotherDataset.myTable
a la que se hace referencia siempre se resuelve en el proyecto myProject
.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.create |
El conjunto de datos en el que creas el procedimiento. |
Además, la cláusula OR REPLACE
requiere el permiso bigquery.routines.update
.
Ejemplos
En el siguiente ejemplo, se crea un procedimiento que toma x
como argumento de entrada y muestra x
como resultado. Como no hay modo de argumento presente para el argumento delta
, es un argumento de entrada. El procedimiento consiste en un bloque que contiene una sola declaración, que asigna la suma de los dos argumentos de entrada a x
.
CREATE PROCEDURE mydataset.AddDelta(INOUT x INT64, delta INT64)
BEGIN
SET x = x + delta;
END;
En el siguiente ejemplo, se llama al procedimiento AddDelta
del ejemplo anterior, pasándole la variable accumulator
ambas veces. Como los cambios a x
dentro de AddDelta
son visibles fuera de AddDelta
, este procedimiento llama al incremento accumulator
en un total de 8.
DECLARE accumulator INT64 DEFAULT 0;
CALL mydataset.AddDelta(accumulator, 5);
CALL mydataset.AddDelta(accumulator, 3);
SELECT accumulator;
Esto muestra lo siguiente:
+-------------+
| accumulator |
+-------------+
| 8 |
+-------------+
En el siguiente ejemplo, se crea el procedimiento SelectFromTablesAndAppend
, que toma target_date
como argumento de entrada y muestra rows_added
como resultado.
El procedimiento crea una tabla temporal DataForTargetDate
a partir de una consulta; luego, calcula la cantidad de filas en DataForTargetDate
y asigna el resultado a rows_added
. A continuación, inserta una nueva fila en TargetTable
y pasa el valor de target_date
como uno de los nombres de columna. Por último, descarta la tabla DataForTargetDate
y muestra rows_added
.
CREATE PROCEDURE mydataset.SelectFromTablesAndAppend(
target_date DATE, OUT rows_added INT64)
BEGIN
CREATE TEMP TABLE DataForTargetDate AS
SELECT t1.id, t1.x, t2.y
FROM dataset.partitioned_table1 AS t1
JOIN dataset.partitioned_table2 AS t2
ON t1.id = t2.id
WHERE t1.date = target_date
AND t2.date = target_date;
SET rows_added = (SELECT COUNT(*) FROM DataForTargetDate);
SELECT id, x, y, target_date -- note that target_date is a parameter
FROM DataForTargetDate;
DROP TABLE DataForTargetDate;
END;
En el siguiente ejemplo, se declara una variable rows_added
. Luego, se la pasa como argumento al procedimiento SelectFromTablesAndAppend
del ejemplo anterior, junto con el valor de CURRENT_DATE
. Después, se muestra un mensaje que indica cuántas filas se agregaron.
DECLARE rows_added INT64;
CALL mydataset.SelectFromTablesAndAppend(CURRENT_DATE(), rows_added);
SELECT FORMAT('Added %d rows', rows_added);
Declaración CREATE ROW ACCESS POLICY
Crea o reemplaza una política de acceso a nivel de fila. Las políticas de acceso a nivel de las filas en una tabla deben tener nombres únicos.
Sintaxis
CREATE [ OR REPLACE ] ROW ACCESS POLICY [ IF NOT EXISTS ]
row_access_policy_name ON table_name
[GRANT TO (grantee_list)]
FILTER USING (filter_expression);
Argumentos
IF NOT EXISTS
: Si existe una política de acceso a nivel de fila con el mismo nombre, la declaraciónCREATE
no tiene efecto. No puede aparecer conOR REPLACE
.row_access_policy_name
: El nombre de la política de acceso a nivel de las filas que crearás. El nombre de la política de acceso a nivel de las filas debe ser único para cada tabla. El nombre de la política de acceso a nivel de las filas puede contener lo siguiente:- Hasta 256 caracteres.
- Contiene letras (mayúsculas o minúsculas), números o guiones bajos. Debe comenzar con una letra.
table_name
: El nombre de la tabla para la que deseas crear una política de acceso a nivel de las filas. La tabla ya debe existir.GRANT TO grantee_list
: es una cláusula opcional que especifica los miembros iniciales con los que se debe crear la política de acceso a nivel de las filas.grantee_list
es una lista de usuarios o grupos deiam_member
. Las strings deben ser principales de IAM válidos, o miembros, según el formato de un miembro de vinculación de políticas de IAM, y deben estar entre comillas. Se admiten los siguientes tipos:grantee_list
tiposuser:{emailid}
Una dirección de correo electrónico que representa una Cuenta de Google específica.
Ejemplo:
user:alice@example.com
serviceAccount:{emailid}
Una dirección de correo electrónico que representa una cuenta de servicio.
Ejemplo:
serviceAccount:my-other-app@appspot.gserviceaccount.com
group:{emailid}
Una dirección de correo electrónico que representa a un grupo de Google.
Ejemplo:
group:admins@example.com
domain:{domain}
El dominio de Google Workspace (principal) que representa a todos los usuarios de ese dominio.
Ejemplo:
domain:example.com
allAuthenticatedUsers
Un identificador especial que representa a todas las cuentas de servicio y a todos los usuarios de Internet que se autenticaron con una Cuenta de Google. Este identificador incluye cuentas que no están conectadas a Google Workspace o a un dominio de Cloud Identity, como Cuentas de Gmail personales. Los usuarios que no están autenticados, como los visitantes anónimos, no están incluidos. allUsers
Un identificador especial que representa a cualquier persona que esté en Internet, incluidos los usuarios autenticados y no autenticados. Debido a que BigQuery requiere autenticación antes de que un usuario pueda acceder al servicio, allUsers
solo incluye usuarios autenticados.Puedes combinar una serie de valores
iam_member
si están separados por comas y se escriben por separado. Por ejemplo:"user:alice@example.com","group:admins@example.com","user:sales@example.com"
filter_expression
: Define el subconjunto de filas de la tabla que se muestra solo a los miembros degrantee_list
. Elfilter_expression
es similar a la cláusulaWHERE
en una consultaSELECT
.Las siguientes son expresiones de filtro válidas:
- Funciones escalares de SQL estándar, funciones agregadas y funciones analíticas de SQL estándar de BigQuery.
SESSION_USER()
para restringir el acceso solo a las filas que pertenecen al usuario que ejecuta la consulta. Si ninguna de las políticas de acceso a nivel de las filas se aplica al usuario que realiza la consulta, este no tiene acceso a los datos de la tabla.TRUE
. Otorga a los principales en el campograntee_list
acceso a todas las filas de la tabla.
La expresión de filtro no puede contener lo siguiente:
- Una referencia a una tabla.
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
oUPDATE
. - Funciones definidas por el usuario.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.rowAccessPolicies.create |
La tabla de destino. |
bigquery.rowAccessPolicies.setIamPolicy |
La tabla de destino. |
bigquery.tables.getData |
La tabla de destino. |
Ejemplos
Declaración CREATE CAPACITY
Compra ranuras mediante la creación de un compromiso de capacidad nuevo.
Sintaxis
CREATE CAPACITY project_id.location_id.commitment_id AS JSON capacity_json_object
Argumentos
project_id
es el ID del proyecto del proyecto de administración que mantendrá la propiedad de este compromiso.location_id
es la ubicación del proyecto.commitment_id
es el ID del compromiso. El valor debe ser único para el proyecto y la ubicación. Debe comenzar y terminar con una letra minúscula o un número, y contener solo letras minúsculas, números y guiones.capacity_json_object
es una string JSON que describe el compromiso de capacidad.
capacity_json_object
Especifica un objeto JSON que contiene los siguientes campos:
NAME |
TYPE |
Detalles |
---|---|---|
plan |
String | El plan de compromiso para la compra. Entre los valores admitidos, se incluyen los siguientes: FLEX , MONTHLY , ANNUAL . Para obtener más información, consulta Planes de compromiso. |
renewal_plan |
String | El plan de renovación del compromiso. Se aplica solo cuando plan es ANNUAL . Para obtener más información, consulta Renueva compromisos. |
slot_count |
Entero | La cantidad de ranuras en el compromiso. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.capacityCommitments.create
|
El proyecto de administración que mantiene la propiedad de los compromisos. |
Ejemplo
En el siguiente ejemplo, se crea un compromiso de capacidad de 100 ranuras flexibles que se encuentran en la región region-us
y están administradas por un proyecto admin_project
:
CREATE CAPACITY `admin_project.region-us.my-commitment`
AS JSON """{
"slot_count": 100,
"plan": "FLEX"
}"""
Declaración CREATE RESERVATION
Crea una reserva. Para obtener más información, consulta Introducción a Reservations.
Sintaxis
CREATE RESERVATION project_id.location_id.reservation_id AS JSON reservation_json_object
Argumentos
project_id
es el ID del proyecto de administración en el que se creó el compromiso de capacidad.location_id
es la ubicación del proyecto.reservation_id
es el ID de la reserva.reservation_json_object
es una string JSON que describe la reserva.
reservation_json_object
Especifica un objeto JSON que contiene los siguientes campos:
NAME |
TYPE |
Detalles |
---|---|---|
ignore_idle_slots |
Booleano | Si el valor es true , la reserva solo usa las ranuras que se le aprovisionan. El valor predeterminado es false .
Para obtener más información, consulta Ranuras inactivas. |
slot_capacity |
Entero | La cantidad de ranuras que asignarás a la reserva. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.reservations.create
|
El proyecto de administración que mantiene la propiedad de los compromisos. |
Ejemplo
En el siguiente ejemplo, se crea una reserva de 100 ranuras en el proyecto admin_project
:
CREATE RESERVATION `admin_project.region-us.prod`
AS JSON """{
"slot_capacity": 100
}"""
Declaración CREATE ASSIGNMENT
Asigna un proyecto, una carpeta o una organización a una reserva.
Sintaxis
CREATE ASSIGNMENT project_id.location_id.reservation_id.assignment_id AS JSON assignment_json_object
Argumentos
project_id
es el ID del proyecto de administración en el que se creó la reserva.location_id
es la ubicación del proyecto.reservation_id
es el ID de la reserva.assignment_id
es el ID de la asignación. El valor debe ser único para el proyecto y la ubicación. Debe comenzar y terminar con una letra minúscula o un número, y contener solo letras minúsculas, números y guiones.assignment_json_object
es una string JSON que describe la asignación.
Para quitar un proyecto de cualquier reserva y usar la facturación a pedido, establece reservation_id
en none
.
assignment_json_object
Especifica un objeto JSON que contiene los siguientes campos:
NAME |
TYPE |
Detalles |
---|---|---|
assignee |
String | El ID del proyecto, la carpeta o la organización que se asignará a la reserva. |
job_type |
String | El tipo de trabajo que se asignará a esta reserva. Los valores admitidos son QUERY , PIPELINE y ML_EXTERNAL .
Para obtener más información, consulta Asignaciones.
|
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.reservationAssignments.create
|
El proyecto de administración y el destinatario. |
Ejemplo
En el siguiente ejemplo, se asigna el proyecto my_project
a la reserva prod
para los trabajos de consulta:
CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
"assignee": "projects/my_project",
"job_type": "QUERY"
}"""
En el siguiente ejemplo, se asigna una organización a la reserva prod
para los trabajos de canalización, como trabajos de carga y exportación:
CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
"assignee": "organizations/1234",
"job_type": "PIPELINE"
}"""
Declaración CREATE SEARCH INDEX
Crea un índice de búsqueda nuevo en una o más columnas de una tabla.
Un índice de búsqueda permite realizar consultas eficientes con la función SEARCH
.
Sintaxis
CREATE SEARCH INDEX [ IF NOT EXISTS ] index_name ON table_name({ALL COLUMNS | column_name [, ...]})
Argumentos
IF NOT EXISTS
: si ya hay un índice con ese nombre en la tabla, no hagas nada. Si la tabla tiene un índice con un nombre diferente, muestra un error.index_name
: es el nombre del índice que creas. Debido a que el índice siempre se crea en el mismo proyecto y conjunto de datos que la tabla base, no es necesario especificarlos en el nombre.table_name
: el nombre de la tabla. Consulta Sintaxis de ruta de la tabla.ALL COLUMNS
: crea un índice en cada columna de la tabla que contiene un campoSTRING
.column_name
: es el nombre de una columna de nivel superior en la tabla, que es unSTRING
o que contiene un campoSTRING
. La columna debe ser de uno de los siguientes tipos:STRING
ARRAY<STRING>
STRUCT
que contenga al menos un campo anidado de tipoSTRING
oARRAY<STRING>
JSON
Detalles
Solo puedes crear un índice por tabla base. No puedes crear un índice en una vista o una vista materializada. Para modificar qué columnas están indexadas, DROP
el índice actual y crea una nueva.
BigQuery muestra un error si algún column_name
no es STRING
o no contiene un campo STRING
, o si llamas a CREATE SEARCH INDEX
en ALL COLUMNS
de una tabla. que no contiene los campos STRING
.
La creación de un índice fallará en una tabla que tenga LCA de columnas o filtros de filas. Sin embargo, todos pueden agregarse a la tabla después de la creación del índice.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.createIndex |
La tabla base en la que creas el índice. |
Examples
En el siguiente ejemplo, se crea un índice llamado my_index
en todas las columnas de string de my_table
. En este caso, el índice solo se crea en la columna a
.
CREATE TABLE dataset.my_table(a STRING, b INT64); CREATE SEARCH INDEX my_index ON dataset.my_table(ALL COLUMNS);
En el siguiente ejemplo, se crea un índice en las columnas a
, my_struct.string_field
y b
.
CREATE TABLE dataset.complex_table(
a STRING,
my_struct STRUCT<string_field STRING, int_field INT64>,
b ARRAY<STRING>
);
CREATE SEARCH INDEX my_index
ON dataset.complex_table(a, my_struct, b);
Declaración ALTER SCHEMA SET DEFAULT COLLATE
Configura las especificaciones de intercalación en un conjunto de datos.
Sintaxis
ALTER SCHEMA [IF EXISTS] [project_name.]dataset_name SET DEFAULT COLLATE collate_specification
Argumentos
IF EXISTS
: Si no existe un conjunto de datos con ese nombre, la declaración no tiene efecto.DEFAULT COLLATE collate_specification
: cuando se crea una tabla nueva en el esquema, la tabla hereda una especificación de la intercalación predeterminada, a menos que se especifique una especificación de la intercalación de forma explícita para una columna.La especificación de la intercalación actualizada solo se aplica a las tablas que se crearon después. Si deseas actualizar una especificación de la intercalación existente, debes modificar la columna que contiene la especificación.
project_name
: El nombre del proyecto que contiene el conjunto de datos La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.dataset_name
: El nombre del conjunto de datos.collate_specification
: especifica las especificaciones de intercalación que se establecerán.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.datasets.get |
El conjunto de datos que se va a modificar. |
bigquery.datasets.update |
El conjunto de datos que se va a modificar. |
Ejemplo
Supongamos que tienes una tabla existente, mytable_a
, en un esquema llamado mydataset
.
Por ejemplo:
CREATE SCHEMA mydataset
CREATE TABLE mydataset.mytable_a ( number INT64, word STRING )
+----------------------+
| mydataset.mytable_a |
| number INT64 |
| word STRING |
+----------------------+
Más adelante, decides agregar una especificación de la intercalación a tu esquema. Por ejemplo:
ALTER SCHEMA mydataset SET DEFAULT COLLATE 'und:ci'
Si creas una tabla nueva para tu esquema, hereda COLLATE 'und:ci'
en todas las columnas STRING
. Por ejemplo, la intercalación se agrega a characters
cuando creas la tabla mytable_b
en el esquema mydataset
:
CREATE TABLE mydataset.mytable_b ( amount INT64, characters STRING )
+--------------------------------------+
| mydataset.mytable_b |
| amount INT64 |
| characters STRING COLLATE 'und:ci' |
+--------------------------------------+
Sin embargo, aunque actualizaste la especificación de la intercalación del esquema, la tabla existente, mytable_a
, seguirá usando la especificación de la intercalación anterior. Por ejemplo:
+---------------------+
| mydataset.mytable_a |
| number INT64 |
| word STRING |
+---------------------+
Si deseas actualizar la especificación de la intercalación para la columna word
en mytable_a
, debes modificar la columna directamente. Por ejemplo:
ALTER TABLE mydataset.mytable_a ALTER COLUMN word SET DATA TYPE STRING COLLATE 'und:ci';
+--------------------------------+
| mydataset.mytable_a |
| number INT64 |
| word STRING COLLATE 'und:ci' |
+--------------------------------+
Declaración ALTER SCHEMA SET OPTIONS
Configura las opciones en un conjunto de datos.
La declaración se ejecuta en la ubicación del conjunto de datos si el conjunto de datos existe, a menos que especifiques la ubicación en la configuración de la consulta. Para obtener más información, consulta Especifica tu ubicación.
Sintaxis
ALTER SCHEMA [IF EXISTS] [project_name.]dataset_name SET OPTIONS(schema_set_options_list)
Argumentos
IF EXISTS
: Si no existe un conjunto de datos con ese nombre, la declaración no tiene efecto.project_name
: El nombre del proyecto que contiene el conjunto de datos La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.dataset_name
: El nombre del conjunto de datos.schema_set_options_list
: La lista de opciones que se deben establecer.
schema_set_options_list
La lista de opciones especifica las opciones para el conjunto de datos. Especifica las opciones en el siguiente formato: NAME=VALUE, ...
Se admiten las siguientes opciones:
NAME |
VALUE |
Detalles |
---|---|---|
default_kms_key_name |
STRING |
Especifica la clave predeterminada de Cloud KMS para encriptar los datos de la tabla en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
default_partition_expiration_days |
FLOAT64 |
Especifica la fecha de vencimiento predeterminado, en días, de las particiones de tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
default_table_expiration_days |
FLOAT64 |
Especifica la fecha de vencimiento predeterminado, en días, de las tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla. |
description |
STRING |
Es la descripción del conjunto de datos. |
friendly_name |
STRING |
Es un nombre descriptivo para el conjunto de datos. |
labels |
<ARRAY<STRUCT<STRING, STRING>>> |
Un arreglo de etiquetas para el conjunto de datos, expresado como pares clave-valor. |
location |
STRING |
La ubicación en la que se crea el conjunto de datos. Si no especificas esta opción, el conjunto de datos se creará en la ubicación en la que se ejecuta la consulta. Si especificas esta opción y también estableces explícitamente la ubicación para el trabajo de consulta, los dos valores deben coincidir; de lo contrario, la consulta fallará. |
max_time_travel_hours |
SMALLINT |
En vista previa Especifica la duración en horas del período del viaje en el tiempo para el conjunto de datos. El valor Para obtener más información sobre el período de viaje en el tiempo, consulta Configura el período de viaje en el tiempo. |
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.datasets.get |
El conjunto de datos que se va a modificar. |
bigquery.datasets.update |
El conjunto de datos que se va a modificar. |
Ejemplo
En el ejemplo siguiente, se establece el vencimiento predeterminado de la tabla.
ALTER SCHEMA mydataset SET OPTIONS( default_table_expiration_days=3.75 )
Declaración ALTER TABLE SET OPTIONS
Configura las opciones en una tabla.
Sintaxis
ALTER TABLE [IF EXISTS] table_name SET OPTIONS(table_set_options_list)
Argumentos
IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla.table_set_options_list
: La lista de opciones que se deben establecer.
Detalles
Esta declaración no es compatible con las tablas externas.
table_set_options_list
La lista de opciones te permite configurar las opciones de la tabla, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la tabla con el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
partition_expiration_days |
|
Ejemplo: Establece el vencimiento de la partición en días. Para obtener más información, consulta Configura el vencimiento de la partición. De forma predeterminada, las particiones no se vencen. Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.expirationMs, pero utiliza días en lugar de milisegundos. Un día equivale a 86,400,000 milisegundos o 24 horas. Esta propiedad solo se puede configurar si la tabla está particionada. |
require_partition_filter |
|
Ejemplo: Especifica si las consultas en esta tabla deben incluir un filtro de predicado que filtre la columna de partición. Si deseas obtener más información, consulta Configura requisitos para filtros de partición. El valor predeterminado es Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.requirePartitionFilter. Esta propiedad solo se puede configurar si la tabla está particionada. |
kms_key_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla encryptionConfiguration.kmsKeyName. Para obtener más detalles, consulta Cómo proteger los datos con claves de Cloud KMS. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
VALUE
es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Cuando se establece el VALUE
, se reemplaza el valor existente de esa opción para la tabla, si había uno. Cuando se establece el VALUE
como NULL
, se borra el valor de la tabla para esa opción.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
Configura la marca de tiempo de vencimiento y la descripción en una tabla
En el siguiente ejemplo, se establece la marca de tiempo de vencimiento en una tabla a siete días desde el tiempo de ejecución de la declaración ALTER TABLE
, además de la descripción:
ALTER TABLE mydataset.mytable SET OPTIONS ( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY), description="Table that expires seven days from now" )
Configura el atributo de filtro de partición requerido en una tabla particionada
En el siguiente ejemplo, se configura el atributo timePartitioning.requirePartitionFilter
en una tabla particionada.
ALTER TABLE mydataset.mypartitionedtable SET OPTIONS (require_partition_filter=true)
Las consultas que hacen referencia a esta tabla deben usar un filtro en la columna de partición; de lo contrario, BigQuery mostrará un error. Configurar esta opción como true
puede ayudar a evitar errores cuando se consultan más datos de lo previsto.
Borra la marca de tiempo de vencimiento en una tabla
En el siguiente ejemplo, se borra la marca de tiempo de vencimiento en una tabla para que no caduque:
ALTER TABLE mydataset.mytable SET OPTIONS (expiration_timestamp=NULL)
Declaración ALTER TABLE ADD COLUMN
Agrega una o más columnas nuevas a un esquema de tabla existente.
Sintaxis
ALTER TABLE table_name
ADD COLUMN [IF NOT EXISTS] column[, ...]
Argumentos
table_name
: el nombre de la tabla. Consulta Sintaxis de ruta de la tabla.IF EXISTS
: Si el nombre de la columna ya existe, la declaración no tiene efecto.column
: la columna que se agregará. Esto incluye el nombre de la columna y el esquema que se agregará. En este nombre de columna y esquema, se usa la misma sintaxis que en la declaraciónCREATE TABLE
.
Detalles
No puedes usar esta declaración para crear los siguientes tipos de columnas:
- Columnas particionadas
- Columnas agrupadas
- Columnas anidadas dentro de los campos
RECORD
existentes
No puedes agregar una columna REQUIRED
a un esquema de tabla existente. Sin embargo, puedes crear una columna REQUIRED
anidada como parte de un campo RECORD
nuevo.
Esta declaración no es compatible con las tablas externas.
Sin la cláusula IF NOT EXISTS
, si la tabla ya contiene una columna con ese nombre, la declaración muestra un error. Si se incluye la cláusula IF NOT EXISTS
y el nombre de la columna ya existe, no se mostrará ningún error ni se realizará ninguna acción.
El valor de la columna nueva para las filas existentes se establece en uno de los siguientes valores:
NULL
si la columna nueva se agregó con el modoNULLABLE
. Este es el modo predeterminado.- Un
ARRAY
vacío si la columna nueva se agregó con el modoREPEATED
.
Para obtener más información sobre las modificaciones de esquema en BigQuery, consulta Modifica esquemas de tablas.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
Agrega columnas
En el siguiente ejemplo, se agregan las siguientes columnas a una tabla existente llamada mytable
:
- Columna
A
de tipoSTRING
- Columna
B
de tipoGEOGRAPHY
- Columna
C
de tipoNUMERIC
con el modoREPEATED
- Columna
D
de tipoDATE
con una descripción
ALTER TABLE mydataset.mytable
ADD COLUMN A STRING,
ADD COLUMN IF NOT EXISTS B GEOGRAPHY,
ADD COLUMN C ARRAY<NUMERIC>,
ADD COLUMN D DATE OPTIONS(description="my description")
Si alguna de las columnas llamadas A
, C
o D
ya existe, la declaración fallará.
Si la columna B
ya existe, la declaración se realiza de forma correcta debido a la cláusula IF NOT
EXISTS
.
Agrega una columna RECORD
En el siguiente ejemplo, se agrega una columna llamada A
de tipo STRUCT
que contiene las siguientes columnas anidadas:
- Columna
B
de tipoGEOGRAPHY
- Columna
C
de tipoINT64
con el modoREPEATED
- Columna
D
de tipoINT64
con el modoREQUIRED
- Columna
E
de tipoTIMESTAMP
con una descripción
ALTER TABLE mydataset.mytable
ADD COLUMN A STRUCT<
B GEOGRAPHY,
C ARRAY<INT64>,
D INT64 NOT NULL,
E TIMESTAMP OPTIONS(description="creation time")
>
La consulta fallará si la tabla ya tiene una columna llamada A
, incluso si esa columna no contiene ninguna de las columnas anidadas que se especifican.
La STRUCT
nueva llamada A
es anulable, pero la columna anidada D
dentro de A
es obligatoria para cualquier valor STRUCT
de A
.
Agrega compatibilidad con la intercalación a una columna
Cuando creas una columna nueva para la tabla, puedes asignar una especificación de la intercalación nueva a esa columna.
ALTER TABLE mydataset.mytable ADD COLUMN word STRING COLLATE 'und:ci'
Declaración ALTER TABLE RENAME TO
Cambia el nombre de un clon, una instantánea o una tabla.
Sintaxis
ALTER TABLE [IF EXISTS] table_name RENAME TO new_table_name
Argumentos
IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla.new_table_name
: El nombre nuevo de la tabla. El nombre nuevo no puede ser un nombre de tabla existente.
Detalles
- Esta declaración no es compatible con las tablas externas.
- Si cambias las políticas de la tabla o las políticas de acceso a nivel de fila cuando cambias el nombre de la tabla, es posible que esos cambios no sean efectivos.
- Si deseas cambiar el nombre de una tabla que tiene transmisión de datos, debes detener la transmisión y esperar a que BigQuery indique que la transmisión no está en uso.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
Renombra una tabla
En el siguiente ejemplo, se cambia el nombre de la tabla mydataset.mytable
a
mydataset.mynewtable
:
ALTER TABLE mydataset.mytable RENAME TO mynewtable
Declaración ALTER TABLE DROP COLUMN
Descarta una o más columnas de un esquema de tabla existente.
Sintaxis
ALTER TABLE table_name
DROP COLUMN [IF EXISTS] column_name [, ...]
Argumentos
table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla. La tabla ya debe existir y tener un esquema.IF EXISTS
: Si la columna especificada no existe, la declaración no tiene efecto.column_name
: El nombre de la vista que se descartará.
Detalles
La declaración no libera de inmediato el almacenamiento asociado a la columna descartada. El almacenamiento se reclama en segundo plano durante el período de 7 días desde el día en que se descarta una columna.
Si deseas obtener más información para reclamar el almacenamiento de forma inmediata, consulta Borra una columna de un esquema de tabla.
No puedes usar esta declaración para descartar las siguientes columnas:
- Columnas particionadas
- Columnas agrupadas
- Columnas anidadas dentro de los campos
RECORD
existentes
Esta declaración no es compatible con las tablas externas.
Sin la cláusula IF EXISTS
, si la tabla no contiene una columna con ese nombre, la declaración mostrará un error. Si se incluye la cláusula IF EXISTS
y el nombre de la columna no existe, no se muestra ningún error ni se realiza ninguna acción.
Esta declaración solo quita la columna de la tabla. Cualquier objeto que haga referencia a la columna, como vistas o vistas materializadas, se debe actualizar o volver a crear por separado.
Para obtener más información sobre las modificaciones de esquema en BigQuery, consulta Modifica esquemas de tablas.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
Descarta columnas
En el siguiente ejemplo, se descartan las siguientes columnas de una tabla existente llamada mytable
:
- Columna
A
- Columna
B
ALTER TABLE mydataset.mytable
DROP COLUMN A,
DROP COLUMN IF EXISTS B
Si la columna llamada A
no existe, la declaración falla. Si la columna B
no existe, la declaración aún se realiza de forma correcta debido a la cláusula IF EXISTS
.
Declaración ALTER TABLE SET DEFAULT COLLATE
Establece las especificaciones de intercalación en una tabla.
Sintaxis
ALTER TABLE table_name SET DEFAULT COLLATE collate_specification
Argumentos
table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla. La tabla ya debe existir y tener un esquema.SET DEFAULT COLLATE collate_specification
: cuando se crea una columna nueva en el esquema y, si la columna no tiene una especificación de la intercalación explícita, la columna hereda esta especificación de la intercalación para los tiposSTRING
. La especificación de la intercalación actualizada solo se aplica a las columnas que se agregan después.Si deseas actualizar una especificación de la intercalación existente, debes modificar la columna que contiene la especificación. Si deseas agregar una especificación de la intercalación en una columna nueva en una tabla existente, puedes hacerlo cuando agregas la columna. Si agregas una especificación de la intercalación directamente en una columna, la especificación de la intercalación para la columna tiene prioridad sobre la especificación de la intercalación predeterminada de una tabla.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplo
Supongamos que tienes una tabla existente, mytable
, en un esquema llamado mydataset
.
CREATE TABLE mydataset.mytable ( number INT64, word STRING ) DEFAULT COLLATE 'und:ci'
Cuando creas mytable
, todas las columnas STRING
heredan COLLATE 'und:ci'
.
La tabla resultante tiene esta estructura:
+--------------------------------+
| mydataset.mytable |
| number INT64 |
| word STRING COLLATE 'und:ci' |
+--------------------------------+
Más adelante, decides cambiar la especificación de la intercalación para tu tabla.
ALTER TABLE mydataset.mytable SET DEFAULT COLLATE ''
Aunque actualizaste la especificación de la intercalación, la columna existente, word
, seguirá usando la especificación de la intercalación anterior.
+--------------------------------+
| mydataset.mytable |
| number INT64 |
| word STRING COLLATE 'und:ci' |
+--------------------------------+
Sin embargo, si creas una columna nueva para la tabla, esta incluye la especificación de la intercalación nueva. En el siguiente ejemplo, se agrega una columna llamada name
. Debido a que especificación de la intercalación nueva está vacía, se usa la especificación de la intercalación predeterminada.
ALTER TABLE mydataset.mytable ADD COLUMN name STRING
+--------------------------------+
| mydataset.mytable |
| number INT64 |
| word STRING COLLATE 'und:ci' |
| name STRING COLLATE |
+--------------------------------+
Declaración ALTER COLUMN SET OPTIONS
Establece opciones, como la descripción de la columna, en una columna de una tabla en BigQuery.
Sintaxis
ALTER TABLE [IF EXISTS] table_name ALTER COLUMN [IF EXISTS] column_name SET OPTIONS(column_set_options_list)
Argumentos
(ALTER TABLE) IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla.(ALTER COLUMN) IF EXISTS
: Si la columna especificada no existe, la declaración no tiene efecto.column_name
: El nombre de la columna de nivel superior que modificarás. No se admite la modificación de subcampos, como las columnas anidadas en unSTRUCT
.column_set_options_list
: La lista de opciones que se deben establecer en la columna.
Detalles
Esta declaración no es compatible con las tablas externas.
column_set_options_list
Especifica una lista de opciones de la vista en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
description |
|
Ejemplo: |
VALUE
es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Cuando se establece el VALUE
, se reemplaza el valor existente de esa opción para la tabla, si había uno. Cuando se establece el VALUE
como NULL
, se borra el valor de la columna para esa opción.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
En el siguiente ejemplo, se establece una descripción nueva en una columna llamada price
:
ALTER TABLE mydataset.mytable ALTER COLUMN price SET OPTIONS ( description="Price per unit" )
Declaración ALTER COLUMN DROP NOT NULL
Quita una restricción NOT NULL
de una columna en una tabla en BigQuery.
Sintaxis
ALTER TABLE [IF EXISTS] table_name ALTER COLUMN [IF EXISTS] column DROP NOT NULL
Argumentos
(ALTER TABLE) IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla.(ALTER COLUMN) IF EXISTS
: Si la columna especificada no existe, la declaración no tiene efecto.column_name
: El nombre de la columna de nivel superior que modificarás. No es posible modificar subcampos.
Detalles
Si una columna no tiene una restricción NOT NULL
, la consulta muestra un error.
Esta declaración no es compatible con las tablas externas.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
En el siguiente ejemplo, se quita la restricción NOT NULL
de una columna llamada mycolumn
:
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL
Declaración ALTER COLUMN SET DATA TYPE
Cambia el tipo de datos de una columna en una tabla en BigQuery a un tipo de datos menos restrictivo. Por ejemplo, un tipo de datos NUMERIC
se puede cambiar a un tipo BIGNUMERIC
, pero no a la inversa.
Sintaxis
ALTER TABLE [IF EXISTS] table_name ALTER COLUMN [IF EXISTS] column_name SET DATA TYPE column_schema
Argumentos
(ALTER TABLE) IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla.(ALTER COLUMN) IF EXISTS
: Si la columna especificada no existe, la declaración no tiene efecto.column_name
: El nombre de la columna de nivel superior que modificarás. No es posible modificar subcampos.column_schema
: el esquema al que deseas convertir la columna. En este esquema, se usa la misma sintaxis que se usa en la declaraciónCREATE TABLE
.
Detalles
Para ver una tabla de coerciones de tipos de datos válidos, compara la columna “De tipo” con la columna “Coerción a” en la página Reglas de conversión de SQL estándar.
A continuación, se muestran ejemplos de coerciones de tipos de datos válidas:
- INT64 a NUMERIC, BIGNUMERIC y FLOAT64
- NUMERIC a BIGNUMERIC, FLOAT64
Esta declaración no es compatible con las tablas externas.
Sin la cláusula IF EXISTS, si la tabla no contiene una columna con ese nombre, la instrucción muestra un error. Si se incluye la cláusula IF EXISTS y el nombre de la columna no existe, no se muestra ningún error ni se realiza ninguna acción.
También puedes forzar la conversión de los tipos de datos de tipos más restringidos a parametrizados. Por ejemplo, puedes aumentar la longitud máxima de un tipo de string o aumentar la precisión o escala de un tipo numérico.
A continuación, se presentan ejemplos de cambios válidos de tipos de datos parametrizados:
- De NUMERIC(6,10) a NUMERIC(8,12)
- De NUMERIC a BIGNUMERIC(40, 20)
- De STRING(5) a STRING(7)
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La tabla que se va a modificar. |
bigquery.tables.update |
La tabla que se va a modificar. |
Ejemplos
Cambia el tipo de datos para una columna
En el siguiente ejemplo, se cambia el tipo de datos de la columna c1
de un INT64
a NUMERIC
:
CREATE TABLE dataset.table(c1 INT64); ALTER TABLE dataset.table ALTER COLUMN c1 SET DATA TYPE NUMERIC;
Cambia el tipo de datos para un campo
En el siguiente ejemplo, se cambia el tipo de datos de uno de los campos de la columna s1
:
CREATE TABLE dataset.table(s1 STRUCT<a INT64, b STRING>); ALTER TABLE dataset.table ALTER COLUMN s1 SET DATA TYPE STRUCT<a NUMERIC, b STRING>;
Cambia la precisión
En el siguiente ejemplo, se cambia la precisión de una columna de tipo de datos parametrizado:
CREATE TABLE dataset.table (pt NUMERIC(7,2)); ALTER TABLE dataset.table ALTER COLUMN pt SET DATA TYPE NUMERIC(8,2);
Cambia la compatibilidad de la intercalación
Si deseas actualizar la especificación de la intercalación para la columna word
en una tabla llamada mytable
, debes modificar la columna directamente.
ALTER TABLE mydataset.mytable ALTER COLUMN word SET DATA TYPE STRING COLLATE 'und:ci';
Declaración ALTER VIEW SET OPTIONS
Configura las opciones en una vista.
Sintaxis
ALTER VIEW [IF EXISTS] view_name SET OPTIONS(view_set_options_list)
Argumentos
IF EXISTS
: Si no existe una vista con ese nombre, la declaración no tiene efecto.view_name
: Es el nombre de la vista que se modificará. Consulta Sintaxis de ruta de la tabla.view_set_options_list
: La lista de opciones que se deben establecer.
view_set_options_list
La lista de opciones te permite establecer las opciones de la vista, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la vista en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
VALUE
es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.
La expresión constante no puede contener lo siguiente:
- Una referencia a una tabla
- Subconsultas o instrucciones de SQL, como
SELECT
,CREATE
yUPDATE
- Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
- Las siguientes funciones escalares:
ARRAY_TO_STRING
REPLACE
REGEXP_REPLACE
RAND
FORMAT
LPAD
RPAD
REPEAT
SESSION_USER
GENERATE_ARRAY
GENERATE_DATE_ARRAY
Cuando se establece el VALUE
, se reemplaza el valor existente de esa opción para la vista, si había uno. Cuando se configura el VALUE
como NULL
, se borra el valor de la vista para esa opción.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La vista que se va a modificar. |
bigquery.tables.update |
La vista que se va a modificar. |
Ejemplos
Configura la marca de tiempo de vencimiento y la descripción en una vista
En el siguiente ejemplo, se establece la marca de tiempo de vencimiento de una vista en siete días desde el momento de ejecución de la declaración ALTER VIEW
y también se establece la descripción:
ALTER VIEW mydataset.myview SET OPTIONS ( expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY), description="View that expires seven days from now" )
Declaración ALTER MATERIALIZED VIEW SET OPTIONS
Configura las opciones en una vista materializada.
Sintaxis
ALTER MATERIALIZED VIEW [IF EXISTS] materialized_view_name SET OPTIONS(materialized_view_set_options_list)
Argumentos
IF EXISTS
: Si no existe una vista materializada con ese nombre, la declaración no tiene efecto.materialized_view_name
: El nombre de la vista materializada que se modificará. Consulta Sintaxis de ruta de la tabla.materialized_view_set_options_list
: La lista de opciones que se deben establecer.
materialized_view_set_options_list
La lista de opciones te permite establecer las opciones de la vista materializada, como la habilitación de las actualizaciones, el intervalo de actualización, una etiqueta, y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.
Especifica una lista de opciones de la vista materializada en el siguiente formato:
NAME=VALUE, ...
La combinación de NAME
y VALUE
debe ser una de las siguientes:
NAME |
VALUE |
Detalles |
---|---|---|
enable_refresh |
BOOLEAN |
Ejemplo: |
refresh_interval_minutes |
FLOAT64 |
Ejemplo: |
expiration_timestamp |
TIMESTAMP |
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime. |
friendly_name |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName. |
description |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla description. |
labels |
|
Ejemplo: Esta propiedad es equivalente a la propiedad de recurso de tabla labels. |
Cuando se establece el VALUE
, se reemplaza el valor existente de esa opción para la vista materializada, si es que había uno. Cuando se configura el VALUE
como NULL
, se borra el valor de la vista materializada para esa opción.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.get |
La vista materializada que se modificará. |
bigquery.tables.update |
La vista materializada que se modificará. |
Ejemplos
Configura el estado de habilitación de actualizaciones y el intervalo de actualización en una vista materializada
En el siguiente ejemplo, se habilita la actualización y se establece un intervalo de actualización de 20 minutos para una vista materializada:
ALTER MATERIALIZED VIEW mydataset.my_mv
SET OPTIONS (
enable_refresh=true,
refresh_interval_minutes=20
)
Declaración DROP SCHEMA
Borra un conjunto de datos.
Sintaxis
DROP SCHEMA [IF EXISTS]
[project_name.]dataset_name
[ CASCADE | RESTRICT ]
Argumentos
IF EXISTS
: Si no existe un conjunto de datos con ese nombre, la declaración no tiene efecto.project_name
: El nombre del proyecto que contiene el conjunto de datos La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.dataset_name
: El nombre del conjunto de datos que se borrará.CASCADE
: borra el conjunto de datos y todos los recursos dentro del conjunto, como tablas, vistas y funciones. Debes tener permiso para borrar los recursos o, en caso contrario, la declaración muestra un error. Para obtener una lista de permisos de BigQuery, consulta Funciones y permisos predefinidos.RESTRICT
: borra el conjunto de datos solo si está vacío. De lo contrario, mostrará un error. Si no especificasCASCADE
oRESTRICT
, el comportamiento predeterminado esRESTRICT
.
Detalles
La declaración se ejecuta en la ubicación del conjunto de datos, si existe, a menos que especifiques la ubicación en la configuración de la consulta. Para obtener más información, consulta Especifica tu ubicación.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.datasets.delete |
El conjunto de datos que se borrará. |
bigquery.tables.delete
|
El conjunto de datos que se borrará. Si el conjunto de datos está vacío, este permiso no es obligatorio. |
Ejemplos
En el siguiente ejemplo, se borra un conjunto de datos llamado mydataset
. Si el conjunto de datos no existe o no está vacío, la instrucción mostrará un error.
DROP SCHEMA mydataset
En el siguiente ejemplo, se descarta el conjunto de datos llamado mydataset
y cualquier recurso que se encuentre en él. Si el conjunto de datos no existe, no se mostrará ningún error.
DROP SCHEMA IF EXISTS mydataset CASCADE
Declaración DROP TABLE
Borra una tabla o clonación de tabla.
Sintaxis
DROP TABLE [IF EXISTS] table_name
Argumentos
IF EXISTS
: Si no existe una tabla con ese nombre, la declaración no tiene efecto.table_name
es el nombre de la tabla que se borrará. Consulta Sintaxis de ruta de la tabla.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.delete |
La tabla que se borrará. |
bigquery.tables.get |
La tabla que se borrará. |
Ejemplos
Borra una tabla
En el siguiente ejemplo, se borra una tabla llamada mytable
en mydataset
:
DROP TABLE mydataset.mytable
Si el nombre de la tabla no existe en el conjunto de datos, se muestra el siguiente error:
Error: Not found: Table myproject:mydataset.mytable
Borra una tabla solo si existe
En el siguiente ejemplo, se borra una tabla llamada mytable
en mydataset
solo si la tabla existe. Si el nombre de la tabla no existe en el conjunto de datos, no se muestra ningún error y no se realiza ninguna acción.
DROP TABLE IF EXISTS mydataset.mytable
Declaración DROP SNAPSHOT TABLE
Borra una instantánea de tabla.
Sintaxis
DROP SNAPSHOT TABLE [IF EXISTS] table_snapshot_name
Argumentos
IF EXISTS
: Si no existe una instantánea de tabla con ese nombre, la declaración no tiene efecto.table_snapshot_name
: es el nombre de la tabla que se borrará. Consulta Sintaxis de ruta de la tabla.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.deleteSnapshot |
La instantánea de la tabla que se borrará. |
Ejemplos
Borra una instantánea de la tabla: falla si no existe
En el siguiente ejemplo, se borra la instantánea de la tabla llamada mytablesnapshot
en el conjunto de datos mydataset
:
DROP SNAPSHOT TABLE mydataset.mytablesnapshot
Si la instantánea de la tabla no existe en el conjunto de datos, se muestra el siguiente error:
Error: Not found: Table snapshot myproject:mydataset.mytablesnapshot
Borra una instantánea de la tabla: se ignora si no existe
En el siguiente ejemplo, se borra la instantánea de la tabla llamada mytablesnapshot
en el conjunto de datos mydataset
.
DROP SNAPSHOT TABLE IF EXISTS mydataset.mytablesnapshot
Si la instantánea de la tabla no existe en el conjunto de datos, no se realiza ninguna acción y no se muestra ningún error.
Para obtener más información sobre cómo crear instantáneas de tablas, consulta CREATE SNAPSHOT TABLE.
Para obtener más información sobre cómo restablecer instantáneas de tablas, consulta CREATE TABLE CLONE.
Declaración DROP EXTERNAL TABLE
Borra una tabla externa.
Sintaxis
DROP EXTERNAL TABLE [IF EXISTS] table_name
Argumentos
IF EXISTS
: Si no existe una tabla externa con ese nombre, la declaración no tiene efecto.table_name
: Es el nombre de la tabla que se borrará. Consulta Sintaxis de ruta de la tabla.
Detalles
Si table_name
existe, pero no es una tabla externa, la declaración muestra el siguiente error:
Cannot drop table_name which has type TYPE. An
external table was expected.
La declaración DROP EXTERNAL
solo quita la definición de la tabla externa de BigQuery. Los datos almacenados en la ubicación externa no se ven afectados.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.delete |
La tabla externa que se borrará. |
bigquery.tables.get |
La tabla externa que se borrará. |
Ejemplos
En el siguiente ejemplo, se descarta la tabla externa llamada external_table
del conjunto de datos mydataset
. Muestra un error si la tabla externa no existe.
DROP EXTERNAL TABLE mydataset.external_table
En el siguiente ejemplo, se descarta la tabla externa llamada external_table
del conjunto de datos mydataset
. Si la tabla externa no existe, no se muestra ningún error.
DROP EXTERNAL TABLE IF EXISTS mydataset.external_table
Declaración DROP VIEW
Borra una vista.
Sintaxis
DROP VIEW [IF EXISTS] view_name
Argumentos
IF EXISTS
: Si no existe una vista con ese nombre, la declaración no tiene efecto.view_name
: El nombre de la vista que se borrará. Consulta Sintaxis de ruta de la tabla.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.delete |
La vista que se borrará. |
bigquery.tables.get |
La vista que se borrará. |
Ejemplos
Borra una vista
En el siguiente ejemplo, se borra una vista llamada myview
en mydataset
:
DROP VIEW mydataset.myview
Si el nombre de la vista no existe en el conjunto de datos, se muestra el siguiente error:
Error: Not found: Table myproject:mydataset.myview
Borra una vista solo si existe
En el siguiente ejemplo, se borra una vista llamada myview
en mydataset
solo si la vista existe. Si el nombre de la vista no existe en el conjunto de datos, no se muestra ningún error y no se realiza ninguna acción.
DROP VIEW IF EXISTS mydataset.myview
Declaración DROP MATERIALIZED VIEW
Borra una vista materializada.
Sintaxis
DROP MATERIALIZED VIEW [IF EXISTS] mv_name
Argumentos
IF EXISTS
: Si no existe una vista materializada con ese nombre, la declaración no tiene efecto.mv_name
: El nombre de la vista materializada que se borrará. Consulta Sintaxis de ruta de la tabla.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.tables.delete |
La vista materializada que se borrará. |
bigquery.tables.get |
La vista materializada que se borrará. |
Ejemplos
Borra una vista materializada
En el siguiente ejemplo, se borra una vista materializada llamada my_mv
en mydataset
:
DROP MATERIALIZED VIEW mydataset.my_mv
Si el nombre de la vista materializada no existe en el conjunto de datos, se muestra el siguiente error:
Error: Not found: Table myproject:mydataset.my_mv
Si borras una vista materializada en otro proyecto, debes especificar el proyecto, el conjunto de datos y la vista materializada en el siguiente formato: `project_id.dataset.materialized_view`
(incluidos los acentos graves si project_id
contiene caracteres especiales); por ejemplo, `myproject.mydataset.my_mv`
.
Borra una vista materializada solo si esta existe
En el siguiente ejemplo, se borra una vista materializada llamada my_mv
en mydataset
solo si la vista materializada existe. Si el nombre de la vista materializada no existe en el conjunto de datos, no se muestra ningún error ni se realiza ninguna acción.
DROP MATERIALIZED VIEW IF EXISTS mydataset.my_mv
Si borras una vista materializada en otro proyecto, debes especificar el proyecto, el conjunto de datos y la vista materializada en el siguiente formato: `project_id.dataset.materialized_view`,
(incluidos los acentos graves si project_id
contiene caracteres especiales); por ejemplo, `myproject.mydataset.my_mv`
.
Declaración DROP FUNCTION
Borra una función definida por el usuario (UDF) persistente.
Sintaxis
DROP FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name
Argumentos
IF EXISTS
: Si no existe una función con ese nombre, la declaración no tiene efecto.project_name
: El nombre del proyecto que contiene la función que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves`
(ejemplo:`google.com:my_project`
).dataset_name
: El nombre del conjunto de datos que contiene la función que se borrará. El valor predeterminado esdefaultDataset
en la solicitud.function_name
: Es el nombre de la función que borrarás.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.delete |
La función que se borrará. |
Ejemplos
La siguiente declaración de ejemplo borra la función parseJsonAsStruct
contenida en el conjunto de datos mydataset
.
DROP FUNCTION mydataset.parseJsonAsStruct;
La siguiente declaración de ejemplo borra la función parseJsonAsStruct
del conjunto de datos sample_dataset
en el proyecto other_project
.
DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;
DROP TABLE FUNCTION
Borra una función de tabla.
Sintaxis
DROP TABLE FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name
Argumentos
IF EXISTS
: Si no existe una función de tabla con este nombre, la declaración no tiene efecto.project_name
: Es el nombre del proyecto que contiene la función de tabla que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.dataset_name
: Es el nombre del conjunto de datos que contiene la función de la tabla que se borrará.function_name
es el nombre de la tabla que se borrará.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.delete |
La función de la tabla que se borrará. |
Ejemplo
En el siguiente ejemplo, se borra una función de tabla llamada my_table_function
:
DROP TABLE FUNCTION mydataset.my_table_function;
Declaración DROP PROCEDURE
Borra un procedimiento almacenado.
Sintaxis
DROP PROCEDURE [IF EXISTS] [[project_name.]dataset_name.]procedure_name
Argumentos
IF EXISTS
: Si no existe el procedimiento con ese nombre, la declaración no tiene efecto.project_name
: El nombre del proyecto que contiene el procedimiento que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves`
(ejemplo:`google.com:my_project`
).dataset_name
: El nombre del conjunto de datos que contiene el procedimiento que se borrará. El valor predeterminado esdefaultDataset
en la solicitud.procedure_name
: Es el nombre de la función que borrarás.
Permisos necesarios
Esta instrucción requiere los siguientes permisos de IAM:
Permiso | Recurso |
---|---|
bigquery.routines.delete |
El procedimiento que se borrará. |
Ejemplos
La siguiente declaración de ejemplo borra el procedimiento myprocedure
contenido en el conjun