Usa declaraciones del lenguaje de definición de datos (DDL)

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. Actualmente, puedes usar comandos de DDL en BigQuery para las siguientes tareas:

Permisos necesarios

Todos los usuarios requieren el permiso bigquery.jobs.create para crear un trabajo y ejecutar declaraciones de DDL. Cada tipo de declaración de DDL también requiere permisos específicos para ejecutarse. En esta sección, se describe qué funciones de ldentity and Access Management (IAM) proporcionan estos permisos y los necesarios para cada tipo de declaración.

Funciones de IAM

Las funciones predefinidas de IAM bigquery.user, bigquery.jobUser y bigquery.admin incluyen el permiso bigquery.jobs.create requerido.

Las funciones bigquery.admin y bigquery.dataOwner incluyen todos los demás permisos requeridos para ejecutar declaraciones de DDL. La función bigquery.dataEditor incluye algunos de los permisos necesarios, como se muestra en la tabla de la siguiente sección.

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.

Permisos para ejecutar declaraciones de DDL

Los diferentes tipos de declaraciones de DDL requieren diferentes permisos para ejecutarse, como se muestra en la siguiente tabla:

instrucción de SQL Permisos Funciones de IAM Detalles de permisos
CREATE EXTERNAL TABLE bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de la tabla
CREATE FUNCTION bigquery.routines.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
CREATE MATERIALIZED VIEW bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de vistas materializadas
CREATE PROCEDURE bigquery.routines.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
CREATE SCHEMA bigquery.datasets.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de conjunto de datos
CREATE TABLE bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de la tabla
CREATE VIEW bigquery.tables.create bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Ver permisos
ALTER COLUMN
DROP NOT NULL
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de la tabla
ALTER COLUMN
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de la tabla
ALTER MATERIALIZED VIEW
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de vistas materializadas
ALTER SCHEMA
SET OPTIONS
bigquery.datasets.get
bigquery.datasets.update
bigquery.admin
bigquery.dataOwner
Permisos de actualización de conjuntos de datos
ALTER TABLE
ADD COLUMN
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Administra los permisos de la tabla
ALTER TABLE
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Administra los permisos de la tabla
ALTER TABLE
DROP COLUMN
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Administra los permisos de la tabla
ALTER VIEW
SET OPTIONS
bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Administra los permisos de la tabla
DROP EXTERNAL TABLE bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Quita los permisos de la tabla
DROP FUNCTION bigquery.routines.delete bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
DROP MATERIALIZED VIEW bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Permisos de vistas materializadas
DROP PROCEDURE bigquery.routines.delete
bigquery.routines.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
DROP SCHEMA bigquery.datasets.delete
bigquery.tables.delete
*

* No es necesario para un esquema vacío.
bigquery.admin
bigquery.dataOwner
Quita los permisos del esquema
DROP TABLE bigquery.tables.delete
bigquery.tables.get
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Quita los permisos de la tabla
DROP VIEW bigquery.tables.get
bigquery.tables.update
bigquery.admin
bigquery.dataEditor
bigquery.dataOwner
Quita los permisos de la tabla

Ejecuta declaraciones DDL

Puedes ejecutar declaraciones de DDL con Cloud Console, con la herramienta de línea de comandos de bq, una llamada a la API de REST de jobs.query o de manera programática con las bibliotecas cliente de la API de BigQuery.

Console

  1. Ve a la página de BigQuery en Cloud Console.

    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.

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.

CREATE SCHEMA [IF NOT EXISTS]
[project_name.]dataset_name
[OPTIONS(schema_option_list)]

Aquí:

  • IF NOT EXISTS: si incluyes esta cláusula y el conjunto de datos ya existe, la declaración se realiza de forma correcta y no realiza ninguna acción. Si omites esta cláusula y el conjunto de datos ya existe, la declaración muestra un error.

  • project_name es el nombre del proyecto en el que crearás el procedimiento. La configuración predeterminada es el proyecto que ejecuta esta declaración de DDL.

  • dataset_name es el nombre del conjunto de datos que se creará.

  • schema_option_list especifica una lista de opciones para crear el conjunto 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.

Ejemplo

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(
  default_table_expiration_days=3.75,
  labels=[("label1","value1"),("label2","value2")]
  )

Declaración CREATE TABLE

Para crear una tabla en BigQuery, usa la declaración DDL CREATE TABLE.

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] TABLE [ IF NOT EXISTS ]
[[project_name.]dataset_name.]table_name
[(
  column_name column_schema[, ...]
)]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

Aquí:

  • IF NOT EXISTS: crea una nueva tabla solo si la tabla no existe actualmente en el conjunto de datos especificado. No puede aparecer con OR REPLACE.
  • TEMP | TEMPORARY: crea una tabla temporal. Para obtener más información, consulta Tablas temporales.
  • OR REPLACE: Reemplaza cualquier tabla con el mismo nombre si existe. No puede aparecer con IF NOT EXISTS.

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 o con la cláusula as query_statement.
  • No se permiten nombres de columnas duplicados.

Ruta de acceso de la tabla

project_name es el nombre del proyecto en el que crearás la tabla. 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 la tabla. El valor predeterminado es defaultDataset en la solicitud.

table_name es el nombre de la tabla que creas.

Cuando creas una tabla en BigQuery, el nombre de la tabla debe ser único en cada conjunto de datos. El nombre de la tabla puede contener lo siguiente:

  • Hasta 1,024 caracteres
  • Caracteres Unicode en la categoría L (letra), M (marca), N (número), Pc (conector, incluido el guion bajo), Pd (raya) y Zs (espacio) Para obtener más información, consulta la Categoría general.

