Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Declaraciones de lenguaje de definición de datos (DDL) en SQL estándar de Google

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 de Google. Puedes usar comandos de DDL para crear, modificar y borrar recursos, como los siguientes: tablas, clonaciones de tablas, instantáneas de tablas, vistas, funciones definidas por el usuario (UDF) y políticas de acceso a nivel de fila.

Permisos necesarios

Si quieres crear un trabajo que ejecute una declaración DDL, debes tener el permiso bigquery.jobs.create para el proyecto en el que ejecutas el trabajo. Cada declaración DDL también requiere permisos específicos sobre los recursos afectados, que se documentan en cada declaración.

Funciones de IAM

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

Para obtener más información sobre las funciones de IAM en BigQuery, consulta Funciones y permisos predefinidos o la referencia de permisos de IAM.

Ejecuta declaraciones DDL

Puedes ejecutar declaraciones de DDL con la consola de Google Cloud mediante la herramienta de línea de comandos bq, mediante una llamada a la API de REST 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 Google 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 nuevo.

Sintaxis

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

Argumentos

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

  • DEFAULT COLLATE collate_specification: cuando se crea una tabla nueva en el conjunto de datos, la tabla hereda una especificación de la intercalación predeterminada, a menos que se especifique una especificación de la intercalación de forma explícita para una columna.

    Si quitas o cambias esta especificación de la intercalación más adelante con la declaración ALTER SCHEMA, esto no cambiará las especificaciones de intercalación existentes en este conjunto de datos. Si deseas actualizar una especificación de intercalación existente en un conjunto de datos, debes modificar la columna que contiene la especificación.

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

  • dataset_name: El nombre del conjunto de datos que se borrará.

  • schema_option_list: Una lista de opciones para crear el conjunto de datos.

Detalles

El conjunto de datos se crea en la ubicación que especificas en la configuración de la consulta. Para obtener más información, consulta Especifica tu ubicación.

Para obtener más información sobre la creación de un conjunto de datos, consulta Crea conjuntos de datos. Para obtener más información sobre las cuotas, consulta Límites de conjuntos de datos.

schema_option_list

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

Se admiten las siguientes opciones:

NAME VALUE Detalles
default_kms_key_name STRING Especifica la clave predeterminada de Cloud KMS para encriptar los datos de la tabla en este conjunto de datos. Puedes anular este valor cuando creas una tabla.
default_partition_expiration_days FLOAT64 Especifica la fecha de vencimiento predeterminado, en días, de las particiones de tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla.
default_table_expiration_days FLOAT64 Especifica la fecha de vencimiento predeterminado, en días, de las tablas en este conjunto de datos. Puedes anular este valor cuando creas una tabla.
description STRING Es la descripción del conjunto de datos.
friendly_name STRING Es un nombre descriptivo para el conjunto de datos.
is_case_insensitive BOOL

En vista previa. Disponible para CREATE SCHEMA, pero no para ALTER SCHEMA.

TRUE si el conjunto de datos y sus nombres de tabla no distinguen mayúsculas de minúsculas, de lo contrario, FALSE. Si no se configuró con anterioridad, el conjunto de datos y sus nombres de tabla distinguen mayúsculas de minúsculas.

labels <ARRAY<STRUCT<STRING, STRING>>> Un arreglo de etiquetas para el conjunto de datos, expresado como pares clave-valor.
location STRING La ubicación en la que se crea el conjunto de datos. Si no especificas esta opción, el conjunto de datos se creará en la ubicación en la que se ejecuta la consulta. Si especificas esta opción y también estableces explícitamente la ubicación para el trabajo de consulta, los dos valores deben coincidir; de lo contrario, la consulta fallará.
max_time_travel_hours SMALLINT

En vista previa

Especifica la duración en horas del período del viaje en el tiempo para el conjunto de datos. El valor max_time_travel_hours debe ser un número entero entre 48 (2 días) y 168 (7 días). Si no se especifica esta opción, 168 horas es el valor predeterminado.

Para obtener más información sobre el período de viaje en el tiempo, consulta Configura el período de viaje en el tiempo.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.datasets.create El proyecto en el que creas el conjunto de datos.

Ejemplos

Crea un esquema nuevo

En el ejemplo siguiente, se crea un conjunto de datos con un vencimiento predeterminado de la tabla y un conjunto de etiquetas.

CREATE SCHEMA mydataset
OPTIONS(
  location="us",
  default_table_expiration_days=3.75,
  labels=[("label1","value1"),("label2","value2")]
  )

Crea un conjunto de datos que no distingue mayúsculas de minúsculas

En el siguiente ejemplo, se crea un conjunto de datos que no distingue mayúsculas de minúsculas. El nombre del conjunto de datos y los nombres de las tablas dentro del conjunto de datos no distinguen mayúsculas de minúsculas.

CREATE SCHEMA mydataset
OPTIONS(
  is_case_insensitive=TRUE
)

Crea un esquema con compatibilidad de intercalación

