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 la consola, 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

  1. Ve a la página de BigQuery en la consola.

    Ir a BigQuery

  2. Haz clic en Redactar consulta nueva.

    Redactar consulta nueva

  3. Ingresa la declaración DDL en el área de texto Editor de consultas. Por ejemplo:

     CREATE TABLE mydataset.newtable ( x INT64 )
     

  4. 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ón CREATE TABLE/VIEW o DROP 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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to create a view using DDL
public class DDLCreateView {

  public static void runDDLCreateView() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String tableId = "MY_VIEW_ID";
    String ddl =
        "CREATE VIEW "
            + "`"
            + projectId
            + "."
            + datasetId
            + "."
            + tableId
            + "`"
            + " OPTIONS("
            + " expiration_timestamp=TIMESTAMP_ADD("
            + " CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),"
            + " friendly_name=\"new_view\","
            + " description=\"a view that expires in 2 days\","
            + " labels=[(\"org_unit\", \"development\")]"
            + " )"
            + " AS SELECT name, state, year, number"
            + " FROM `bigquery-public-data.usa_names.usa_1910_current`"
            + " WHERE state LIKE 'W%'`";
    ddlCreateView(ddl);
  }

  public static void ddlCreateView(String ddl) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration config = QueryJobConfiguration.newBuilder(ddl).build();

      // create a view using query and it will wait to complete job.
      Job job = bigquery.create(JobInfo.of(config));
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("View created successfully");
      } else {
        System.out.println("View was not created");
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("View was not created. \n" + e.toString());
    }
  }
}

Node.js

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function ddlCreateView() {
  // Creates a view via a DDL query

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const projectId = "my_project"
  // const datasetId = "my_dataset"
  // const tableId = "my_new_view"

  const query = `
  CREATE VIEW \`${projectId}.${datasetId}.${tableId}\`
  OPTIONS(
      expiration_timestamp=TIMESTAMP_ADD(
          CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
      friendly_name="new_view",
      description="a view that expires in 2 days",
      labels=[("org_unit", "development")]
  )
  AS SELECT name, state, year, number
      FROM \`bigquery-public-data.usa_names.usa_1910_current\`
      WHERE state LIKE 'W%'`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  job.on('complete', metadata => {
    console.log(`Created new view ${tableId} via job ${metadata.id}`);
  });
}

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.

# from google.cloud import bigquery
# project = 'my-project'
# dataset_id = 'my_dataset'
# table_id = 'new_view'
# client = bigquery.Client(project=project)

sql = """
CREATE VIEW `{}.{}.{}`
OPTIONS(
    expiration_timestamp=TIMESTAMP_ADD(
        CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
    friendly_name="new_view",
    description="a view that expires in 2 days",
    labels=[("org_unit", "development")]
)
AS SELECT name, state, year, number
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state LIKE 'W%'
""".format(
    project, dataset_id, table_id
)

job = client.query(sql)  # API request.
job.result()  # Waits for the query to finish.