Por ejemplo, los siguientes son nombres de tabla válidos: table-01, ग्राहक, 00_お客様, étudiant.

Algunos nombres de tablas y prefijos de nombres de tablas están reservados. Si recibes un error que indica que el nombre o prefijo de la tabla está reservado, selecciona un nombre diferente y vuelve a intentarlo.

column_name y column_schema

(column_name column_schema[, ...]) contiene la información de esquema de la tabla en una lista separada por comas:

  • column_name es el nombre de la columna. Los nombres de columnas deben tener las siguientes características:
    • 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 :=
   {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 es cualquier tipo de datos compatible aparte de STRUCT y ARRAY.

field_name es el nombre del campo struct. Los nombres de los campos struct tienen las mismas restricciones que los nombres de columnas.

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.

column_schema solo se puede usar en la lista de definición de columnas de las declaraciones CREATE TABLE. No se puede utilizar como tipo en las expresiones. Por ejemplo, CAST(1 AS INT64 NOT NULL) no es válido.

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 establecer 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

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

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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

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.

query_statement

La cláusula AS query_statement especifica la consulta a partir de la cual se debe crear la tabla. Consulta la Sintaxis de consultas de SQL estándar para conocer la forma compatible de query_statement.

Limitaciones conocidas:

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

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 arreglo de strings) y b (un valor booleano)

La lista de opciones de la tabla especifica lo siguiente:

  • Hora de vencimiento: 1 de enero de 2025, a las 00:00:00 UTC
  • Descripción: A table that expires in 2025
  • 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 arreglo de strings) y b (un valor booleano)

La lista de opciones de la tabla especifica lo siguiente:

  • Hora de vencimiento: 1 de enero de 2025, a las 00:00:00 UTC
  • Descripción: A table that expires in 2025
  • 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 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

Declaración CREATE SNAPSHOT TABLE

Para crear una instantánea de tabla de una tabla estándar o hacer una copia de una instantánea de la tabla, usa la declaración de DDL CREATE SNAPSHOT TABLE.

{CREATE SNAPSHOT TABLE | CREATE SNAPSHOT TABLE IF NOT EXISTS}
[[snapshot_project_name.]snapshot_dataset_name.]table_snapshot_name
CLONE [[source_project_name.]source_dataset_name.]source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]

Aquí:

{CREATE SNAPSHOT TABLE | CREATE SNAPSHOT TABLE IF NOT EXISTS} es una de las siguientes declaraciones:

  • CREATE SNAPSHOT TABLE: Crea una instantánea de tabla nueva si el nombre especificado de la instantánea de la tabla aún no existe. Si el nombre de la instantánea de la tabla especificado ya existe, muestra un error.
  • CREATE SNAPSHOT TABLE IF NOT EXISTS: Crea una instantánea de tabla nueva si el nombre especificado de la instantánea de la tabla aún no existe. Si el nombre de la instantánea de la tabla especificado ya existe, no se realiza ninguna acción y no se muestra ningún error.

snapshot_project_name es el nombre del proyecto en el que quieres crear la instantánea de la tabla. 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`).

snapshot_dataset_name es el nombre del conjunto de datos en el que deseas crear la instantánea de la tabla. El valor predeterminado es defaultDataset en la solicitud.

table_snapshot_name es el nombre de la instantánea de la tabla que deseas crear. El nombre de la instantánea de la tabla debe ser único en cada conjunto de datos. El nombre de la instantánea de la tabla puede contener lo siguiente:

  • Hasta 1,024 caracteres
  • Contiene letras (mayúsculas o minúsculas), números o guiones bajos

OPTIONS(snapshot_option_list) te permite especificar opciones adicionales de creación de vistas, como una etiqueta y una fecha y hora de vencimiento.

CLONE especifica la tabla de la que deseas copiar una instantánea o la que deseas copiar.

FOR SYSTEM_TIME AS OF te permite seleccionar la versión de la tabla actual a la hora especificada 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.

source_project_name es el nombre del proyecto de la tabla que deseas copiar o la instantánea de la tabla que deseas copiar. 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`).

source_dataset_name es el nombre del conjunto de datos que contiene la tabla que deseas copiar o la instantánea que quieres copiar. El valor predeterminado es defaultDataset en la solicitud.

source_table_name es el nombre de la tabla de la que deseas realizar una instantánea o la que quieres copiar. Si la tabla de origen es una tabla estándar, BigQuery crea una instantánea de tabla de la tabla de origen. Si la tabla de origen es una instantánea de la tabla, BigQuery crea una copia de la instantánea de la tabla.

Las declaraciones CREATE SNAPSHOT TABLE deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.
  • La tabla que se está clonando debe ser una de las siguientes opciones:
    • Una tabla estándar (no una vista ni una vista materializada)
    • 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 una 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 la instantánea 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 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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

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

Para restablecer una instantánea de tabla en una tabla estándar en BigQuery, usa la declaración de DDL CREATE TABLE CLONE.

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
[[destination_project_name.]destination_dataset_name.]destination_table_name
CLONE [[snapshot_project_name.]snapshot_dataset_name.]table_snapshot_name
[OPTIONS(table_option_list)]