En el siguiente ejemplo, se crea un conjunto de datos con una especificación de la intercalación.

CREATE SCHEMA mydataset
DEFAULT COLLATE 'und:ci'

Declaración CREATE TABLE

Crea una nueva tabla.

Sintaxis

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] TABLE [ IF NOT EXISTS ]
table_name
[(
  column[, ...]
)]
[DEFAULT COLLATE collate_specification]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

Argumentos

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

  • TEMP | TEMPORARY: crea una tabla temporal.

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

  • table_name es el nombre de la tabla que se creará. Consulta Sintaxis de ruta de la tabla. En el caso de las tablas temporales, no incluyas el nombre del proyecto ni el nombre del conjunto de datos.

  • column: La información del esquema de la tabla.

  • collation_specification: Cuando se agrega una columna nueva a la tabla sin una especificación de intercalación explícita, la columna hereda esta especificación de intercalación para tipos STRING.

    Si quitas o cambias esta especificación de la intercalación más adelante con la declaración ALTER TABLE, esto no cambiará las especificaciones de intercalación existentes en esta tabla. Si deseas actualizar una especificación de intercalación existente en una tabla, debes modificar la columna que contiene la especificación.

    Si la tabla forma parte de un esquema, la especificación de la intercalación predeterminada de este conjunto de datos anula la especificación de la intercalación predeterminada para el conjunto de datos.

  • partition_expression es una expresión que determina cómo particionar la tabla.

  • clustering_column_list: Una lista de referencias de columnas separadas por comas que determinan cómo agrupar la tabla en clústeres. No puedes tener intercalaciones en las columnas de esta lista.

  • table_option_list: Una lista de opciones para crear la tabla.

  • query_statement: La consulta a partir de la cual se debe crear la tabla. Para ver la sintaxis de la consulta, visita Referencia de la sintaxis de SQL. Si se usa una especificación de intercalación en esta tabla, la intercalación pasa a través de esta declaración de consulta.

Detalles

Las declaraciones CREATE TABLE deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.
  • La lista de columnas, la cláusula as query_statement o ambas deben estar presentes.
  • Cuando tanto la lista de columnas como la cláusula as query_statement están presentes, BigQuery ignora los nombres en la cláusula as query_statement y hace coincidir las columnas con la lista de columnas por posición.
  • Cuando la cláusula as query_statement está presente, pero la lista de columnas está ausente, BigQuery determina los nombres y tipos de columnas a partir de la cláusula as query_statement.
  • Los nombres de las columnas deben especificarse mediante la lista de columnas, la cláusula as query_statement o el esquema de la tabla en la cláusula LIKE.
  • No se permiten nombres de columna duplicados.
  • Cuando las cláusulas LIKE y as query_statement están presentes, la lista de columnas en la declaración de consulta debe coincidir con las columnas de la tabla a las que hace referencia la cláusula LIKE.

Limitaciones:

  • No es posible crear una tabla particionada por tiempo de transferencia a partir del resultado de una consulta. En cambio, usa una declaración DDL CREATE TABLE para crear la tabla y, luego, utiliza una Declaración DML INSERT a fin de ingresar datos.
  • No es posible utilizar el modificador OR REPLACE para reemplazar una tabla con un tipo diferente de partición. En su lugar, DROP la tabla y, luego, usa una declaración CREATE TABLE ... AS SELECT ... para recrearla.

Esta instrucción admite las siguientes variantes, que tienen las mismas limitaciones:

  • CREATE TABLE LIKE: Crea una tabla con el mismo esquema que una tabla existente.
  • CREATE TABLE COPY: Para crear una tabla, copia el esquema y los datos de una tabla existente.

column

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

column :=
  column_name column_schema

column_schema :=
   {
     simple_type
     | STRUCT<field_list>
     | ARRAY<array_element_schema>
   }
   [DEFAULT default_expression]
   [NOT NULL]
   [OPTIONS(column_option_list)]

field_list :=
  field_name column_schema [, ...]

array_element_schema :=
  { simple_type | STRUCT<field_list> }
  [NOT NULL]

simple_type :=
  { data_type | STRING COLLATE collate_specification }
  • column_name es el nombre de la columna. Los nombres de columnas deben cumplir los siguientes requisitos:

    • Contener solo letras (a-z, A-Z), números (0-9) o guiones bajos (_)
    • Comenzar con una letra o un guion bajo
    • Tener un máximo de 300 caracteres
  • column_schema es similar a un tipo de datos, pero admite una restricción NOT NULL opcional para tipos distintos de ARRAY. column_schema también admite opciones en columnas de nivel superior y campos STRUCT.

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

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

    Si simple_type es una STRING, admite una cláusula adicional para la intercalación, que define cómo se puede comparar y ordenar una STRING resultante. La sintaxis se verá de la siguiente manera:

    STRING COLLATE collate_specification
    

    Si asignaste DEFAULT COLLATE collate_specification a la tabla, la especificación de la intercalación de una columna anula la especificación de la tabla.

  • default_expression: El valor predeterminado asignado a la columna.

  • field_list representa los campos de un struct.

  • field_name: El nombre del campo struct. Los nombres de los campos struct tienen las mismas restricciones que los nombres de columnas.

  • NOT NULL: Cuando la restricción NOT NULL está presente para una columna o un campo, la columna o el campo se crean con el modo REQUIRED. Por el contrario, cuando la restricción NOT NULL está ausente, la columna o el campo se crean con el modo NULLABLE.

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

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