print(
    'Created new view "{}.{}.{}".'.format(
        job.destination.project,
        job.destination.dataset_id,
        job.destination.table_id,
    )
)

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ón CREATE no tiene efecto. No puede aparecer con OR 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 max_time_travel_hours debe ser un número entero entre 48 (2 días) y 168 (7 días). Si no se especifica esta opción, 168 horas es el valor predeterminado.

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 con IF NOT EXISTS.

  • TEMP | TEMPORARY: crea una tabla temporal.

  • IF NOT EXISTS: Si existe una tabla con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR 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 tipos STRING.

    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áusula as 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áusula as 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áusula LIKE.
  • No se permiten nombres de columna duplicados.
  • Cuando las cláusulas LIKE y as 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áusula LIKE.

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 DML INSERT 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ón CREATE 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ón NOT NULL opcional para tipos distintos de ARRAY. column_schema también admite opciones en columnas de nivel superior y campos STRUCT.

    column_schema solo se puede usar en la lista de definición de columnas de las declaraciones CREATE TABLE. No se puede usar como tipo en las expresiones. Para

  • simple_type es cualquier tipo de datos compatible aparte de STRUCT y ARRAY.

    Si simple_type es una STRING, admite una cláusula adicional para la intercalación, que define cómo se puede comparar y ordenar una STRING 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ón NOT NULL está presente para una columna o un campo, la columna o el campo se crean con el modo REQUIRED. Por el contrario, cuando la restricción NOT NULL está ausente, la columna o el campo se crean con el modo NULLABLE.

    Las columnas y los campos del tipo ARRAY no son compatibles con el modificador NOT NULL. Por ejemplo, un column_schema de ARRAY<INT64> NOT NULL no es válido, ya que las columnas ARRAY tienen el modo REPEATED y pueden estar vacías, pero no pueden ser NULL. Un elemento ARRAY en una tabla nunca puede ser NULL, independientemente de si se especifica la restricción NOT NULL. Por ejemplo, ARRAY<INT64> es equivalente a ARRAY<INT64 NOT NULL>.

    El atributo NOT NULL del column_schema de una tabla no se propaga a través de las consultas en la tabla. Si la tabla T contiene una columna declarada como x INT64 NOT NULL, por ejemplo, CREATE TABLE dataset.newtable AS SELECT x FROM T crea una tabla llamada dataset.newtable en la que x es NULLABLE.

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áusula AS query_statement.
  • DATE(_PARTITIONTIME): Equivale a _PARTITIONDATE. Esta sintaxis no se puede usar con la cláusula AS query_statement.
  • <date_column>. Partición por una columna DATE con particiones diarias.
  • DATE({ <timestamp_column> | <datetime_column> }). Partición por una columna TIMESTAMP o DATETIME con particiones diarias.
  • DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR }). Partición por una columna DATETIME con el tipo de partición especificado.
  • TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR }). Partición por una columna TIMESTAMP 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áusula AS query_statement.
  • DATE_TRUNC(<date_column>, { MONTH | YEAR }). Partición por una columna DATE 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: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

partition_expiration_days

FLOAT64

Ejemplo: partition_expiration_days=7

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

BOOL

Ejemplo: require_partition_filter=true

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 false.

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

STRING

Ejemplo: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

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

STRING

Ejemplo: friendly_name="my_table"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a table that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • 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

STRING

Ejemplo: description="a unique id"

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
  • Etiquetaorg_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 de STRUCT que contiene 2 campos: word (una STRING) y word_count (un INT64 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 array 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
  • Etiquetaorg_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 array 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
  • Etiquetaorg_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 booleano REQUIRED) y c (un valor flotante NULLABLE)
  • 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ón CREATE 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 por timestamp_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: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

friendly_name

STRING

Ejemplo: friendly_name="my_table_snapshot"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="A table snapshot that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 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 y UPDATE
  • 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 descriptivomy_table_snapshot
  • Descripción: A table snapshot that expires in 2 days
  • Etiquetaorg_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 descriptivomy_table_snapshot
  • Descripción: A table snapshot that expires in 2 days
  • Etiquetaorg_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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si el nombre de la tabla de destino especificado ya existe, la declaración CREATE no tiene ningún efecto. No puede aparecer con OR 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 descriptivomy_table
  • Descripción: A table that expires in 1 year
  • Etiquetaorg_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 descriptivomy_table
  • Descripción: A table that expires in 1 year
  • Etiquetaorg_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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si existe una vista o algún otro recurso de tabla con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR 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: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

friendly_name

STRING

Ejemplo: friendly_name="my_view"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a view that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • 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 descriptivonewview
  • Descripción: A view that expires in 2 days
  • Etiquetaorg_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 descriptivonewview
  • Descripción: A view that expires in 2 days
  • Etiquetaorg_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 descriptivonewview
  • Descripción: A view that expires in 2 days
  • Etiquetaorg_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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si existe una vista materializada o algún otro recurso de tabla con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR 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 en query_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 en query_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 en query 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: enable_refresh=false