Aquí:

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE} es una de las siguientes declaraciones:

  • CREATE TABLE: Crea una tabla nueva a partir de una instantánea de la tabla si el nombre de la tabla de destino especificado aún no existe. Si el nombre de la tabla de destino especificada ya existe, muestra un error.
  • CREATE TABLE IF NOT EXISTS: Crea una tabla nueva a partir de una instantánea de la tabla si el nombre de la tabla de destino especificado aún no existe. Si el nombre de la tabla de destino especificado ya existe, no se realiza ninguna acción y no se muestra ningún error.
  • CREATE OR REPLACE TABLE: crea una tabla y reemplaza una tabla existente con el mismo nombre en el conjunto de datos especificado.

destination_project_name es el nombre del proyecto en el que quieres crear la tabla. 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`).

destination_dataset_name es el nombre del conjunto de datos en el que deseas crear la tabla. El valor predeterminado es defaultDataset en la solicitud.

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 de la tabla 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.

CLONE especifica la instantánea de la tabla que deseas restablecer.

snapshot_project_name es el nombre del proyecto que contiene la instantánea de la tabla que deseas restablecer. 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`).

snapshot_dataset_name es el nombre del conjunto de datos que contiene la instantánea de la tabla que deseas restablecer. El valor predeterminado es defaultDataset en la solicitud.

table_snapshot_name es el nombre de la instantánea de la tabla que deseas restablecer.

Las declaraciones CREATE TABLE CLONE deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.
  • La tabla que se está clonando debe ser una instantánea de la tabla.

OPTIONS

Las opciones CREATE TABLE CLONE son las mismas que las opciones de CREATE TABLE.

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

Restablece una instantánea de la tabla: se ignora 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.mytableshapshot:

CREATE TABLE IF NOT EXISTS `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")]
)
CLONE `myproject.mydataset.mytablesnapshot`

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 instantáneas de tablas, consulta CREATE SNAPSHOT TABLE.

Para obtener información sobre cómo quitar instantáneas de tablas, consulta DROP SNAPSHOT TABLE.

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 VIEW

Para crear una vista en BigQuery, usa la declaración DDL CREATE VIEW.

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
[[project_name.]dataset_name.]view_name [(view_column_name_list)]
[OPTIONS(view_option_list)]
AS query_expression

Aquí:

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW} es una de las siguientes declaraciones:

  • CREATE VIEW: crea una nueva vista.
  • CREATE VIEW IF NOT EXISTS: crea una nueva vista solo si la vista no existe actualmente en el conjunto de datos especificado.
  • CREATE OR REPLACE VIEW: crea una vista y reemplaza una existente con el mismo nombre en el conjunto de datos especificado.

project_name es el nombre del proyecto en el que crearás la vista. 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 la vista. El valor predeterminado es defaultDataset en la solicitud.

view_name es el nombre de la vista que crearás. El nombre de la vista debe ser único por conjunto de datos. El nombre de la vista debe cumplir los siguientes requisitos:

  • Contiene hasta 1,024 caracteres
  • Contener letras (mayúsculas o minúsculas), números y guiones bajos

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 te permite especificar opciones adicionales de creación de vistas, como una etiqueta y una fecha y hora de vencimiento.

Las declaraciones CREATE VIEW deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.

query_expression es la expresión de consulta de SQL estándar utilizada para definir la vista.

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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

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.

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

Para crear una vista materializada en BigQuery, usa la declaración DDL CREATE MATERIALIZED VIEW.

{CREATE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW IF NOT EXISTS }
[[project_name.]dataset_name.]materialized_view_name
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(materialized_view_option_list)]
AS query_expression

Aquí:

{CREATE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW IF NOT EXISTS } es una de las siguientes declaraciones:

  • CREATE MATERIALIZED VIEW: Crea una vista materializada nueva.

  • CREATE MATERIALIZED VIEW IF NOT EXISTS: Crea una vista materializada nueva solo si esta no existe en el conjunto de datos especificado.

project_name es el nombre del proyecto en el que crearás la vista materializada. 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`).

Si se omite project_name o es el mismo que el proyecto que ejecuta esta consulta de DDL, este último también se usa como el proyecto predeterminado de las referencias a tablas, funciones, etc., en query_expression (el proyecto predeterminado de las referencias es fijo y no depende de las consultas futuras que invoquen la vista materializada nueva). De lo contrario, todas las referencias en query_expression deben calificarse con proyectos.

dataset_name es el nombre del conjunto de datos en el que crearás la vista materializada. El valor predeterminado es defaultDataset en la solicitud.

materialized_view_name es el nombre de la vista materializada que crearás. El nombre de la vista materializada debe ser único en cada conjunto de datos. El nombre de la vista materializada tiene las siguientes características:

  • Contiene hasta 1,024 caracteres
  • Contener letras (mayúsculas o minúsculas), números y guiones bajos

Las cláusulas PARTITION BY y CLUSTER BY se usan como se usarían en una declaración CREATE TABLE. Una vista materializada solo se puede particionar de la misma manera que la tabla en query expression (la tabla base).

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.

Las declaraciones CREATE MATERIALIZED VIEW deben cumplir con la siguiente regla:

  • Se permite solo una declaración CREATE.

query_expression es la expresión de consulta de SQL estándar que se usa para definir la vista materializada.

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.

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.

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 con el nombre 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

La declaración CREATE EXTERNAL TABLE crea una tabla externa. 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.

CREATE [OR REPLACE] EXTERNAL TABLE [IF NOT EXISTS] [[project_name.]dataset_name.]table_name
[(
  column_name column_schema,
  ...
)]