partition_expression

PARTITION BY es una cláusula opcional que controla la partición de la tabla. partition_expression es una expresión que determina cómo particionar la tabla. La expresión de partición puede contener los siguientes valores:

  • _PARTITIONDATE. Partición por tiempo de transferencia con particiones diarias. Esta sintaxis no se puede usar con la cláusula AS query_statement.
  • DATE(_PARTITIONTIME): Equivale a _PARTITIONDATE. Esta sintaxis no se puede usar con la cláusula AS query_statement.
  • <date_column>. Partición por una columna DATE con particiones diarias.
  • DATE({ <timestamp_column> | <datetime_column> }). Partición por una columna TIMESTAMP o DATETIME con particiones diarias.
  • DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR }). Partición por una columna DATETIME con el tipo de partición especificado.
  • TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR }). Partición por una columna TIMESTAMP con el tipo de partición especificado.
  • TIMESTAMP_TRUNC(_PARTITIONTIME, { DAY | HOUR | MONTH | YEAR }). Partición por tiempo de transferencia con el tipo de partición especificado. Esta sintaxis no se puede usar con la cláusula AS query_statement.
  • DATE_TRUNC(<date_column>, { MONTH | YEAR }). Partición por una columna DATE con el tipo de partición especificado.
  • RANGE_BUCKET(<int64_column>, GENERATE_ARRAY(<start>, <end>[, <interval>])). Partición por una columna de números enteros con el rango especificado, en el que:

    • start es el inicio de la partición por rango (inclusivo).
    • end es el final de la partición por rango (exclusivo).
    • interval es el ancho de cada rango dentro de la partición. El valor predeterminado es 1.

clustering_column_list

CLUSTER BY es una cláusula opcional que controla el agrupamiento en clústeres de la tabla. clustering_column_list es una lista separada por comas que determina cómo agrupar la tabla. La lista de columnas de agrupación en clústeres puede contener un máximo de cuatro de estas columnas.

table_option_list

La lista de opciones te permite configurar las opciones de la tabla, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.

Especifica una lista de opciones de la tabla con el siguiente formato:

NAME=VALUE, ...

La combinación de NAME y VALUE debe ser una de las siguientes:

NAME VALUE Detalles
expiration_timestamp TIMESTAMP

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

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

partition_expiration_days

FLOAT64

Ejemplo: partition_expiration_days=7

Establece el vencimiento de la partición en días. Para obtener más información, consulta Configura el vencimiento de la partición. De forma predeterminada, las particiones no se vencen.

Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.expirationMs, pero utiliza días en lugar de milisegundos. Un día equivale a 86,400,000 milisegundos o 24 horas.

Esta propiedad solo se puede configurar si la tabla está particionada.

require_partition_filter

BOOL

Ejemplo: require_partition_filter=true

Especifica si las consultas en esta tabla deben incluir un filtro de predicado que filtre la columna de partición. Si deseas obtener más información, consulta Configura requisitos para filtros de partición. El valor predeterminado es false.

Esta propiedad es equivalente a la propiedad de recurso de tabla timePartitioning.requirePartitionFilter.

Esta propiedad solo se puede configurar si la tabla está particionada.

kms_key_name

STRING

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

Esta propiedad es equivalente a la propiedad de recurso de tabla encryptionConfiguration.kmsKeyName.

Para obtener más detalles, consulta Cómo proteger los datos con claves de Cloud KMS.

friendly_name

STRING

Ejemplo: friendly_name="my_table"

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

description

STRING

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

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

labels

ARRAY<STRUCT<STRING, STRING>>

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

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

VALUE es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.

La expresión constante no puede contener lo siguiente:

  • Una referencia a una tabla
  • Subconsultas o instrucciones de SQL, como SELECT, CREATE o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • Las siguientes funciones escalares:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Si VALUE se evalúa como NULL, se ignora la opción correspondiente NAME en la declaración CREATE TABLE.

column_option_list

La column_option_list de column_schema te permite especificar opciones de campo o columna opcionales. Las opciones de columna tienen la misma sintaxis y los mismos requisitos que las opciones de tabla, pero la lista de elementos NAME y VALUE difiere:

NAME VALUE Detalles
description

STRING

Ejemplo: description="a unique id"

Esta propiedad es equivalente a la propiedad de recurso de tabla schema.fields[].description.

rounding_mode

STRING

En vista previa.

Ejemplo: rounding_mode = "ROUND_HALF_EVEN"