refresh_interval_minutes FLOAT64

Ejemplo: refresh_interval_minutes=20

expiration_timestamp TIMESTAMP

Ejemplo: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

friendly_name

STRING

Ejemplo: friendly_name="my_mv"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a materialized view that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 descriptivonew_mv
  • Descripción: A materialized view that expires in 2 days
  • Etiquetaorg_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 descriptivonew_mv
  • Descripción: A view that expires in 2 days
  • Etiquetaorg_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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si existe una tabla externa o algún otro recurso de tabla con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR 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ón column_schema en la instrucción CREATE 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

BOOL

Si es true, habilita las filas a las que les faltan columnas opcionales finales.

Se aplica a los datos CSV.

allow_quoted_newlines

BOOL

Si es true, habilita las secciones de datos entrecomillados que contienen caracteres de salto de línea en el archivo.

Se aplica a los datos CSV.

compression

STRING

El tipo de compresión de la fuente de datos. Entre los valores admitidos, se incluyen los siguientes: GZIP. Si no se especifica, la fuente de datos no está comprimida.

Se aplica a los datos CSV y JSON.

description

STRING

Una descripción de esta tabla.

enable_logical_types

BOOL

Si es true, convierte los tipos lógicos de Avro en sus tipos de SQL correspondientes. Para obtener más información, consulta Tipos lógicos.

Se aplica a los datos de Avro.

enum_as_string

BOOL

Si es true, infiere el tipo lógico de Parquet ENUM como STRING en lugar de BYTES de forma predeterminada.

Se aplica a los datos de Parquet.

enable_list_inference

BOOL

Si es true, usa la inferencia de esquema específicamente para el tipo lógico de Parquet LIST.

Se aplica a los datos de Parquet.

encoding

STRING

La codificación de caracteres de los datos. Los valores admitidos son los siguientes: UTF8 (o UTF-8), ISO_8859_1 (o ISO-8859-1).

Se aplica a los datos CSV.

expiration_timestamp

TIMESTAMP

La hora a la que vence esta tabla. Si no se especifica, la tabla no expira.

Ejemplo: "2025-01-01 00:00:00 UTC".

field_delimiter

STRING

El separador de campos de un archivo CSV (opcional).

Se aplica a los datos CSV.

format

STRING

El formato de los datos externos. Valores admitidos para CREATE EXTERNAL TABLE incluyen los siguientes: AVRO, CSV, DATASTORE_BACKUP, GOOGLE_SHEETS, NEWLINE_DELIMITED_JSON (o JSON), ORC, PARQUET.

Los valores admitidos para LOAD DATA incluyen los siguientes: AVRO, CSV, NEWLINE_DELIMITED_JSON (o JSON), ORC, PARQUET.

El valor JSON es equivalente a NEWLINE_DELIMITED_JSON.

decimal_target_types

ARRAY<STRING>

Determina cómo convertir un tipo Decimal. Equivale a ExternalDataConfiguration.decimal_target_types

Ejemplo: ["NUMERIC", "BIGNUMERIC"].

json_extension

STRING

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:
GEOJSON Datos GeoJSON delimitados por saltos de línea. Para obtener más información, consulta Crea una tabla externa a partir de un archivo GeoJSON delimitado por saltos de línea.

hive_partition_uri_prefix

STRING

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: "gs://bucket/path".

ignore_unknown_values

BOOL

Si es true, ignora los valores adicionales que no están representados en el esquema de la tabla, sin mostrar un error.

Se aplica a los datos CSV y JSON.

max_bad_records

INT64

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

STRING

La string que representa los valores NULL en un archivo CSV.

Se aplica a los datos CSV.

preserve_ascii_control_characters

BOOL

Si es true, se conservan los caracteres de control ASCII incorporados que son los primeros 32 caracteres en la tabla ASCII, desde "\x00" hasta "\x1F".