[WITH PARTITION COLUMNS
  [(
      partition_column_name partition_column_type,
      ...
  )]
]
OPTIONS (
  external_table_option_list,
  ...
);

Aquí:

  • project_name es el nombre del proyecto en el que crearás la tabla. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.

  • dataset_name es el nombre del conjunto de datos en el que crearás la tabla.

  • table_name es el nombre de la tabla externa.

  • column_name es 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.

  • partition_column_name es 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 Diseños de datos admitidos.

  • partition_column_type es el tipo de columna de partición.

  • external_table_option_list especifica una lista de opciones para crear la tabla 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.

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. Los valores admitidos son los siguientes: AVRO, CSV, DATASTORE_BACKUP, GOOGLE_SHEETS, NEWLINE_DELIMITED_JSON (o JSON), ORC y 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.

Los valores admitidos son los siguientes:
GEOJSON (Vista previa). Datos GeoJSON. Para obtener más información, consulta Carga datos GeoJSON.

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.

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/*"].

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.

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). BigQuery admite las UDF escritas en SQL o JavaScript. Para obtener más información sobre las UDF, consulta Funciones de SQL estándar definidas por el usuario.

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[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

Para crear una UDF de JavaScript, usa la siguiente sintaxis:

CREATE [OR REPLACE] [TEMPORARY | TEMP] FUNCTION [IF NOT EXISTS]
    [[project_name.]dataset_name.]function_name
    ([named_parameter[, ...]])
  RETURNS data_type
  [determinism_specifier]
  LANGUAGE js
  [OPTIONS (function_option_list)]
  AS javascript_code

named_parameter:
  param_name param_type

determinism_specifier:
  { DETERMINISTIC | NOT DETERMINISTIC }

Esta sintaxis consta de los siguientes componentes:

  • IF NOT EXISTS. Crea una función nueva solo si la función no existe en el conjunto de datos especificado. 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.

  • OR REPLACE: Reemplaza cualquier función con el mismo nombre si existe. No puede aparecer con IF NOT EXISTS.

  • 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. Solo se aplica a las UDF de JavaScript.

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

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"]

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);

Declaración CREATE TABLE FUNCTION

Crea una función de tabla, también llamada función de valor de tabla (TVF).

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

Aquí:

  • IF NOT EXISTS. Crea una función nueva solo si la función no existe en el conjunto de datos especificado. No puede aparecer con OR REPLACE.
  • OR REPLACE: Reemplaza cualquier función con el mismo nombre si existe. No puede aparecer con IF NOT EXISTS.
  • 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: 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 muestra deben coincidir con los nombres de la columna de la consulta de SQL.
  • AS query: Especifica la consulta de SQL que se ejecutará. La consulta de SQL debe incluir nombres para todas las columnas.

BigQuery coerciona 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.

Para obtener más información, consulta Funciones de tabla.

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 de retorno 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 un procedimiento, que es un bloque de declaraciones a las que se puede llamar desde otras consultas. Para obtener más información, consulta Secuencias de comandos y procedimientos almacenados.

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
[[project_name.]dataset_name.]procedure_name (procedure_argument[, ...] )
[OPTIONS(procedure_option_list)]
BEGIN
statement_list
END;

procedure_argument: [procedure_argument_mode] argument_name argument_type

procedure_argument_mode: IN | OUT | INOUT

Descripción

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.

statement_list es una lista de declaraciones de BigQuery. Una lista de declaraciones es una serie de declaraciones que terminan con punto y coma.

argument_type es cualquier tipo de BigQuery válido.

procedure_argument_mode especifica si un argumento es una entrada, una salida o ambas.

Los procedimientos pueden llamarse a sí mismos de forma recursiva.

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.

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

Usa los siguientes comandos en tu declaración de DDL para crear o reemplazar una política de acceso a nivel de las filas. Las políticas de acceso a nivel de las filas en una tabla deben tener nombres únicos.

Sintaxis

  {CREATE ROW ACCESS POLICY | CREATE ROW ACCESS POLICY IF NOT EXISTS |
  CREATE OR REPLACE ROW ACCESS POLICY}
  row_access_policy_name ON table_name
  [GRANT TO (grantee_list)]
  FILTER USING (filter_expression);
Nombre del elemento Descripción del elemento Ejemplo

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:
  • Contiene hasta 256 caracteres.
  • Contener letras (mayúsculas o minúsculas), números y guiones bajos. Debe comenzar con una letra.
My_row_filter

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

grantee_list
grantee_list := iam_member [, ...]

GRANT TO es una cláusula opcional que especifica los miembros iniciales con los que se debe crear la política de acceso a nivel de la fila.

grantee_list es una lista de iam_member usuarios o grupos.

Las strings deben ser miembros de IAM válidos, con el formato de un miembro de vinculación de política de IAM, y debe estar entre comillas.

Se admiten los siguientes tipos
  • user:{emailid}: una dirección de correo electrónico que representa una Cuenta de Google específica.
  • serviceAccount:{emailid}: una dirección de correo electrónico que representa una cuenta de servicio.
  • group:{emailid}: una dirección de correo electrónico que representa a un grupo de Google.
  • domain:{domain}: El dominio de Google Workspace (principal) que representa a todos los usuarios de ese dominio.
  • 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 iam_member si están separadas por comas y entre comillas por separado.
user:alice@example.com

serviceAccount:my-other-app@appspot.gserviceaccount.com

group:admins@example.com

domain:example.com







"user:alice@example.com","user:amir@example.com","user:maya@example.com","group:admins@example.com","sales@example.com"

filter_expression

Define el subconjunto de filas de la tabla que se mostrará solo a los miembros de grantee_list. El filter_expression es similar a la cláusula WHERE en una consulta SELECT.

Las siguientes funciones son válidas para la expresión de filtro:
  • 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.

La expresión de filtro 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.
region="us"

first_name="Robert"

Ejemplos

Crea una política de acceso de fila y, luego, modificar a los beneficiarios

   CREATE ROW ACCESS POLICY My_apac_filter
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (region = "apac");
   CREATE OR REPLACE ROW ACCESS POLICY My_apac_filter
   ON project.dataset.My_table
   GRANT TO ("user:xyz@example.com")
   FILTER USING (region = "apac");

Crea una política de acceso de fila con varios beneficiarios

   CREATE ROW ACCESS POLICY My_us_filter
   ON project.dataset.My_table
   GRANT TO ("user:john@example.com", "group:sales-us@example.com", "group:sales-managers@example.com")
   FILTER USING (region = "us");

Crea una política de acceso de fila con allAuthenticatedUsers como beneficiarios

   CREATE ROW ACCESS POLICY My_us_filter
   ON project.dataset.My_table
   GRANT TO ("allAuthenticatedUsers")
   FILTER USING (region = "us");

Crea una política de acceso de fila con un filtro basado en el usuario actual

   CREATE ROW ACCESS POLICY My_row_filter
   ON dataset.My_table
   GRANT TO ("domain:example.com")
   FILTER USING (email = SESSION_USER());

Crea una política de acceso de fila con un filtro en una columna con un tipo ARRAY

   CREATE ROW ACCESS POLICY My_reports_filter
   ON project.dataset.My_table
   GRANT TO ("domain:example.com")
   FILTER USING (SESSION_USER() IN UNNEST(reporting_chain));

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.

ALTER SCHEMA [IF EXISTS]
[project_name.]dataset_name
SET OPTIONS(schema_set_options_list)

Aquí:

  • IF EXISTS: si incluyes esta cláusula y el conjunto de datos especificado no existe, la declaración se realiza correctamente sin ninguna acción. Si omites esta cláusula y el conjunto de datos no existe, la declaración muestra un error.

  • project_name es 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 es el nombre del conjunto de datos.

  • schema_set_options_list especifica 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.

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

Para configurar las opciones de una tabla en BigQuery, usa la declaración DDL ALTER TABLE SET OPTIONS.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
SET OPTIONS(table_set_options_list)

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si está ausente, la consulta falla cuando la tabla especificada no existe.

project_name es el nombre del proyecto que contiene la tabla que modificarás. 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 que contiene la tabla que modificarás. El valor predeterminado es defaultDataset en la solicitud.

table_name es el nombre de la tabla que se modificará.

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

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

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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

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

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

La declaración ALTER TABLE ADD COLUMN agrega una o más columnas nuevas a un esquema de tabla existente. Para obtener más información sobre las modificaciones de esquema en BigQuery, consulta Modifica esquemas de tablas.

ALTER TABLE [[project_name.]dataset_name.]table_name
ADD COLUMN [IF NOT EXISTS] column_name column_schema [, ...]

Aquí:

  • project_name es el nombre del proyecto que contiene la tabla. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.

  • dataset_name es el nombre del conjunto de datos que contiene la tabla.

  • table_name es el nombre de la tabla que se explorará. La tabla ya debe existir y tener un esquema.

  • column_name es el nombre de la columna que deseas agregar.

  • column_schema es el esquema de la columna. En este esquema, se usa la misma sintaxis que el esquema de columna para la instrucción CREATE TABLE.

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.

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.

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.

Declaración ALTER TABLE RENAME TO

Para borrar una tabla en BigQuery, usa la declaración DDL ALTER TABLE RENAME TO.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
RENAME TO new_table_name

Aquí:

  • project_name es el nombre del proyecto que contiene el conjunto de datos. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.
  • dataset_name es el nombre del conjunto de datos que contiene la tabla.
  • table_name es el nombre de la tabla que deseas renombrar.
  • new_table_name es el nombre nuevo de la tabla. El nombre nuevo no puede ser un nombre de tabla existente.

Si IF EXISTS está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si IF EXISTS está ausente, la consulta falla cuando la tabla especificada no existe.

Advertencias:

  • No puedes usar esta declaración para cambiar el nombre de una tabla externa.
  • Si cambias las políticas de la tabla o las políticas de acceso a nivel de las filas 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.

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

La declaración ALTER TABLE DROP COLUMN descarta una o más columnas de un esquema de tabla existente. 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.

Para obtener más información sobre las modificaciones de esquema en BigQuery, consulta Modifica esquemas de tablas.

ALTER TABLE [[project_name.]dataset_name.]table_name
DROP COLUMN [IF EXISTS] column_name [, ...]

Aquí:

  • project_name es el nombre del proyecto que contiene la tabla. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.

  • dataset_name es el nombre del conjunto de datos que contiene la tabla.

  • table_name es el nombre de la tabla que se explorará. La tabla ya debe existir y tener un esquema.

  • column_name es el nombre de la columna que deseas eliminar.

No puedes usar esta declaración para descartar las siguientes columnas:

  • Columnas particionadas
  • Columnas agrupadas
  • Columnas anidadas dentro de los campos RECORD existentes

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.

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 COLUMN SET OPTIONS

Establece opciones, como la descripción de la columna, en una columna de una tabla en BigQuery.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
ALTER COLUMN [IF EXISTS] column_name SET OPTIONS(column_set_options_list)

Aquí:

(ALTER TABLE) IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si está ausente, la consulta falla cuando la tabla especificada no existe.

(ALTER COLUMN) IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando el procedimiento especificado no existe. Si está ausente, la consulta falla cuando la columna especificada no existe.

project_name es el nombre del proyecto que contiene la tabla que modificarás. La configuración predeterminada es el proyecto que ejecuta esta consulta. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, escribe el nombre entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la tabla que modificarás. El valor predeterminado es defaultDataset en la solicitud.

table_name es el nombre de la tabla que se modificará.

column_name es el nombre de la columna de nivel superior que modificarás. No se admite la modificación de subcampos, como columnas anidadas en una STRUCT.

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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

Cuando se establece el VALUE, se reemplaza el valor existente de esa opción para la tabla, si había uno. Cuando se configura el VALUE como NULL, se borra el valor de la vista para esa opción.

Ejemplos

En el siguiente ejemplo, se configura 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.

ALTER TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name
ALTER COLUMN [IF EXISTS] column DROP NOT NULL

Aquí:

(ALTER TABLE) IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si está ausente, la consulta falla cuando la tabla especificada no existe.

(ALTER COLUMN) IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando el procedimiento especificado no existe. Si está ausente, la consulta falla cuando la columna especificada no existe.

project_name es el nombre del proyecto que contiene la tabla que modificarás. 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 que contiene la tabla que modificarás. El valor predeterminado es defaultDataset en la solicitud.

table_name es el nombre de la tabla que se modificará.

column_name es el nombre de la columna de nivel superior que modificarás. No es posible modificar subcampos.

Si una columna no tiene una restricción NOT NULL, la consulta muestra un error.

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 VIEW SET OPTIONS

Para configurar las opciones en una vista en BigQuery, usa la declaración DDL ALTER VIEW SET OPTIONS.

ALTER VIEW [IF EXISTS] [[project_name.]dataset_name.]view_name
SET OPTIONS(view_set_options_list)

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la vista especificada no existe. Si está ausente, la consulta falla cuando la vista especificada no existe.

project_name es el nombre del proyecto que contiene la vista que modificarás. 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 que contiene la vista que modificarás. El valor predeterminado es defaultDataset en la solicitud.

view_name es el nombre de la vista que se modificará.

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. Si la expresión constante se evalúa como null, el NAME de la opción correspondiente se ignora.

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

Cuando se establece el VALUE, se reemplaza el valor existente de esa opción para la vista, si había uno. Cuando se configura el VALUE como NULL, se borra el valor de la vista para esa opción.

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

Para configurar las opciones de una vista materializada en BigQuery, usa la declaración DDL ALTER MATERIALIZED VIEW SET OPTIONS.

ALTER MATERIALIZED VIEW [IF EXISTS] [[project_name.]dataset_name.]materialized_view_name
SET OPTIONS(materialized_view_set_options_list)

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la vista especificada no existe. Si está ausente, la consulta falla cuando la vista especificada no existe.

project_name es el nombre del proyecto que contiene la vista materializada que modificarás. 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 que contiene la vista materializada que modificarás. El valor predeterminado es defaultDataset en la solicitud.

materialized_view_name es el nombre de la vista materializada que modificarás.

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 VALUE, se reemplaza el valor existente de esa opción para la vista materializada, si es que había uno. Cuando se configura el VALUE como NULL, se borra el valor de la vista materializada para esa opción.

Ejemplos

Configura el estado de habilitación de actualizaciones y el intervalo de actualización en una vista materializada

En el siguiente ejemplo, se habilita la actualización y se establece un intervalo de actualización de 20 minutos para una vista materializada:

ALTER MATERIALIZED VIEW mydataset.my_mv
SET OPTIONS (
  enable_refresh=true,
  refresh_interval_minutes=20
)

Declaración DROP SCHEMA

Borra un conjunto de datos.

La declaración se ejecuta en la ubicación del conjunto de datos, si existe, a menos que especifiques la ubicación en la configuración de la consulta. Para obtener más información, consulta Especifica tu ubicación.

DROP SCHEMA [IF EXISTS]
[project_name.]dataset_name
[ CASCADE | RESTRICT ]

Aquí:

  • IF EXISTS: si incluyes esta cláusula y el conjunto de datos especificado no existe, la declaración se realiza correctamente sin ninguna acción. Si omites esta cláusula y el conjunto de datos no existe, la declaración muestra un error.

  • project_name es 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 es el nombre del conjunto de datos que se borrará.

  • CASCADE: borra el conjunto de datos y todos los recursos dentro del conjunto, como tablas, vistas y funciones. Debes tener permiso para borrar los recursos o, en caso contrario, la declaración muestra un error. Para obtener una lista de permisos de BigQuery, consulta Funciones y permisos predefinidos.

  • RESTRICT: borra el conjunto de datos solo si está vacío. De lo contrario, mostrará un error.

Si no especificas CASCADE o RESTRICT, el comportamiento predeterminado es RESTRICT.

Ejemplos

En el siguiente ejemplo, se borra un conjunto de datos llamado mydataset. Si el conjunto de datos no existe o no está vacío, la instrucción mostrará un error.

DROP SCHEMA mydataset

En el siguiente ejemplo, se descarta el conjunto de datos llamado mydataset y cualquier recurso que se encuentre en él. Si el conjunto de datos no existe, no se mostrará ningún error.

DROP SCHEMA IF EXISTS mydataset CASCADE

Declaración DROP TABLE

Para borrar una tabla en BigQuery, usa la declaración DDL DROP TABLE.

DROP TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si está ausente, la consulta falla cuando la tabla especificada no existe.

project_name es el nombre del proyecto que contiene la tabla que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la tabla que se borrará. El valor predeterminado es defaultDataset en la solicitud.

table_name es el nombre de la tabla que se borrará.

Ejemplos

Borra una tabla

En el siguiente ejemplo, se borra una tabla llamada mytable en mydataset:

DROP TABLE mydataset.mytable

Si el nombre de la tabla no existe en el conjunto de datos, se muestra el siguiente error:

Error: Not found: Table myproject:mydataset.mytable

Borra una tabla solo si existe

En el siguiente ejemplo, se borra una tabla llamada mytable en mydataset solo si la tabla existe. Si el nombre de la tabla no existe en el conjunto de datos, no se muestra ningún error y no se realiza ninguna acción.

DROP TABLE IF EXISTS mydataset.mytable

Declaración DROP SNAPSHOT TABLE

Para borrar una instantánea de tabla de BigQuery, usa la declaración de DDL DROP SNAPSHOT TABLE.

DROP SNAPSHOT TABLE [IF EXISTS]
[[project_name.]dataset_name.]table_snapshot_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la tabla especificada no existe. Si está ausente, la consulta falla cuando la tabla especificada no existe.

project_name es el nombre del proyecto que contiene la instantánea de la tabla que deseas borrar. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, utiliza comillas entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la instantánea de la tabla que se borrará. El valor predeterminado es el conjunto de datos defaultDataset en la solicitud.

table_snapshot_name: es el nombre de la tabla que se borrará.

Ejemplos

Borra una instantánea de la tabla: falla si no existe

En el siguiente ejemplo, se borra la instantánea de la tabla llamada mytablesnapshot en el conjunto de datos mydataset:

DROP SNAPSHOT TABLE mydataset.mytablesnapshot

Si la instantánea de la tabla no existe en el conjunto de datos, se muestra el siguiente error:

Error: Not found: Table snapshot myproject:mydataset.mytablesnapshot

Borra una instantánea de la tabla: se ignora si no existe

En el siguiente ejemplo, se borra la instantánea de la tabla llamada mytablesnapshot en el conjunto de datos mydataset.

DROP SNAPSHOT TABLE IF EXISTS mydataset.mytablesnapshot

Si la instantánea de la tabla no existe en el conjunto de datos, no se realiza ninguna acción y no se muestra ningún error.

Para obtener más información sobre cómo crear instantáneas de tablas, consulta CREATE SNAPSHOT TABLE.

Para obtener más información sobre cómo restablecer instantáneas de tablas, consulta CREATE TABLE CLONE.

Declaración DROP EXTERNAL TABLE

La declaración DROP EXTERNAL TABLE borra una tabla externa.

DROP EXTERNAL TABLE [IF EXISTS] [[project_name.]dataset_name.]table_name

Aquí:

  • project_name es el nombre del proyecto que contiene la tabla. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.

  • dataset_name es el nombre del conjunto de datos que contiene la tabla.

  • table_name es el nombre de la tabla que deseas borrar.

Sin la cláusula IF EXISTS, si la tabla externa no existe, la declaración mostrará un error. Si se incluye la cláusula IF EXISTS y la tabla no existe, no se muestra ningún error ni se realiza ninguna acción.

Si table_name existe, pero no es una tabla externa, la declaración muestra el siguiente error:

Cannot drop table_name which has type TYPE. An external table was expected.

La declaración DROP EXTERNAL solo quita la definición de la tabla externa de BigQuery. Los datos almacenados en la ubicación externa no se ven afectados.

Ejemplos

En el siguiente ejemplo, se descarta la tabla externa llamada external_table del conjunto de datos mydataset. Muestra un error si la tabla externa no existe.

DROP EXTERNAL TABLE mydataset.external_table

En el siguiente ejemplo, se descarta la tabla externa llamada external_table del conjunto de datos mydataset. Si la tabla externa no existe, no se muestra ningún error.

DROP EXTERNAL TABLE IF EXISTS mydataset.external_table

Declaración DROP VIEW

Para borrar una vista en BigQuery, usa la declaración DDL DROP VIEW.

DROP VIEW [IF EXISTS] [[project_name.]dataset_name.]view_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la vista especificada no existe. Si está ausente, la consulta falla cuando la vista especificada no existe.

project_name es el nombre del proyecto que contiene la vista que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la vista que se borrará. El valor predeterminado es defaultDataset en la solicitud.

view_name es el nombre de la vista que borrarás.

Ejemplos

Borra una vista

En el siguiente ejemplo, se borra una vista llamada myview en mydataset:

DROP VIEW mydataset.myview

Si el nombre de la vista no existe en el conjunto de datos, se muestra el siguiente error:

Error: Not found: Table myproject:mydataset.myview

Borra una vista solo si existe

En el siguiente ejemplo, se borra una vista llamada myview en mydataset solo si la vista existe. Si el nombre de la vista no existe en el conjunto de datos, no se muestra ningún error y no se realiza ninguna acción.

DROP VIEW IF EXISTS mydataset.myview

Declaración DROP MATERIALIZED VIEW

Para borrar una vista materializada en BigQuery, usa la declaración DDL DROP MATERIALIZED VIEW.

DROP MATERIALIZED VIEW [IF EXISTS] [[project_name.]dataset_name.]mv_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la vista materializada especificada no existe. Si está ausente, la consulta falla cuando la vista materializada especificada no existe.

project_name es el nombre del proyecto que contiene la vista materializada que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la vista materializada que se borrará. El valor predeterminado es defaultDataset en la solicitud.

mv_name es el nombre de la vista materializada que borrarás.

Ejemplos

Borra una vista materializada

En el siguiente ejemplo, se borra una vista materializada llamada my_mv en mydataset:

DROP MATERIALIZED VIEW mydataset.my_mv

Si el nombre de la vista materializada no existe en el conjunto de datos, se muestra el siguiente error:

Error: Not found: Table myproject:mydataset.my_mv

Si borras una vista materializada en otro proyecto, debes especificar el proyecto, el conjunto de datos y la vista materializada en el siguiente formato: `project_id.dataset.materialized_view` (incluidos los acentos graves si project_id contiene caracteres especiales); por ejemplo, `myproject.mydataset.my_mv`.

Borra una vista materializada solo si esta existe

En el siguiente ejemplo, se borra una vista materializada llamada my_mv en mydataset solo si la vista materializada existe. Si el nombre de la vista materializada no existe en el conjunto de datos, no se muestra ningún error ni se realiza ninguna acción.

DROP MATERIALIZED VIEW IF EXISTS mydataset.my_mv

Si borras una vista materializada en otro proyecto, debes especificar el proyecto, el conjunto de datos y la vista materializada en el siguiente formato: `project_id.dataset.materialized_view`, (incluidos los acentos graves si project_id contiene caracteres especiales); por ejemplo, `myproject.mydataset.my_mv`.

Declaración DROP FUNCTION

DROP FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando la función especificada no existe. Si está ausente, la consulta falla cuando la función especificada no existe.

project_name es el nombre del proyecto que contiene la función que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene la función que se borrará. El valor predeterminado es defaultDataset en la solicitud.

function_name es el nombre de la función que borrarás.

Ejemplos

La siguiente declaración de ejemplo borra la función parseJsonAsStruct contenida en el conjunto de datos mydataset.

DROP FUNCTION mydataset.parseJsonAsStruct;

La siguiente declaración de ejemplo borra la función parseJsonAsStruct del conjunto de datos sample_dataset en el proyecto other_project.

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;

DROP TABLE FUNCTION

Borra una función de tabla.

DROP TABLE FUNCTION [IF EXISTS] [[project_name.]dataset_name.]function_name

Aquí:

  • IF EXISTS: Si no existe una función de tabla con este nombre, la declaración no tiene efecto.

  • project_name: Es el nombre del proyecto que contiene la función de la tabla que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL.

  • dataset_name: El nombre del conjunto de datos que contiene la función de la tabla que se borrará.

  • function_name es el nombre de la tabla que se borrará.

Ejemplo

En el siguiente ejemplo, se borra una función de tabla llamada my_table_function:

DROP TABLE FUNCTION mydataset.my_table_function;

Declaración DROP PROCEDURE

DROP PROCEDURE [IF EXISTS] [[project_name.]dataset_name.]procedure_name

Aquí:

IF EXISTS: si está presente, la consulta se realiza de forma correcta cuando el procedimiento especificado no existe. Si está ausente, la consulta falla cuando el procedimiento especificado no existe.

project_name es el nombre del proyecto que contiene el procedimiento que se borrará. La configuración predeterminada es el proyecto que ejecuta esta consulta de DDL. Si el nombre del proyecto contiene caracteres especiales, como dos puntos, debe estar entre acentos graves ` (ejemplo: `google.com:my_project`).

dataset_name es el nombre del conjunto de datos que contiene el procedimiento que se borrará. El valor predeterminado es defaultDataset en la solicitud.

procedure_name es el nombre del procedimiento que borrarás.

Ejemplos

La siguiente declaración de ejemplo borra el procedimiento myprocedure contenido en el conjunto de datos mydataset.

DROP PROCEDURE mydataset.myProcedure;

La siguiente declaración de ejemplo borra el procedimiento myProcedure del conjunto de datos sample_dataset en el proyecto other_project.

DROP PROCEDURE `other-project`.sample_dataset.myprocedure;

Declaración DROP ROW ACCESS POLICY

Para borrar una política de acceso a nivel de las filas, usa los siguientes comandos en tu declaración de DDL.

Sintaxis

{DROP ROW ACCESS POLICY | DROP ROW ACCESS POLICY IF EXISTS}
row_access_policy_name ON table_name;
DROP ALL ROW ACCESS POLICIES ON table_name;
Nombre del elemento Descripción del elemento Ejemplo

row_access_policy_name

El nombre de la política de acceso a nivel de las filas que borrarás.
Cada política de acceso a nivel de la fila en una tabla tiene un nombre único.
My_row_filter

table_name

El nombre de la tabla con la política de acceso a nivel de las filas
o las políticas que deseas borrar.
My_table

Ejemplos

Borra una política de acceso a nivel de las filas de una tabla

   DROP ROW ACCESS POLICY My_row_filter ON project.dataset.My_table;

Borra todas las políticas de acceso a nivel de las filas de una tabla

   DROP ALL ROW ACCESS POLICIES ON project.dataset.My_table;