Esto especifica el modo de redondeo que se usa para los valores escritos en una columna de tipo NUMERIC o BIGNUMERIC con parámetro o un campo STRUCT. Se admiten los siguientes valores:

  • "ROUND_HALF_AWAY_FROM_ZERO": Los casos de punto medio se redondean en dirección opuesta al cero. Por ejemplo, 2.5 se redondea a 3.0 y -2.5 se redondea a -3.
  • "ROUND_HALF_EVEN": Los casos de punto medio se redondean hacia el dígito par más cercano. Por ejemplo, 2.5 se redondea a 2.0 y -2.5 se redondea a -2.0.

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

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.tables.create El conjunto de datos en el que creas la tabla.

Además, la cláusula OR REPLACE requiere los permisos bigquery.tables.update y bigquery.tables.updateData.

Si la cláusula OPTIONS incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete.

Ejemplos

Crea una tabla nueva

En el siguiente ejemplo, se crea una tabla particionada llamada newtable en mydataset.

CREATE TABLE mydataset.newtable
(
  x INT64 OPTIONS(description="An optional INTEGER field"),
  y STRUCT<
    a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
    b BOOL
  >
)
PARTITION BY _PARTITIONDATE
OPTIONS(
  expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
  partition_expiration_days=1,
  description="a table that expires in 2025, with each partition living for 24 hours",
  labels=[("org_unit", "development")]
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.newtable, el calificador de tabla podría ser `myproject.mydataset.newtable`.

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

Already Exists: project_id:dataset.table

La tabla usa las siguientes partition_expression para particionar la tabla: PARTITION BY _PARTITIONDATE. Esta expresión particiona la tabla con la fecha en la seudocolumna _PARTITIONDATE.

El esquema de la tabla contiene dos columnas:

  • x: un número entero, con la descripción “Un campo opcional de NÚMERO ENTERO”
  • y: UNA STRUCT que contiene dos columnas:

    • a: un arreglo de strings, con la descripción “Un campo de STRING repetido”
    • b: un valor booleano

La lista de opciones de la tabla especifica lo siguiente:

  • Tiempo de vencimiento de la tabla: 1 de enero de 2025, a las 00:00:00 UTC
  • Vencimiento de la partición: 1 día
  • Descripción: A table that expires in 2025
  • Etiquetaorg_unit = development

Crea una tabla nueva a partir de una tabla existente

En el siguiente ejemplo, se crea una tabla llamada top_words en mydataset a partir de una consulta:

CREATE TABLE mydataset.top_words
OPTIONS(
  description="Top ten words per Shakespeare corpus"
) AS
SELECT
  corpus,
  ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
FROM bigquery-public-data.samples.shakespeare
GROUP BY corpus;

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.top_words, el calificador de tabla podría ser `myproject.mydataset.top_words`.

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

Already Exists: project_id:dataset.table

El esquema de la tabla contiene 2 columnas:

  • corpus: el nombre de un corpus de Shakespeare
  • top_words : un ARRAY de STRUCT que contiene 2 campos: word (una STRING) y word_count (un INT64 con el recuento de palabras )

La lista de opciones de la tabla especifica lo siguiente:

  • Descripción: Top ten words per Shakespeare corpus

Crea una tabla solo si no existe

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

CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
  description="a table that expires in 2025",
  labels=[("org_unit", "development")]
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.newtable, el calificador de tabla podría ser `myproject.mydataset.newtable`.

El esquema de la tabla contiene 2 columnas:

  • x: un número entero
  • y: un STRUCT que contiene a (un 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 compatibilidad de intercalación

En los siguientes ejemplos, se crea una tabla llamada newtable en mydataset con las columnas a, b, c y un struct con los campos x y y. .

Todos los esquemas de columnas STRING en esta tabla se recopilan con 'und:ci':

CREATE TABLE mydataset.newtable (
  a STRING,
  b STRING,
  c STRUCT<
    x FLOAT64
    y ARRAY<STRING>
  >
)
DEFAULT COLLATE 'und:ci';

Solo b y y se intercalan con 'und:ci':

CREATE TABLE mydataset.newtable (
  a STRING,
  b STRING COLLATE 'und:ci',
  c STRUCT<
    x FLOAT64
    y ARRAY<STRING COLLATE 'und:ci'>
  >
);

Crea una tabla con tipos de datos con parámetros

En el siguiente ejemplo, se crea una tabla llamada newtable en mydataset. Los parámetros entre paréntesis especifican que la columna contiene un tipo de datos con parámetros. Consulta Tipos de datos con parámetros para obtener más información al respecto.

CREATE TABLE mydataset.newtable (
  x STRING(10),
  y STRUCT<
    a ARRAY<BYTES(5)>,
    b NUMERIC(15, 2) OPTIONS(rounding_mode = 'ROUND_HALF_EVEN'),
    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, una escala máxima de 2 y el modo de redondeo configurado en “ROUND_HALF_EVEN”) y c (un número de punto flotante)
  • z: un valor BIGNUMERIC con parámetros, con una precisión máxima de 35 y una escala máxima de 0

Crea una tabla con particiones

En el siguiente ejemplo, se crea una tabla particionada llamada newtable en mydataset mediante una columna DATE.

CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY transaction_date
OPTIONS(
  partition_expiration_days=3,
  description="a table partitioned by transaction_date"
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.newtable, el calificador de tabla podría ser `myproject.mydataset.newtable`.

El esquema de la tabla contiene 2 columnas:

  • transaction_id: un número entero
  • transaction_date: una fecha

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento de la partición: tres días
  • Descripción: A table partitioned by transaction_date

Crea una tabla con particiones a partir del resultado de una consulta

En el siguiente ejemplo, se crea una tabla particionada llamada days_with_rain en mydataset mediante una columna DATE.

CREATE TABLE mydataset.days_with_rain
PARTITION BY date
OPTIONS (
  partition_expiration_days=365,
  description="weather stations with precipitation, partitioned by day"
) AS
SELECT
  DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
  (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
   WHERE stations.usaf = stn) AS station_name,  -- Stations can have multiple names
  prcp
FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
WHERE prcp != 99.9  -- Filter unknown values
  AND prcp > 0      -- Filter stations/days with no precipitation

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.days_with_rain, el calificador de tabla podría ser `myproject.mydataset.days_with_rain`.

El esquema de la tabla contiene 2 columnas:

  • date: la DATE de recopilación de los datos
  • station_name: el nombre de la estación meteorológica como un valor STRING
  • prcp: el volumen de precipitaciones en pulgadas como un valor FLOAT64

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento de la partición: un año
  • Descripción: Weather stations with precipitation, partitioned by day

Crea una tabla agrupada en clústeres

Ejemplo 1

En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable en mydataset. La tabla es una tabla particionada; particionada por una columna TIMESTAMP y agrupada por una columna STRING llamada customer_id.

CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.myclusteredtable, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`.

El esquema de la tabla contiene 3 columnas:

  • marca de tiempo: la fecha y hora de recopilación de los datos como TIMESTAMP
  • customer_id: El ID de cliente como STRING
  • transaction_amount: el importe de la transacción como NUMERIC

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento de la partición: 3 días
  • Descripción: A table clustered by customer_id
Ejemplo 2

En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable en mydataset. Es una tabla particionada por tiempo de transferencia.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.myclusteredtable, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`.

El esquema de la tabla contiene 2 columnas:

  • customer_id: El ID de cliente como STRING
  • transaction_amount: el importe de la transacción como NUMERIC

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento de la partición: 3 días
  • Descripción: A table clustered by customer_id
Ejemplo 3

En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable en mydataset. La tabla no está particionada.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
CLUSTER BY
  customer_id
OPTIONS (
  description="a table clustered by customer_id"
)

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.myclusteredtable, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`.

El esquema de la tabla contiene 2 columnas:

  • customer_id: El ID de cliente como STRING
  • transaction_amount: el importe de la transacción como NUMERIC

La lista de opciones de la tabla especifica lo siguiente:

  • Descripción: A table clustered by customer_id

Crea una tabla agrupada en clústeres a partir del resultado de una consulta

Ejemplo 1

En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable en mydataset con el resultado de una consulta. Se trata de una tabla particionada por una columna TIMESTAMP.

CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.myclusteredtable, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`.

El esquema de la tabla contiene 3 columnas:

  • marca de tiempo: la fecha y hora de recopilación de los datos como TIMESTAMP
  • customer_id: El ID de cliente como STRING
  • transaction_amount: el importe de la transacción como NUMERIC

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento de la partición: 3 días
  • Descripción: A table clustered by customer_id
Ejemplo 2

En el siguiente ejemplo, se crea una tabla agrupada en clústeres llamada myclusteredtable en mydataset con el resultado de una consulta. La tabla no está particionada.

CREATE TABLE mydataset.myclusteredtable
(
  customer_id STRING,
  transaction_amount NUMERIC
)
CLUSTER BY
  customer_id
OPTIONS (
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable

Si no configuraste un proyecto predeterminado, antepón un ID del proyecto al nombre del conjunto de datos en el SQL de ejemplo y escribe el nombre entre acentos graves si project_id contiene caracteres especiales: `project_id.dataset.table`. Por lo tanto, en lugar de mydataset.myclusteredtable, el calificador de tabla podría ser `myproject.mydataset.myclusteredtable`.

El esquema de la tabla contiene 2 columnas:

  • customer_id: El ID de cliente como STRING
  • transaction_amount: el importe de la transacción como NUMERIC

La lista de opciones de la tabla especifica lo siguiente:

  • Descripción: A table clustered by customer_id

Crea una tabla temporal

En el siguiente ejemplo, se crea una tabla temporal llamada Example y se insertan valores en ella.

CREATE TEMP TABLE Example
(
  x INT64,
  y STRING
);

INSERT INTO Example
VALUES (5, 'foo');

INSERT INTO Example
VALUES (6, 'bar');

SELECT *
FROM Example;

Esta secuencia de comandos muestra el siguiente resultado:

+-----+---+-----+
| Row | x | y   |
+-----+---|-----+
| 1   | 5 | foo |
| 2   | 6 | bar |
+-----+---|-----+

Declaración CREATE TABLE LIKE

Crea una tabla nueva con todos los mismos metadatos de otra tabla.

Sintaxis

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ]
table_name
LIKE [[project_name.]dataset_name.]source_table_name
...
[OPTIONS(table_option_list)]

Detalles

Esta sentencia es una variante de la sentencia CREATE TABLE y tiene las mismas limitaciones. Además del uso de la cláusula LIKE en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE.

La declaración CREATE TABLE LIKE solo copia los metadatos de la tabla de origen. Puedes usar la cláusula as query_statement para incluir datos en la tabla nueva.

La tabla nueva no tiene relación con la tabla fuente después de su creación. Por lo tanto, las modificaciones en la tabla de origen no se propagarán a la tabla nueva.

De forma predeterminada, la tabla nueva hereda los metadatos de partición, agrupamiento en clústeres y opciones de la tabla de origen. Puedes personalizar los metadatos en la tabla nueva mediante las cláusulas opcionales en la instrucción de SQL. Por ejemplo, si deseas especificar un conjunto de opciones diferente para la tabla nueva, incluye la cláusula OPTIONS con una lista de opciones y valores. Este comportamiento coincide con el de ALTER TABLE SET OPTIONS.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.tables.create El conjunto de datos en el que creas la tabla.
bigquery.tables.get La tabla de origen.

Además, la cláusula OR REPLACE requiere los permisos bigquery.tables.update y bigquery.tables.updateData.

Si la cláusula OPTIONS incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete.

Ejemplos

Ejemplo 1

En el siguiente ejemplo, se crea una tabla nueva llamada newtable en mydataset con los mismos metadatos que sourcetable:

CREATE TABLE mydataset.newtable
LIKE mydataset.sourcetable

Ejemplo 2

En el siguiente ejemplo, se crea una tabla nueva llamada newtable en mydataset con los mismos metadatos que sourcetable y los datos de la declaración SELECT:

CREATE TABLE mydataset.newtable
LIKE mydataset.sourcetable
AS SELECT * FROM mydataset.myothertable

Declaración CREATE TABLE COPY

Crea una tabla con los mismos metadatos y datos que otra tabla. La tabla de origen puede ser una tabla estándar, una clonación de tabla o una instantánea de tabla.

Sintaxis

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name
COPY source_table_name
...
[OPTIONS(table_option_list)]

Detalles

Esta sentencia es una variante de la sentencia CREATE TABLE y tiene las mismas limitaciones. Además del uso de la cláusula COPY en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE.

La declaración CREATE TABLE COPY copia los metadatos y los datos de la tabla de origen.

La tabla nueva hereda la partición y el agrupamiento en clústeres de la tabla de origen. De forma predeterminada, los metadatos de las opciones de tabla de la tabla de origen también se heredan, pero puedes anular las opciones de tabla con la cláusula OPTIONS. El comportamiento es equivalente a ejecutar ALTER TABLE SET OPTIONS después de copiar la tabla.

La tabla nueva no tiene relación con la tabla de origen después de su creación. Las modificaciones de la tabla de origen no se propagan a la tabla nueva.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.tables.create El conjunto de datos en el que creas la instantánea de la tabla.
bigquery.tables.get La tabla de origen.
bigquery.tables.getData La tabla de origen.

Además, la cláusula OR REPLACE requiere los permisos bigquery.tables.update y bigquery.tables.updateData.

Si la cláusula OPTIONS incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete.

Declaración CREATE SNAPSHOT TABLE

Crea una instantánea de tabla a partir de una tabla de origen. La tabla de origen puede ser una tabla, una clonación de tabla o una instantánea de tabla.

Sintaxis

CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] table_snapshot_name
CLONE source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]

Argumentos

  • IF NOT EXISTS: Si existe una instantánea de tabla o algún otro recurso de tabla con el mismo nombre, la declaración CREATE no tiene efecto.

  • table_snapshot_name: Es el nombre de la tabla que deseas crear. El nombre de la instantánea de la tabla debe ser único en cada conjunto de datos. Consulta Sintaxis de ruta de la tabla.

  • source_table_name: Es el nombre de la tabla de la que deseas realizar una instantánea o la instantánea que deseas copiar. Consulta Sintaxis de ruta de la tabla.

    Si la tabla de origen es estándar, BigQuery crea una instantánea de tabla de la tabla de origen. Si la tabla de origen es una instantánea de tabla, BigQuery crea una copia de la instantánea de la tabla.

  • FOR SYSTEM_TIME AS OF te permite seleccionar la versión de la tabla que estaba vigente en el momento especificado por timestamp_expression. Solo se puede usar cuando se crea una instantánea de una tabla. No se puede usar cuando se hace una copia de una instantánea de tabla.

  • snapshot_option_list: Opciones adicionales de creación de instantáneas de tablas, como una etiqueta, y una fecha y hora de vencimiento.

Detalles

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

  • Se permite solo una declaración CREATE.
  • La tabla de origen debe ser una de las siguientes:
    • Una tabla
    • Una clonación de tabla
    • Una instantánea de la tabla
  • La cláusula FOR SYSTEM_TIME AS OF solo se puede usar cuando se crea una instantánea de tabla o una clonación de tabla. No se puede usar cuando se hace una copia de una instantánea de tabla.

snapshot_option_list

La lista de opciones te permite configurar las opciones de instantáneas de tablas, como una etiqueta y una hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.

Especifica una lista de opciones de la instantánea de la tabla en el siguiente formato:

NAME=VALUE, ...

La combinación de NAME y VALUE debe ser una de las siguientes:

NAME VALUE Detalles
expiration_timestamp TIMESTAMP

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

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

friendly_name

STRING

Ejemplo: friendly_name="my_table_snapshot"

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

description

STRING

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

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

labels

ARRAY<STRUCT<STRING, STRING>>

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

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

VALUE es una expresión constante que contiene solo literales, parámetros de consulta y funciones escalares.

La expresión constante no puede contener lo siguiente:

  • Una referencia a una tabla
  • Subconsultas o instrucciones de SQL, como SELECT, CREATE y UPDATE
  • Funciones definidas por el usuario, funciones agregadas o funciones estadísticas
  • Las siguientes funciones escalares:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Si VALUE se evalúa como NULL, se ignora la opción correspondiente NAME en la declaración CREATE SNAPSHOT TABLE.

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.tables.create El conjunto de datos en el que se crea la instantánea de la tabla.
bigquery.tables.createSnapshot La tabla de origen.
bigquery.tables.get La tabla de origen.
bigquery.tables.getData La tabla de origen.

Ejemplos

Crea una instantánea de la tabla: falla si ya existe

En el siguiente ejemplo, se crea una instantánea de la tabla myproject.mydataset.mytable. La instantánea de la tabla se crea en el conjunto de datos mydataset y se llama mytablesnapshot:

CREATE SNAPSHOT TABLE `myproject.mydataset.mytablesnapshot`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="my_table_snapshot",
  description="A table snapshot that expires in 2 days",
  labels=[("org_unit", "development")]
)

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