Se aplica a los datos CSV.

projection_fields

STRING

Una lista de propiedades de entidad para cargar.

Se aplica a los datos de Datastore.

quote

STRING

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 allow_quoted_newlines en true.

Se aplica a los datos CSV.

require_hive_partition_filter

BOOL

Si es true, todas las búsquedas en esta tabla requieren un filtro de partición que se pueda usar para eliminar particiones cuando se leen datos. Se aplica solo a las tablas externas particionadas de subárbol.

Se aplica a los datos de Avro, CSV, JSON, Parquet y ORC.

sheet_range

STRING

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: “sheet1!A1:B20”.

skip_leading_rows

INT64

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

ARRAY<STRING>

Un arreglo de URI completamente calificados para las ubicaciones de datos externas.

Ejemplo: ["gs://bucket/path/*"].

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)
  [OPTIONS (function_option_list)]

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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si existe un conjunto de datos con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR REPLACE.

  • TEMP o TEMPORARY: 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 es defaultDataset 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 par param_name y param_type separados por comas. El valor de param_type es un tipo de datos de BigQuery. Para una UDF de SQL, el valor de param_type también puede ser ANY 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ón add_one(i) siempre muestra i + 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, si add_random(i) de la función muestra i + 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áusula RETURNS, 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 para data_type, consulta Tipos de datos de UDF de JavaScript admitidos.
  • 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ódigo return "\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.
  • 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 formato project_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

STRING

Una descripción de la UDF.
library

ARRAY<STRING>

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: ["gs://my-bucket/lib1.js", "gs://my-bucket/lib2.js"]

endpoint

STRING

Un extremo HTTP de Cloud Functions. Solo se aplica a funciones remotas.

Ejemplo: "https://us-east1-your-project.cloudfunctions.net/foo"

Para obtener más información, consulta Crea una función remota.

user_defined_context

ARRAY<STRUCT<STRING,STRING>>

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: [("key1","value1"),("key2", "value2")]

max_batching_rows

INT64

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 con IF NOT EXISTS.
  • IF NOT EXISTS: Si existe una función de tabla con el mismo nombre, la declaración CREATE no tiene ningún efecto. No puede aparecer con OR 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 de data_type es un tipo de datos de BigQuery escalar o ANY 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. Si RETURNS 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 incluye RETURNS 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 con IF NOT EXISTS.

  • IF NOT EXISTS: Si existe algún procedimiento con el mismo nombre, la declaración CREATE no tiene ningún efecto. No puede aparecer con OR 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 es defaultDataset 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

BOOL

Ejemplo: strict_mode=FALSE

Si strict_mode es TRUE, el cuerpo del procedimiento se someterá a verificaciones adicionales para detectar errores, como tablas o columnas inexistentes. La declaración CREATE PROCEDURE fallará si el cuerpo falla en alguna de estas verificaciones.

Si bien strict_mode es útil para detectar varios tipos comunes de errores, no es exhaustivo; la creación correcta de un procedimiento con strict_mode no garantiza que este se ejecutará con éxito en el entorno de ejecución.

Si strict_mode es FALSE, solo se verifica la sintaxis del cuerpo del procedimiento. Los procedimientos que se invocan de forma recursiva deben crearse con strict_mode=FALSE para evitar que se generen errores a causa de los procedimientos aún inexistentes mientras se están validando.