Already Exists: myproject.mydataset.mytablesnapshot

La lista de opciones de la tabla especifica lo siguiente:

  • Hora de vencimiento: 48 horas después de la creación de la instantánea de la tabla
  • Nombre descriptivomy_table_snapshot
  • Descripción: A table snapshot that expires in 2 days
  • Etiquetaorg_unit = development

Crea una instantánea de la tabla: se ignora si ya existe

En el siguiente ejemplo, se crea una instantánea de la tabla myproject.mydataset.mytable. La instantánea de la tabla se crea en el conjunto de datos mydataset y se llama mytablesnapshot:

CREATE SNAPSHOT TABLE IF NOT EXISTS `myproject.mydataset.mytablesnapshot`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
  friendly_name="my_table_snapshot",
  description="A table snapshot that expires in 2 days"
  labels=[("org_unit", "development")]
)

La lista de opciones de la tabla especifica lo siguiente:

  • Hora de vencimiento: 48 horas después de la creación de la instantánea de la tabla
  • Nombre descriptivomy_table_snapshot
  • Descripción: A table snapshot that expires in 2 days
  • Etiquetaorg_unit = development

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

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

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

Declaración CREATE TABLE CLONE

Crea una clonación de tabla a partir de una tabla de origen. La tabla de origen puede ser una tabla, una clonación de tabla o una instantánea de tabla.

Sintaxis

CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ]
destination_table_name
CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression]
...
[OPTIONS(table_option_list)]

Detalles

Además del uso de la cláusula CLONE en lugar de una lista de columnas, la sintaxis es idéntica a la sintaxis CREATE TABLE.

Argumentos

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

  • IF NOT EXISTS: Si el nombre de la tabla de destino especificado ya existe, la declaración CREATE no tiene ningún efecto. No puede aparecer con OR REPLACE.

destination_table_name es el nombre de la tabla que deseas crear. El nombre de la tabla debe ser único por conjunto de datos. El nombre del conjunto de datos puede contener lo siguiente:

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

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

source_table_name es el nombre de la tabla de origen.

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

  • Se permite solo una declaración CREATE.
  • La tabla que se clona debe ser una tabla, una clonación de tabla o una instantánea de tabla.

OPTIONS

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

Permisos necesarios

Esta instrucción requiere los siguientes permisos de IAM:

Permiso Recurso
bigquery.tables.create El conjunto de datos en el que creas la clonación de tabla.
bigquery.tables.get La tabla de origen.
bigquery.tables.getData La tabla de origen.
bigquery.tables.restoreSnapshot La tabla de origen (obligatorio solo si la tabla de origen es una instantánea de tabla).

Además, la cláusula OR REPLACE requiere los permisos bigquery.tables.update y bigquery.tables.updateData.