El valor predeterminado es TRUE.

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ón CREATE no tiene efecto. No puede aparecer con OR 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 de iam_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 tipos
    user:{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 de grantee_list. El filter_expression es similar a la cláusula WHERE en una consulta SELECT.

    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 campo grantee_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 o UPDATE.
    • 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 campo STRING.

  • column_name: es el nombre de una columna de nivel superior en la tabla, que es un STRING o que contiene un campo STRING. La columna debe ser de uno de los siguientes tipos:

    • STRING
    • ARRAY<STRING>
    • STRUCT que contenga al menos un campo anidado de tipo STRING o ARRAY<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       |
+---------------------+

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 max_time_travel_hours debe ser un número entero entre 48 (2 días) y 168 (7 días). Si no se especifica esta opción, 168 horas es el valor predeterminado.

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

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: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

partition_expiration_days

FLOAT64

Ejemplo: partition_expiration_days=7

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

BOOL

Ejemplo: require_partition_filter=true

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 false.

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

STRING

Ejemplo: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

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

STRING

Ejemplo: friendly_name="my_table"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a table that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • 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 valor, se reemplaza el valor existente de esa opción para la tabla, si había uno. Cuando se establece el valor 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ón CREATE 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 modo NULLABLE. Este es el modo predeterminado.
  • Un ARRAY vacío si la columna nueva se agregó con el modo REPEATED.

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 tipo STRING
  • Columna B de tipo GEOGRAPHY
  • Columna C de tipo NUMERIC con el modo REPEATED
  • Columna D de tipo DATE 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 tipo GEOGRAPHY
  • Columna C de tipo INT64 con el modo REPEATED
  • Columna D de tipo INT64 con el modo REQUIRED
  • Columna E de tipo TIMESTAMP 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 tipos STRING. 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 un STRUCT.

  • 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

STRING

Ejemplo: description="a table that expires in 2025"

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 o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • 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ón CREATE 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);

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: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

friendly_name

STRING

Ejemplo: friendly_name="my_view"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a view that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

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 o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • 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 valor, se reemplaza el valor existente de esa opción para la vista, si había uno. Cuando se configura el valor 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

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: enable_refresh=false

refresh_interval_minutes FLOAT64

Ejemplo: refresh_interval_minutes=20

expiration_timestamp TIMESTAMP

Ejemplo: expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC"

Esta propiedad es equivalente a la propiedad de recurso de tabla expirationTime.

friendly_name

STRING

Ejemplo: friendly_name="my_mv"

Esta propiedad es equivalente a la propiedad de recurso de tabla friendlyName.

description

STRING

Ejemplo: description="a materialized view that expires in 2025"

Esta propiedad es equivalente a la propiedad de recurso de tabla description.

labels

ARRAY<STRUCT<STRING, STRING>>

Ejemplo: labels=[("org_unit", "development")]

Esta propiedad es equivalente a la propiedad de recurso de tabla labels.

Cuando se establece el valor, se reemplaza el valor existente de esa opción para la vista materializada, si es que había uno. Cuando se configura el valor 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 ALTER ORGANIZATION SET OPTIONS

Establece las opciones en una organización.

Sintaxis

ALTER ORGANIZATION
SET OPTIONS (
  organization_set_options_list);

Argumentos

organization_set_options_list

La lista de opciones especifica las opciones para la organización. Especifica las opciones en el siguiente formato: NAME=VALUE, ...

Se admiten las siguientes opciones:

NAME VALUE Detalles
default_kms_key_name STRING

Ejemplo: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

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.

default_time_zone STRING Ejemplo: `region-us.default_time_zone` = "America/Los_Angeles". Configura la zona horaria predeterminada como America/Los_Angeles en la región us.
default_query_job_timeout_ms INT64 Ejemplo: `region-us.default_query_job_timeout_ms` = 1800000. Establece el tiempo de espera del trabajo de consulta predeterminado en 30 minutos para una organización en la región us.

Cuando se establece el valor, se reemplaza el valor existente de esa opción para la organización, si existe uno. Cuando se establece el valor como NULL, se borra el valor de la organización para esa opción.

Permisos necesarios

Esta instrucción ALTER ORGANIZATION SET OPTIONS requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.config.update La organización que se va a modificar.

Examples

En el siguiente ejemplo, se establece la zona horaria predeterminada como “America/Chicago” y el tiempo de espera del trabajo de consulta predeterminado en una hora para una organización en la región US.