Si la cláusula OPTIONS incluye opciones de vencimiento, también se requiere el permiso bigquery.tables.delete.

Ejemplos

Restablece una instantánea de la tabla: falla si la tabla de destino ya existe

En el siguiente ejemplo, se crea la tabla myproject.mydataset.mytable a partir de la instantánea de la tabla myproject.mydataset.mytablesnapshot:

CREATE TABLE `myproject.mydataset.mytable`
CLONE `myproject.mydataset.mytablesnapshot`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY),
  friendly_name="my_table",
  description="A table that expires in 1 year",
  labels=[("org_unit", "development")]
)

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

Already Exists: myproject.mydataset.mytable.

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento: 365 días después de la fecha de creación de la tabla
  • Nombre descriptivomy_table
  • Descripción: A table that expires in 1 year
  • Etiquetaorg_unit = development

Crea una clonación de tabla: ignora si la tabla de destino ya existe

En el siguiente ejemplo, se crea la clonación de tabla myproject.mydataset.mytableclone a partir de la tabla myproject.mydataset.mytable:

CREATE TABLE IF NOT EXISTS `myproject.mydataset.mytableclone`
CLONE `myproject.mydataset.mytable`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 365 DAY),
  friendly_name="my_table",
  description="A table that expires in 1 year",
  labels=[("org_unit", "development")]
)

La lista de opciones de la tabla especifica lo siguiente:

  • Vencimiento: 365 días después de la fecha de creación de la tabla
  • Nombre descriptivomy_table
  • Descripción: A table that expires in 1 year
  • Etiquetaorg_unit = development

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

Para obtener información sobre cómo crear una copia de una tabla, consulta CREATE TABLE COPY.

Para obtener información sobre cómo crear una instantánea de una tabla, consulta CREATE SNAPSHOT TABLE.

Declaración CREATE VIEW

Crea una nueva vista.

Sintaxis

CREATE [ OR REPLACE ] VIEW [ IF NOT EXISTS ] view_name
[(view_column_name_list)]
[OPTIONS(view_option_list)]
AS query_expression

Argumentos

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

  • IF NOT EXISTS: Si existe una vista o algún otro recurso de tabla con el mismo nombre, la declaración CREATE no tiene efecto. No puede aparecer con OR REPLACE.

  • view_name: Es el nombre de la vista que crearás. Consulta Sintaxis de ruta de la tabla.

  • view_column_name_list te permite especificar de forma explícita los nombres de las columnas de la vista, que pueden ser alias de los nombres de las columnas en la consulta de SQL subyacente.

  • view_option_list: Opciones adicionales de creación de vistas, como una etiqueta, y una fecha y hora de vencimiento.

  • query_expression es la expresión de consultas en SQL estándar de Google utilizada para definir la vista.

Detalles

Las declaraciones CREATE VIEW deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.

view_column_name_list

La lista de nombres de columnas de la vista es opcional. Los nombres deben ser únicos, pero no tienen que ser los mismos que los nombres de las columnas de la consulta de SQL subyacente. Por ejemplo, si tu vista se crea con la siguiente declaración:

CREATE VIEW mydataset.age_groups(age, count) AS SELECT age, COUNT(*)
FROM mydataset.people
group by age;

Luego, puedes consultarlo con lo siguiente:

SELECT age, count from mydataset.age_groups;

La cantidad de columnas en la lista de nombres de columnas debe coincidir con la cantidad de columnas en la consulta de SQL subyacente. Si se agregan o se suprimen las columnas de la tabla de la consulta de SQL subyacente, la vista deja de ser válida y se debe volver a crear. Por ejemplo, si la columna age se descarta de la tabla mydataset.people, la vista creada en el ejemplo anterior deja de ser válida.

view_option_list

La lista de opciones te permite establecer las opciones de la vista, como una etiqueta y una fecha y hora de vencimiento. Puedes incluir varias opciones mediante una lista separada por comas.

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

NAME=VALUE, ...

La combinación de NAME y VALUE debe ser una de las siguientes:

NAME VALUE Detalles
expiration_timestamp TIMESTAMP

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

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

friendly_name

STRING

Ejemplo: friendly_name="my_view"

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

description

STRING

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

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

labels

ARRAY<STRUCT<STRING, STRING>>

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

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

VALUE es una expresión constante que contiene solo literales, parámetros de búsqueda y funciones escalares.

La expresión constante no puede contener lo siguiente:

  • Una referencia a una tabla
  • Subconsultas o instrucciones de SQL, como SELECT, CREATE o UPDATE
  • Funciones definidas por el usuario, agregadas o analíticas
  • Las siguientes funciones escalares:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Si VALUE se evalúa como NULL, se ignora la opción correspondiente NAME en la declaración CREATE VIEW