ALTER ORGANIZATION
SET OPTIONS (
  `region-us.default_time_zone` = "America/Chicago",
  `region-us.default_job_query_timeout_ms` = 3600000
);

Declaración ALTER PROJECT SET OPTIONS

Configura las opciones en un proyecto.

Sintaxis

ALTER PROJECT project_id
SET OPTIONS (project_set_options_list);

Argumentos

  • project_id: El nombre del proyecto que modificarás. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.
  • project_set_options_list: La lista de opciones que se deben establecer.

project_set_options_list

La lista de opciones especifica las opciones para el proyecto. Especifica las opciones en el siguiente formato: NAME=VALUE, ...

Se admiten las siguientes opciones:

NAME VALUE Detalles
default_kms_key_name STRING

Ejemplo: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

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.

default_time_zone STRING Ejemplo: `region-us.default_time_zone` = "America/Los_Angeles". Configura la zona horaria predeterminada como America/Los_Angeles en la región us.
default_query_job_timeout_ms INT64 Ejemplo: `region-us.default_query_job_timeout_ms` = 1800000. Establece el tiempo de espera predeterminado del trabajo de consulta en 30 minutos para un proyecto en la región us.

Cuando se establece el valor, se reemplaza el valor existente de esa opción para el proyecto, si había uno. Cuando se establece el valor como NULL, se borra el valor del proyecto para esa opción.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.config.update El proyecto que se modificará.

Examples

En el siguiente ejemplo, se establece la zona horaria predeterminada como America/New_York y el tiempo de espera predeterminado del trabajo de consulta en 30 minutos para un proyecto en la región us.

ALTER PROJECT project_id
SET OPTIONS (
  `region-us.default_time_zone` = "America/New_York",
  `region-us.default_job_query_timeout_ms` = 1800000
);

Declaración ALTER BI_CAPACITY SET OPTIONS

Configura las opciones en la capacidad de BigQuery BI Engine.

Sintaxis

ALTER BI_CAPACITY `project_id.location_id.default`
SET OPTIONS(bi_capacity_options_list)

Argumentos

  • project_id: ID del proyecto opcional que se beneficiará de la aceleración de BI Engine. Si se omite, se usa el ID del proyecto de consulta.

  • location_id: La ubicación en la que se deben almacenar en caché los datos, con el prefijo region-. Ejemplos: region-us, region-us-central1.

  • bi_capacity_options_list: La lista de opciones que se deben establecer.

bi_capacity_options_list

La lista de opciones especifica un conjunto de opciones para la capacidad de BigQuery BI Engine.

Especifica una lista de opciones de la vista en el siguiente formato:

NAME=VALUE, ...

Se admiten las siguientes opciones:

NAME VALUE Detalles
size_gb INT64 Especifica el tamaño de la reserva en gigabytes.
preferred_tables <ARRAY<STRING>> Lista de tablas a las que se debe aplicar la aceleración. Formato: project.dataset.table or dataset.table. Si se omite el proyecto, se usa el proyecto de consulta.

Cuando se configura VALUE, se reemplaza el valor existente de esa opción para la capacidad de BI Engine, si la hay. Cuando se configura VALUE como NULL, se borra el valor de esa opción.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.bireservations.update Reserva de BI Engine

Examples

Asigna capacidad de BI Engine sin tablas preferidas

ALTER BI_CAPACITY `my-project.region-us.default`
SET OPTIONS(
  size_gb = 250
)

Desasigna la capacidad de IE

ALTER BI_CAPACITY `my-project.region-us.default`
SET OPTIONS(
  size_gb = 0
)

Quita un conjunto de tablas preferidas de la reserva

ALTER BI_CAPACITY `my-project.region-us.default`
SET OPTIONS(
  preferred_tables = NULL
)

Asigna la capacidad de IE con la lista de tablas preferidas

ALTER BI_CAPACITY `my-project.region-us.default`
SET OPTIONS(
  size_gb = 250,
  preferred_tables = ["data_pr