Istruzioni DDL (Data Definition Language) in SQL standard

Le istruzioni DDL (Data Definition Language) consentono di creare e modificare le risorse BigQuery utilizzando la sintassi delle query SQL standard. Puoi utilizzare i comandi DDL per creare, modificare ed eliminare risorse, ad esempio tabelle, cloni di tabelle, istantanea tabella, viste, funzioni definite dall'utente (UDF) e criteri di accesso a livello di riga.

Autorizzazioni obbligatorie

Per creare un job che esegue un'istruzione DDL, devi disporre dell'autorizzazione bigquery.jobs.create per il progetto in cui esegui il job. Ogni istruzione DDL richiede anche autorizzazioni specifiche sulle risorse interessate, documentate in ciascuna istruzione.

Ruoli IAM

I ruoli IAM predefiniti bigquery.user, bigquery.jobUser e bigquery.admin includono l'autorizzazione bigquery.jobs.create obbligatoria.

Per ulteriori informazioni sui ruoli IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti o la guida alle autorizzazioni IAM.

Esecuzione di istruzioni DDL

Puoi eseguire istruzioni DDL utilizzando Cloud Console, lo strumento a riga di comando bq, chiamando l'API REST di jobs.query o a livello di programmazione utilizzando le librerie client dell'API BigQuery.

Console

  1. Vai alla pagina BigQuery in Cloud Console.

    Vai a BigQuery

  2. Fai clic su Crea nuova query.

    Scrivi una nuova query.

  3. Inserisci l'istruzione DDL nell'area di testo Query Editor. Ad esempio:

     CREATE TABLE mydataset.newtable ( x INT64 )
     

  4. Fai clic su Esegui.

bq

Inserisci il comando bq query e fornisci l'istruzione DDL come parametro di ricerca. Imposta il flag use_legacy_sql su false.

bq query --use_legacy_sql=false \
  'CREATE TABLE mydataset.newtable ( x INT64 )'

API

Chiama il metodo jobs.query e fornisci l'istruzione DDL nella proprietà query del corpo della richiesta.

La funzionalità DDL estende le informazioni restituite da una risorsa Jobs. statistics.query.statementType include i seguenti valori aggiuntivi per il supporto DDL:

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query ha due campi aggiuntivi:

  • ddlOperationPerformed: l'operazione DDL eseguita, in base all'esistenza del target DDL. I valori correnti includono:
    • CREATE: la query ha creato il target DDL.
    • SKIP: autonomo. Esempi: CREATE TABLE IF NOT EXISTS è stato inviato ed è presente la tabella. Oppure DROP TABLE IF EXISTS è stato inviato e la tabella non esiste.
    • REPLACE: la query ha sostituito il target DDL. Esempio: CREATE OR REPLACE TABLE è stato inviato e la tabella esiste già.
    • DROP: la query ha eliminato il target DDL.
  • ddlTargetTable: quando invii un'istruzione CREATE TABLE/VIEW o DROP TABLE/VIEW, la tabella di destinazione viene restituita come oggetto con tre campi:
    • "projectId": stringa
    • "datasetId": stringa
    • "tableId": stringa

Java

Chiama il metodo BigQuery.create() per avviare un job di query. Chiama il metodo Job.waitFor() per attendere il termine della query 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

Chiama il metodo Client.query() per avviare un job di query. Chiama il metodo QueryJob.result() per attendere il termine della query 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,
    )
)

Istruzione CREATE SCHEMA

Crea un nuovo set di dati.

Syntax

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

Argomenti

  • IF NOT EXISTS: se esiste un qualsiasi set di dati con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Non può essere visualizzato con OR REPLACE.

  • DEFAULT COLLATE collate_specification: quando nello schema viene creata una nuova tabella, la tabella eredita una specifica di confronto predefinita, a meno che non sia stata specificata in modo esplicito una specifica di confronto per una colonna.

    Se rimuovi o modifichi questa specifica di confronto in un secondo momento con l'istruzione ALTER SCHEMA, le specifiche di confronto esistenti non verranno modificate in questo schema. Se vuoi aggiornare una specifica di confronto esistente in uno schema, devi modificare la colonna che la contiene.

  • project_name: il nome del progetto in cui stai creando il set di dati. Il valore predefinito è il progetto che esegue l'istruzione DDL.

  • dataset_name: il nome del set di dati da creare.

  • schema_option_list: un elenco di opzioni per la creazione del set di dati.

Dettagli

Il set di dati viene creato nella località specificata nelle impostazioni della query. Per ulteriori informazioni, consulta la sezione Specificare la località.

Per scoprire di più sulla creazione di un set di dati, consulta Creazione di un set di dati. Per informazioni sulle quote, consulta Limiti dei set di dati.

schema_option_list

L'elenco di opzioni specifica le opzioni per il set di dati. Specifica le opzioni nel seguente formato: NAME=VALUE, ...

Sono supportate le seguenti opzioni:

NAME VALUE Dettagli
default_kms_key_name STRING Specifica la chiave Cloud KMS predefinita per la crittografia dei dati della tabella in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
default_partition_expiration_days FLOAT64 Specifica la scadenza predefinita, in giorni, delle partizioni della tabella in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
default_table_expiration_days FLOAT64 Specifica la scadenza predefinita, in giorni, delle tabelle in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
description STRING La descrizione del set di dati.
friendly_name STRING Un nome descrittivo per il set di dati.
labels <ARRAY<STRUCT<STRING, STRING>>> Un array delle etichette per il set di dati, espresso come coppie chiave-valore.
location STRING La posizione in cui creare il set di dati. Se non specifichi questa opzione, il set di dati viene creato nella località in cui viene eseguita la query. Se specifichi questa opzione e imposti anche esplicitamente la località del job di query, i due valori dovranno corrispondere, altrimenti la query avrà esito negativo.
max_time_travel_hours SMALLINT

In anteprima.

Specifica la durata in ore della finestra di tempo per il set di dati. Il valore max_time_travel_hours deve essere un numero intero compreso tra 48 (2 giorni) e 168 (7 giorni). Se questa opzione non è specificata, 168 ore è l'opzione predefinita.

Per ulteriori informazioni sulla finestra temporale, consulta Configurazione della finestra temporale.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.datasets.create Il progetto in cui crei il set di dati.

Esempi

Creazione di un nuovo schema

L'esempio seguente crea un set di dati con scadenza predefinita nella tabella e set di etichette.

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

Creazione di uno schema con supporto per fascicoli

L'esempio seguente crea un set di dati con una specifica di confronto.

CREATE SCHEMA mydataset
DEFAULT COLLATE 'und:ci'

Istruzione CREATE TABLE

Crea una nuova tabella.

Syntax

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]

Argomenti

  • OR REPLACE: sostituisce qualsiasi tabella con lo stesso nome, se esistente. Impossibile visualizzare con IF NOT EXISTS.

  • TEMP | TEMPORARY: crea una tabella temporanea.

  • IF NOT EXISTS: se esiste una tabella con lo stesso nome, l'istruzione CREATE non ha effetto. Non può essere visualizzato con OR REPLACE.

  • table_name: il nome della tabella da creare. Consulta la sintassi del percorso della tabella. Per le tabelle temporanee, non includere il nome del progetto o del set di dati.

  • column: informazioni sullo schema della tabella.

  • collation_specification: quando una nuova colonna viene creata nello schema e se la colonna non ha una specifica di confronto esplicita, la colonna eredita questa specifica di confronto per i tipi STRING.

    Se rimuovi o modifichi questa specifica di confronto in un secondo momento con l'istruzione ALTER TABLE, le specifiche di confronto esistenti non verranno modificate in questa tabella. Se vuoi aggiornare una specifica di confronto esistente in una tabella, devi modificare la colonna che la contiene.

    Se la tabella fa parte di uno schema, la specifica di confronto predefinita per questa tabella sostituisce la specifica di confronto predefinita per lo schema.

  • partition_expression: un'espressione che determina come partizionare la tabella.

  • clustering_column_list: un elenco separato da virgole di riferimenti a colonne che determinano come raggruppare la tabella. Non puoi confrontare le colonne in questo elenco.

  • table_option_list: un elenco di opzioni per la creazione della tabella.

  • query_statement: la query da cui creare la tabella. Per la sintassi delle query, consulta la documentazione relativa alla sintassi SQL. {: #query_statement } Se viene utilizzata una specifica di confronto in questa tabella, la regola di confronto supera questa istruzione di query.

Dettagli

Le istruzioni CREATE TABLE devono essere conformi alle seguenti regole:

  • È consentita una sola istruzione CREATE.
  • Deve essere presente l'elenco delle colonne o la clausola as query_statement.
  • Se sono presenti sia l'elenco di colonne sia la clausola as query_statement, BigQuery ignora i nomi nella clausola as query_statement e fa corrispondere le colonne all'elenco di colonne in base alla posizione.
  • Se la clausola as query_statement è presente e l'elenco di colonne è assente, BigQuery determina i nomi e i tipi di colonna della clausola as query_statement.
  • I nomi delle colonne devono essere specificati tramite l'elenco di colonne, la clausola as query_statement o lo schema della tabella nella clausola LIKE.
  • Non sono consentiti nomi di colonna duplicati.
  • Se sono presenti entrambe le clausole LIKE e as query_statement, l'elenco delle colonne nell'istruzione di query deve corrispondere alle colonne della tabella a cui fa riferimento la clausola LIKE.

Limitazioni:

  • Non è possibile creare una tabella partizionata in fase di importazione dal risultato di una query. Utilizza invece un'istruzione DDL CREATE TABLE per creare la tabella, quindi utilizza un'istruzione DML INSERT per inserire dati al suo interno.
  • Non è possibile utilizzare il modificatore OR REPLACE per sostituire una tabella con un tipo di partizionamento diverso. Prova a DROP la tabella, poi usa un'istruzione CREATE TABLE ... AS SELECT ... per ricrearla.

Questa istruzione supporta le seguenti varianti:

column

(column_name column_schema[, ...]) contiene le informazioni sullo schema della tabella in un elenco separato da virgole.

column :=
  column_name column_schema

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

field_list :=
  field_name column_schema [, ...]

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

simple_type :=
  { data_type | STRING COLLATE collate_specification }
  • column_name è il nome della colonna. Il nome di una colonna:

    • Deve contenere solo lettere (a-z, A-Z), numeri (0-9) o trattini bassi (_)
    • Deve iniziare con una lettera o un trattino basso
    • Può contenere un massimo di 300 caratteri
  • column_schema: simile a un tipo di dati, ma supporta un vincolo NOT NULL facoltativo per i tipi diversi da ARRAY. column_schema supporta anche le opzioni nelle colonne di primo livello e nei campi STRUCT.

    column_schema può essere utilizzato solo nell'elenco di definizioni delle colonne delle istruzioni CREATE TABLE. Non può essere utilizzato come tipo nelle espressioni. Per

  • simple_type: qualsiasi tipo di dati supportato a parte STRUCT e ARRAY.

    Se simple_type è un STRING, supporta una clausola aggiuntiva per il collaudo, che definisce come un STRING risultante può essere confrontato e ordinato. La sintassi è la seguente:

    STRING COLLATE collate_specification
    

    Se hai assegnato DEFAULT COLLATE collate_specification alla tabella, la specifica di confronto per una colonna sostituisce la specifica per la tabella.

  • field_list: rappresenta i campi in una struttura.

  • field_name: il nome del campo della struttura. I nomi dei campi Struct hanno le stesse limitazioni dei nomi delle colonne.

  • NOT NULL: quando è presente il vincolo NOT NULL per una colonna o un campo, la colonna o il campo viene creato in modalità REQUIRED. Al contrario, quando il vincolo NOT NULL non è presente, la colonna o il campo viene creato con la modalità NULLABLE.

    Le colonne e i campi di tipo ARRAY non supportano il modificatore NOT NULL. Ad esempio, un elemento column_schema di ARRAY<INT64> NOT NULL non è valido perché le colonne ARRAY hanno modalità REPEATED e possono essere vuote, ma non possono essere NULL. Un elemento array in una tabella non può mai essere NULL, indipendentemente dal fatto che il vincolo NOT NULL sia specificato. Ad esempio, ARRAY<INT64> equivale a ARRAY<INT64 NOT NULL>.

    L'attributo NOT NULL di column_schema di una tabella non si propaga tra le query nella tabella. Se la tabella T contiene una colonna dichiarata come x INT64 NOT NULL, ad esempio, CREATE TABLE dataset.newtable AS SELECT x FROM T crea una tabella denominata dataset.newtable in cui x è NULLABLE.

partition_expression

PARTITION BY è una clausola facoltativa che controlla il partizionamento delle tabelle. partition_expression è un'espressione che determina come partizionare la tabella. L'espressione di partizione può contenere i seguenti valori:

  • _PARTITIONDATE. Partizione per tempo di importazione con partizioni giornaliere. Questa sintassi non può essere utilizzata con la clausola AS query_statement.
  • DATE(_PARTITIONTIME). Equivalente a _PARTITIONDATE. Questa sintassi non può essere utilizzata con la clausola AS query_statement.
  • <date_column>. Partizionamento per una colonna DATE con partizioni giornaliere.
  • DATE({ <timestamp_column> | <datetime_column> }). Partizione per una colonna TIMESTAMP o DATETIME con partizioni giornaliere.
  • DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR }). Partizionamento per colonna DATETIME con il tipo di partizionamento specificato.
  • TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR }). Partizione in base a una colonna TIMESTAMP con il tipo di partizionamento specificato.
  • TIMESTAMP_TRUNC(_PARTITIONTIME, { DAY | HOUR | MONTH | YEAR }). Partizione per tempo di importazione con il tipo di partizionamento specificato. Questa sintassi non può essere utilizzata con la clausola AS query_statement.
  • DATE_TRUNC(<date_column>, { MONTH | YEAR }). Partizionamento per una colonna DATE con il tipo di partizionamento specificato.
  • RANGE_BUCKET(<int64_column>, GENERATE_ARRAY(<start>, <end>[, <interval>])). Partizione in base a una colonna intera con l'intervallo specificato, dove:

    • start è l'inizio del partizionamento degli intervalli, inclusi.
    • end è la parte finale del partizionamento degli intervalli, esclusiva.
    • interval è la larghezza di ogni intervallo all'interno della partizione. Il valore predefinito è 1.

clustering_column_list

CLUSTER BY è una clausola facoltativa che controlla il clustering delle tabelle. clustering_column_list è un elenco separato da virgole che determina come clusterare la tabella. L'elenco di colonne di clustering può contenere un elenco di massimo quattro colonne di clustering.

table_option_list

L'elenco delle opzioni consente di impostare le opzioni della tabella, ad esempio un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni per la tabella nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

partition_expiration_days

FLOAT64

Esempio: partition_expiration_days=7

Imposta la scadenza della partizione in giorni. Per maggiori informazioni, consulta Imposta la scadenza della partizione. Per impostazione predefinita, le partizioni non scadono.

Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.expirationMs, ma utilizza i giorni anziché i millisecondi. Un giorno equivale a 86400000 millisecondi, ovvero 24 ore.

Questa proprietà può essere impostata solo se la tabella è partizionata.

require_partition_filter

BOOL

Esempio: require_partition_filter=true

Specifica se le query in questa tabella devono includere un filtro del predicato che filtra la colonna di partizionamento. Per maggiori informazioni, consulta la sezione Imposta i requisiti del filtro di partizionamento. Il valore predefinito è false.

Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.requirePartitionFilter.

Questa proprietà può essere impostata solo se la tabella è partizionata.

kms_key_name

STRING

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

Questa proprietà equivale alla proprietà della risorsa di tabella encryptionConfiguration.kmsKeyName.

Leggi ulteriori dettagli sulla protezione dei dati con le chiavi Cloud KMS.

friendly_name

STRING

Esempio: friendly_name="my_table"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

VALUE è un'espressione costante contenente solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Se VALUE restituisce NULL, l'opzione NAME corrispondente nell'istruzione CREATE TABLE viene ignorata.

column_option_list

L'elemento column_option_list in column_schema consente di specificare opzioni facoltative per la colonna o il campo. Le opzioni delle colonne hanno la stessa sintassi e gli stessi requisiti delle opzioni della tabella, ma con un elenco diverso di NAME e VALUE:

NAME VALUE Dettagli
description

STRING

Esempio: description="a unique id"

Questa proprietà è equivalente alla proprietà della tabella schema.fields[]..

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui viene creata la tabella.

Esempi

Creazione di una nuova tabella

L'esempio seguente crea una tabella partizionata denominata newtable in 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")]
)

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.newtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.newtable`.

Se il nome della tabella è presente nel set di dati, viene restituito il seguente errore:

Already Exists: project_id:dataset.table

La tabella utilizza il seguente partition_expression per partizionare la tabella: PARTITION BY _PARTITIONDATE. Questa espressione esegue il partizionamento della tabella utilizzando la data nella pseudo-colonna _PARTITIONDATE.

Lo schema della tabella contiene due colonne:

  • x: un numero intero con descrizione "Un campo INTEGER facoltativo".
  • y: uno STRUCT contenente due colonne:

    • a: array di stringhe con descrizione "Un campo STRING ripetuto".
    • b: un valore booleano

L'elenco delle opzioni della tabella specifica:

  • Data di scadenza della tabella: 1 gennaio 2025 alle 00:00:00 UTC
  • Scadenza partizione: 1 giorno
  • Descrizione: A table that expires in 2025
  • Etichetta: org_unit = development

Creazione di una nuova tabella da una tabella esistente

L'esempio seguente crea una tabella denominata top_words in mydataset da una query:

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;

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.top_words, il qualificatore della tabella potrebbe essere `myproject.mydataset.top_words`.

Se il nome della tabella è presente nel set di dati, viene restituito il seguente errore:

Already Exists: project_id:dataset.table

Lo schema della tabella contiene due colonne:

  • corpus: nome di un corpus di Shakespeare
  • top_words: un valore ARRAY di STRUCT contenente due campi: word (un STRING) e word_count (un INT64 con il numero di parole)

L'elenco delle opzioni della tabella specifica:

  • Descrizione: Top ten words per Shakespeare corpus

Creazione di una tabella solo se non esiste

L'esempio seguente crea una tabella denominata newtable in mydataset solo se non è presente alcuna tabella denominata newtable in mydataset. Se il nome della tabella esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.newtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.newtable`.

Lo schema della tabella contiene due colonne:

  • x: un numero intero
  • y: uno STRUCT contenente un (array di stringhe) e b (un booleano)

L'elenco delle opzioni della tabella specifica:

  • Data di scadenza: 1 gennaio 2025 alle 00:00:00 UTC
  • Descrizione: A table that expires in 2025
  • Etichetta: org_unit = development

Creazione o sostituzione di una tabella

L'esempio seguente crea una tabella denominata newtable in mydataset e, se newtable esiste in mydataset, viene sovrascritta con una tabella vuota.

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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.newtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.newtable`.

Lo schema della tabella contiene due colonne:

  • x: un numero intero
  • y: uno STRUCT contenente un (array di stringhe) e b (un booleano)

L'elenco delle opzioni della tabella specifica:

  • Data di scadenza: 1 gennaio 2025 alle 00:00:00 UTC
  • Descrizione: A table that expires in 2025
  • Etichetta: org_unit = development

Creazione di una tabella con REQUIRED colonne

L'esempio seguente crea una tabella denominata newtable in mydataset. Il modificatore NOT NULL nell'elenco di definizioni delle colonne di un'istruzione CREATE TABLE specifica che una colonna o un campo sono stati creati in modalità REQUIRED.

CREATE TABLE mydataset.newtable (
  x INT64 NOT NULL,
  y STRUCT<
    a ARRAY<STRING>,
    b BOOL NOT NULL,
    c FLOAT64
  > NOT NULL,
  z STRING
)

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.newtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.newtable`.

Se il nome della tabella è presente nel set di dati, viene restituito il seguente errore:

Already Exists: project_id:dataset.table

Lo schema della tabella contiene tre colonne:

  • x: un numero intero REQUIRED
  • y: uno STRUCT REQUIRED contenente un (array di stringhe), b (un REQUIRED booleano) e c (un float NULLABLE).
  • z: una stringa NULLABLE.

Creare una tabella con il supporto delle regole di confronto

Gli esempi seguenti creano una tabella denominata newtable in mydataset con le colonne a, b, c e una struttura con campi x e y.

Tutti gli schemi di colonne STRING in questa tabella sono compressi con 'und:ci':

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

Solo b e y sono compressi con 'und:ci':

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

Creazione di una tabella con tipi di dati parametrizzati

L'esempio seguente crea una tabella denominata newtable in mydataset. I parametri tra parentesi specificano che la colonna contiene un tipo di dati con parametri. Consulta Tipi di dati con parametri per ulteriori informazioni sui tipi con parametri.

CREATE TABLE mydataset.newtable (
  x STRING(10),
  y STRUCT<
    a ARRAY<BYTES(5)>,
    b NUMERIC(15, 2),
    c FLOAT64
  >,
  z BIGNUMERIC(35)
)

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Invece di mydataset.newtable, il qualificatore della tabella deve essere `myproject.mydataset.newtable`.

Se il nome della tabella è presente nel set di dati, viene restituito il seguente errore:

Already Exists: project_id:dataset.table

Lo schema della tabella contiene tre colonne:

  • x: una stringa con parametri con una lunghezza massima di 10
  • y: uno STRUCT contenente un (array di byte parametrizzati con una lunghezza massima di 5), b (un NUMERIC parametrizzato con una precisione massima di 15 e una scala massima di 2) e c (un float)
  • z: un BIGNUMERIC parametrizzato con una precisione massima di 35 e una scala massima di 0.

Creazione di una tabella partizionata

L'esempio seguente crea una tabella partizionata denominata newtable in mydataset utilizzando una colonna 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"
)

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.newtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.newtable`.

Lo schema della tabella contiene due colonne:

  • transaction_id: un numero intero
  • transaction_date: una data

L'elenco delle opzioni della tabella specifica:

  • Scadenza partizione: tre giorni
  • Descrizione: A table partitioned by transaction_date

Creazione di una tabella partizionata dal risultato di una query

L'esempio seguente crea una tabella partizionata denominata days_with_rain in mydataset utilizzando una colonna 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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.days_with_rain, il qualificatore della tabella potrebbe essere `myproject.mydataset.days_with_rain`.

Lo schema della tabella contiene due colonne:

  • date: il giorno DATE della raccolta dati
  • station_name: il nome della stazione meteo espresso come STRING
  • prcp: la quantità di precipitazioni in pollici come FLOAT64

L'elenco delle opzioni della tabella specifica:

  • Scadenza partizione: un anno
  • Descrizione: Weather stations with precipitation, partitioned by day

Creazione di una tabella in cluster

Esempio 1

L'esempio seguente crea una tabella in cluster denominata myclusteredtable in mydataset. La tabella è una tabella partizionata, partizionata da una colonna TIMESTAMP e cluster da una colonna STRING denominata 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"
)

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.myclusteredtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.myclusteredtable`.

Lo schema della tabella contiene tre colonne:

  • timestamp: l'ora della raccolta dei dati come TIMESTAMP
  • customer_id: l'ID cliente come STRING
  • transaction_amount: l'importo della transazione come NUMERIC

L'elenco delle opzioni della tabella specifica:

  • Scadenza partizione: 3 giorni
  • Descrizione: A table clustered by customer_id
Esempio 2

L'esempio seguente crea una tabella in cluster denominata myclusteredtable in mydataset. La tabella è una tabella partizionata in fase di importazione.

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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.myclusteredtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.myclusteredtable`.

Lo schema della tabella contiene due colonne:

  • customer_id: l'ID cliente come STRING
  • transaction_amount: l'importo della transazione come NUMERIC

L'elenco delle opzioni della tabella specifica:

  • Scadenza partizione: 3 giorni
  • Descrizione: A table clustered by customer_id
Esempio 3

L'esempio seguente crea una tabella in cluster denominata myclusteredtable in mydataset. La tabella non è partizionata.

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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.myclusteredtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.myclusteredtable`.

Lo schema della tabella contiene due colonne:

  • customer_id: l'ID cliente come STRING
  • transaction_amount: l'importo della transazione come NUMERIC

L'elenco delle opzioni della tabella specifica:

  • Descrizione: A table clustered by customer_id

Creazione di una tabella in cluster dal risultato di una query

Esempio 1

L'esempio seguente crea una tabella in cluster denominata myclusteredtable in mydataset utilizzando il risultato di una query. La tabella è una tabella partizionata, partizionata da una colonna 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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.myclusteredtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.myclusteredtable`.

Lo schema della tabella contiene tre colonne:

  • timestamp: l'ora della raccolta dei dati come TIMESTAMP
  • customer_id: l'ID cliente come STRING
  • transaction_amount: l'importo della transazione come NUMERIC

L'elenco delle opzioni della tabella specifica:

  • Scadenza partizione: 3 giorni
  • Descrizione: A table clustered by customer_id
Esempio 2

L'esempio seguente crea una tabella in cluster denominata myclusteredtable in mydataset utilizzando il risultato di una query. La tabella non è partizionata.

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

Se non hai configurato un progetto predefinito, anteponi un ID progetto al nome del set di dati nell'SQL di esempio e racchiudi il nome tra accento grave se project_id contiene caratteri speciali: `project_id.dataset.table`. Quindi, al posto di mydataset.myclusteredtable, il qualificatore della tabella potrebbe essere `myproject.mydataset.myclusteredtable`.

Lo schema della tabella contiene due colonne:

  • customer_id: l'ID cliente come STRING
  • transaction_amount: l'importo della transazione come NUMERIC

L'elenco delle opzioni della tabella specifica:

  • Descrizione: A table clustered by customer_id

Creazione di una tabella temporanea

L'esempio seguente crea una tabella temporanea denominata Example e vi inserisce valori.

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

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

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

SELECT *
FROM Example;

Questo script restituisce il seguente output:

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

Istruzione CREATE TABLE LIKE

Crea una nuova tabella con tutti gli stessi metadati di un'altra tabella.

Syntax

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

Dettagli

Fatta eccezione per l'utilizzo della clausola LIKE al posto di un elenco di colonne, la sintassi è identica alla sintassi CREATE TABLE.

L'istruzione CREATE TABLE LIKE copia solo i metadati della tabella di origine. Puoi utilizzare la clausola as query_statement per includere dati nella nuova tabella.

La nuova tabella non ha alcuna relazione con la tabella di origine dopo la creazione; pertanto le modifiche alla tabella di origine non si propagano alla nuova tabella.

Per impostazione predefinita, la nuova tabella eredita partizioni, clustering e metadati delle opzioni dalla tabella di origine. Puoi personalizzare i metadati nella nuova tabella utilizzando le clausole facoltative nell'istruzione SQL. Ad esempio, se vuoi specificare un insieme diverso di opzioni per la nuova tabella, includi la clausola OPTIONS con un elenco di opzioni e valori. Questo comportamento corrisponde a quello di ALTER TABLE SET OPTIONS.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui viene creata la tabella.
bigquery.tables.get La tabella di origine.

Esempi

Esempio 1

L'esempio seguente crea una nuova tabella denominata newtable in mydataset con gli stessi metadati di sourcetable:

CREATE TABLE mydataset.newtable
LIKE mydataset.sourcetable

Esempio 2

L'esempio seguente crea una nuova tabella denominata newtable in mydataset con gli stessi metadati di sourcetable e i dati dell'istruzione SELECT:

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

Istruzione CREATE TABLE COPY

Crea una tabella che ha gli stessi metadati e dati di un'altra tabella. La tabella di origine può essere una tabella, un clone di tabella o uno istantanea tabella.

Syntax

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

Dettagli

Fatta eccezione per l'utilizzo della clausola COPY al posto di un elenco di colonne, la sintassi è identica alla sintassi CREATE TABLE.

L'istruzione CREATE TABLE COPY copia sia i metadati sia i dati della tabella di origine.

La nuova tabella eredita il partizionamento e il clustering dalla tabella di origine. Per impostazione predefinita, vengono ereditati anche i metadati delle opzioni della tabella della tabella di origine, ma puoi eseguire l'override delle opzioni della tabella utilizzando la clausola OPTIONS. Il comportamento è equivalente a eseguire ALTER TABLE SET OPTIONS dopo la copia della tabella.

La nuova tabella non ha alcuna relazione con la tabella di origine dopo la creazione; le modifiche alla tabella di origine non vengono propagate alla nuova tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui crei lo snapshot della tabella.
bigquery.tables.get La tabella di origine.
bigquery.tables.getData La tabella di origine.

Istruzione CREATE SNAPSHOT TABLE

Crea uno istantanea tabella basato su una tabella di origine. La tabella di origine può essere una tabella, un clone di tabella o uno snapshot tabella.

Syntax

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

Argomenti

  • IF NOT EXISTS: se esiste uno snapshot della tabella o un'altra risorsa per la tabella con lo stesso nome, l'istruzione CREATE non ha alcun effetto.

  • table_snapshot_name: il nome dello snapshot della tabella che vuoi creare. Il nome dello snapshot della tabella deve essere univoco per ogni set di dati. Consulta la sintassi del percorso della tabella.

  • source_table_name: il nome della tabella di cui vuoi eseguire lo snapshot o lo snapshot della tabella che vuoi copiare. Consulta la sintassi del percorso della tabella.

    Se la tabella di origine è una tabella standard, BigQuery crea uno snapshot della tabella di origine. Se la tabella di origine è uno snapshot di tabella, BigQuery crea una copia dello snapshot della tabella.

  • FOR SYSTEM_TIME AS OF: consente di selezionare la versione della tabella corrente al momento specificato da timestamp_expression. Può essere utilizzata solo quando si crea un'istantanea di una tabella; non può essere utilizzata quando si crea una copia di uno snapshot della tabella.

  • snapshot_option_list: opzioni aggiuntive di creazione degli snapshot delle tabelle come etichetta e data di scadenza.

Dettagli

Le istruzioni CREATE SNAPSHOT TABLE devono essere conformi alle seguenti regole:

  • È consentita una sola istruzione CREATE.
  • La tabella di origine deve essere una delle seguenti:
    • Una tabella
    • Il clone di una tabella
    • Uno snapshot della tabella
  • La clausola FOR SYSTEM_TIME AS OF può essere utilizzata solo quando crei uno snapshot di una tabella o di un clone di tabella; non può essere utilizzata quando crei una copia di un'istantanea della tabella.

snapshot_option_list

L'elenco di opzioni consente di impostare le opzioni dello snapshot della tabella, ad esempio un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni dello snapshot della tabella nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa di tabella expirationTime.

friendly_name

STRING

Esempio: friendly_name="my_table_snapshot"

Questa proprietà equivale alla proprietà della risorsa di tabella friendlyName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa di tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà della risorsa di tabella labels.

VALUE è un'espressione costante che contiene solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Se VALUE restituisce NULL, l'opzione NAME corrispondente nell'istruzione CREATE SNAPSHOT TABLE viene ignorata.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui crei l'istantanea della tabella.
bigquery.tables.createSnapshot La tabella di origine.
bigquery.tables.get La tabella di origine.
bigquery.tables.getData La tabella di origine.

Esempi

Crea uno snapshot della tabella: errore se già esistente

L'esempio seguente crea uno snapshot della tabella myproject.mydataset.mytable. Lo snapshot della tabella viene creato nel set di dati mydataset e denominato 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")]
)

Se il nome dello snapshot della tabella esiste già nel set di dati, viene restituito il seguente errore:

Already Exists: myproject.mydataset.mytablesnapshot

L'elenco delle opzioni dello snapshot della tabella specifica quanto segue:

  • Data di scadenza: 48 ore dopo la creazione dello snapshot della tabella.
  • Nome semplice: my_table_snapshot
  • Descrizione: A table snapshot that expires in 2 days
  • Etichetta: org_unit = development

Crea uno snapshot della tabella: ignora se esiste già

L'esempio seguente crea uno snapshot della tabella myproject.mydataset.mytable. Lo snapshot della tabella viene creato nel set di dati mydataset e denominato 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")]
)

L'elenco delle opzioni dello snapshot della tabella specifica quanto segue:

  • Data di scadenza: 48 ore dopo la creazione dello snapshot della tabella.
  • Nome semplice: my_table_snapshot
  • Descrizione: A table snapshot that expires in 2 days
  • Etichetta: org_unit = development

Se il nome dello snapshot della tabella esiste già nel set di dati, non viene intrapresa alcuna azione e non viene restituito alcun errore.

Per informazioni sul ripristino degli snapshot delle tabelle, consulta CREATE TABLE CLONE.

Per informazioni sulla rimozione degli snapshot delle tabelle, consulta DROP SNAPSHOT TABLE.

Istruzione CREATE TABLE CLONE

Crea un clone di una tabella basato su una tabella di origine. La tabella di origine può essere una tabella, un clone di tabelle o uno istantanea tabella.

Syntax

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

Dettagli

Fatta eccezione per l'utilizzo della clausola CLONE al posto di un elenco di colonne, la sintassi è identica alla sintassi CREATE TABLE.

Argomenti

  • OR REPLACE: sostituisce una tabella con lo stesso nome se esiste. Impossibile visualizzare con IF NOT EXISTS.

  • IF NOT EXISTS: se il nome della tabella di destinazione specificata esiste già, l'istruzione CREATE non ha alcun effetto. Non può essere visualizzato con OR REPLACE.

destination_table_name è il nome della tabella che vuoi creare. Il nome della tabella deve essere univoco per ogni set di dati. Il nome della tabella può contenere quanto segue:

  • Può includere un massimo di 1024 caratteri
  • Lettere (maiuscole e minuscole), numeri e trattini bassi

OPTIONS(table_option_list) ti consente di specificare ulteriori opzioni di creazione della tabella, ad esempio un'etichetta e una scadenza.

source_table_name è il nome della tabella di origine.

Le istruzioni CREATE TABLE CLONE devono essere conformi alle seguenti regole:

  • È consentita una sola istruzione CREATE.
  • La tabella clonata deve essere una tabella, un clone di tabella o uno snapshot tabella.

OPTIONS

Le opzioni CREATE TABLE CLONE sono le stesse delle opzioni CREATE TABLE.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui crei il clone della tabella.
bigquery.tables.get La tabella di origine.
bigquery.tables.getData La tabella di origine.
bigquery.tables.restoreSnapshot La tabella di origine (obbligatoria solo se si tratta di uno snapshot della tabella).

Esempi

Ripristina uno snapshot della tabella: errore se la tabella di destinazione esiste già

L'esempio seguente crea la tabella myproject.mydataset.mytable dallo snapshot della tabella 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")]
)

Se il nome della tabella esiste nel set di dati, viene restituito il seguente errore:

Already Exists: myproject.mydataset.mytable.

L'elenco delle opzioni della tabella specifica quanto segue:

  • Data di scadenza: 365 giorni dopo la creazione della tabella
  • Nome semplice: my_table
  • Descrizione: A table that expires in 1 year
  • Etichetta: org_unit = development

Crea un clone di una tabella: ignora se la tabella di destinazione esiste già

L'esempio seguente crea il clone della tabella myproject.mydataset.mytableclone in base alla tabella 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")]
)

L'elenco delle opzioni della tabella specifica quanto segue:

  • Data di scadenza: 365 giorni dopo la creazione della tabella
  • Nome semplice: my_table
  • Descrizione: A table that expires in 1 year
  • Etichetta: org_unit = development

Se il nome della tabella esiste nel set di dati, non viene intrapresa alcuna azione e non viene restituito alcun errore.

Per informazioni sulla creazione di una copia di una tabella, vedi CREATE TABLE COPY.

Per informazioni sulla creazione di uno snapshot di una tabella, vedi CREATE SNAPSHOT TABLE.

Istruzione CREATE VIEW

Crea una nuova vista.

Syntax

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

Argomenti

  • OR REPLACE: sostituisce qualsiasi vista con lo stesso nome se esiste. Impossibile visualizzare con IF NOT EXISTS.

  • IF NOT EXISTS: se esiste una vista o un'altra risorsa di tabella con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Impossibile visualizzare con OR REPLACE.

  • view_name: il nome della vista che stai creando. Consulta la sintassi del percorso della tabella.

  • view_column_name_list: consente di specificare esplicitamente i nomi delle colonne della vista, che potrebbero essere alias dei nomi delle colonne nella query SQL sottostante.

  • view_option_list: opzioni di creazione delle viste aggiuntive, come etichetta e data di scadenza.

  • query_expression: l'espressione query standard di SQL utilizzata per definire la vista.

Dettagli

Le istruzioni CREATE VIEW devono essere conformi alle seguenti regole:

  • È consentita una sola istruzione CREATE.

view_column_name_list

L'elenco dei nomi delle colonne della visualizzazione è facoltativo. I nomi devono essere univoci, ma non devono necessariamente essere uguali ai nomi delle colonne della query SQL sottostante. Ad esempio, se la vista viene creata con la seguente istruzione:

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

Successivamente, puoi eseguire query all'interno di:

SELECT age, count from mydataset.age_groups;

Il numero di colonne nell'elenco dei nomi di colonna deve corrispondere al numero di colonne nella query SQL sottostante. Se le colonne della tabella della query SQL sottostante vengono aggiunte o eliminate, la vista non è più valida e deve essere ricreata. Ad esempio, se la colonna age viene eliminata dalla tabella mydataset.people, la vista creata nell'esempio precedente non sarà più valida.

view_option_list

L'elenco di opzioni consente di impostare le opzioni di visualizzazione, ad esempio un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni di visualizzazione nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

friendly_name

STRING

Esempio: friendly_name="my_view"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

VALUE è un'espressione costante contenente solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

Se VALUE restituisce NULL, l'opzione NAME corrispondente nell'istruzione CREATE VIEW viene ignorata.

Progetto predefinito nel corpo della vista

Se la vista viene creata nello stesso progetto utilizzato per eseguire l'istruzione CREATE VIEW, il corpo della vista query_expression può fare riferimento alle entità senza specificare il progetto; il progetto predefinito è il progetto proprietario della vista. Esamina la query di esempio riportata di seguito.

CREATE VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;

Dopo aver eseguito la query CREATE VIEW sopra indicata nel progetto myProject, puoi eseguire la query SELECT * FROM myProject.myDataset.myView. Indipendentemente dal progetto scelto per eseguire questa query SELECT, la tabella di riferimento anotherDataset.myTable viene sempre risolta in base al progetto myProject.

Se la vista non viene creata nello stesso progetto utilizzato per eseguire l'istruzione CREATE VIEW, tutti i riferimenti nel corpo della vista query_expression devono essere qualificati con gli ID progetto. Ad esempio, la query CREATE VIEW di esempio precedente non è valida se viene eseguita in un progetto diverso da myProject.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui viene creata la vista.

Esempi

Creazione di una nuova vista

L'esempio seguente crea una vista denominata newview in 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`

Se il nome della visualizzazione è presente nel set di dati, viene restituito il seguente errore:

Already Exists: project_id:dataset.table

La visualizzazione viene definita utilizzando la seguente query SQL standard:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

L'elenco delle opzioni di visualizzazione specifica:

  • Data di scadenza: 48 ore dal momento in cui viene creata la visualizzazione.
  • Nome semplice: newview
  • Descrizione: A view that expires in 2 days
  • Etichetta: org_unit = development

La creazione di una vista solo se non esiste

L'esempio seguente crea una vista denominata newview in mydataset solo se non esiste nessuna vista denominata newview in mydataset. Se il nome vista esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

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 visualizzazione viene definita utilizzando la seguente query SQL standard:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

L'elenco delle opzioni di visualizzazione specifica:

  • Data di scadenza: 48 ore dal momento in cui viene creata la visualizzazione.
  • Nome semplice: newview
  • Descrizione: A view that expires in 2 days
  • Etichetta: org_unit = development

Creazione o sostituzione di una vista

L'esempio seguente crea una vista denominata newview in mydataset e, se newview esiste in mydataset, viene sovrascritta utilizzando l'espressione di query specificata.

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 visualizzazione viene definita utilizzando la seguente query SQL standard:

SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable

L'elenco delle opzioni di visualizzazione specifica:

  • Data di scadenza: 48 ore dal momento in cui viene creata la visualizzazione.
  • Nome semplice: newview
  • Descrizione: A view that expires in 2 days
  • Etichetta: org_unit = development

Istruzione CREATE MATERIALIZED VIEW

Crea una nuova vista materializzata.

Syntax

CREATE [ OR REPLACE ] MATERIALIZED VIEW [ IF NOT EXISTS ] materialized_view_name
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(materialized_view_option_list)]
AS query_expression

Argomenti

  • OR REPLACE: sostituisce qualsiasi vista materializzata con lo stesso nome, se esistente. Non può essere visualizzato con IF NOT EXISTS.

  • IF NOT EXISTS: se esiste una vista materializzata o un'altra risorsa per la tabella con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Impossibile visualizzare con OR REPLACE.

  • materialized_view_name: il nome della vista materializzata che stai creando. Consulta la sintassi del percorso della tabella.

    Se project_name viene omesso dal nome della vista materializzata o è il progetto che esegue questa query DDL, quest'ultimo viene utilizzato anche come progetto predefinito per i riferimenti a tabelle, funzioni e altre risorse in query_expression. Il progetto predefinito dei riferimenti è fisso e non dipende dalle query future che richiamano la nuova vista materializzata. In caso contrario, tutti i riferimenti in query_expression devono essere qualificati con i nomi dei progetti.

    Il nome della vista materializzata deve essere univoco per ogni set di dati.

  • partition_expression: un'espressione che determina come partizionare la tabella. Una vista materializzata può essere partizionata solo come la tabella in query expression (la tabella di base) è partizionata.

  • clustering_column_list: un elenco separato da virgole di riferimenti a colonne che determinano come raggruppare la vista materializzata.

  • materialized_view_option_list** ti consente di specificare ulteriori opzioni di visualizzazione materializzate, ad esempio se l'aggiornamento è attivato, l'intervallo di aggiornamento, un'etichetta e una scadenza.

  • query_expression: l'espressione di query SQL standard utilizzata per definire la vista materializzata.

Dettagli

Le istruzioni CREATE MATERIALIZED VIEW devono essere conformi alle seguenti regole:

  • È consentita una sola istruzione CREATE.

Progetto predefinito nel corpo della vista materializzata

Se la vista materializzata viene creata nello stesso progetto utilizzato per eseguire l'istruzione CREATE MATERIALIZED VIEW, il corpo della vista materializzata query_expression può fare riferimento a entità senza specificare il progetto; il progetto predefinito è il progetto proprietario della vista materializzata. Esamina la query di esempio riportata di seguito.

CREATE MATERIALIZED VIEW myProject.myDataset.myView AS SELECT * FROM anotherDataset.myTable;

Dopo aver eseguito la query CREATE MATERIALIZED VIEW sopra indicata nel progetto myProject, puoi eseguire la query SELECT * FROM myProject.myDataset.myView. Indipendentemente dal progetto scelto per eseguire questa query SELECT, la tabella di riferimento anotherDataset.myTable viene sempre risolta in base al progetto myProject.

Se la vista materializzata non viene creata nello stesso progetto utilizzato per eseguire l'istruzione CREATE VIEW, tutti i riferimenti nel corpo della vista materializzata query_expression devono essere qualificati con gli ID progetto. Ad esempio, la query CREATE MATERIALIZED VIEW di esempio precedente non è valida se viene eseguita in un progetto diverso da myProject.

materialized_view_option_list

L'elenco delle opzioni consente di impostare le opzioni di visualizzazione materializzate, ad esempio se l'aggiornamento è attivato. L'intervallo di aggiornamento, un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni di vista materializzata nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
enable_refresh BOOLEAN

Esempio: enable_refresh=false

refresh_interval_minutes FLOAT64

Esempio: refresh_interval_minutes=20

expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

friendly_name

STRING

Esempio: friendly_name="my_mv"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui crei la vista materializzata.

Esempi

Creazione di una nuova vista materializzata

L'esempio seguente crea una vista materializzata denominata new_mv in 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

Se nel set di dati è presente il nome della vista materializzata, viene restituito il seguente errore:

Already Exists: project_id:dataset.materialized_view

Quando utilizzi un'istruzione DDL per creare una vista materializzata, devi specificare il progetto, il set di dati e la vista materializzata nel seguente formato: `project_id.dataset.materialized_view` (compresi gli apici se project_id contiene caratteri speciali); ad esempio, `myproject.mydataset.new_mv`.

La vista materializzata viene definita utilizzando la seguente query SQL standard:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

L'elenco delle opzioni di visualizzazione materializzata specifica:

  • Data di scadenza: 48 ore dal momento in cui viene creata la vista materializzata.
  • Nome semplice: new_mv
  • Descrizione: A materialized view that expires in 2 days
  • Etichetta: org_unit = development
  • Aggiornamento abilitato:true
  • Intervallo di aggiornamento: 20 minuti

La creazione di una vista materializzata solo se la vista materializzata non esiste

L'esempio seguente crea una vista materializzata denominata new_mv in mydataset solo se non esiste alcuna vista materializzata denominata new_mv in mydataset. Se il nome della vista materializzata esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

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 materializzata viene definita utilizzando la seguente query SQL standard:

SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

L'elenco delle opzioni di visualizzazione materializzata specifica:

  • Data di scadenza: 48 ore dal momento in cui viene creata la visualizzazione.
  • Nome semplice: new_mv
  • Descrizione: A view that expires in 2 days
  • Etichetta: org_unit = development
  • Aggiornamento abilitato: false

Creazione di una vista materializzata con partizionamento e clustering

L'esempio seguente crea una vista materializzata denominata new_mv in mydataset, partizionata in base alla colonna col_datetime e raggruppata in base alla colonna 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 tabella di base, mv_base_table, deve inoltre essere partizionata dalla colonna col_datetime. Per ulteriori informazioni, consulta Utilizzo delle tabelle partizionate e in cluster.

Istruzione CREATE EXTERNAL TABLE

Crea una nuova tabella esterna.

Le tabelle esterne consentono a BigQuery di eseguire query sui dati archiviati al di fuori dell'archiviazione BigQuery. Per ulteriori informazioni sulle tabelle esterne, consulta Introduzione alle origini dati esterne.

Syntax

CREATE [ OR REPLACE ] EXTERNAL TABLE [ IF NOT EXISTS ] table_name
[(
  column_name column_schema,
  ...
)]
[WITH CONNECTION connection_name]
[WITH PARTITION COLUMNS
  [(
      partition_column_name partition_column_type,
      ...
  )]
]
OPTIONS (
  external_table_option_list,
  ...
);

Argomenti

  • OR REPLACE: sostituisce qualsiasi tabella esterna con lo stesso nome, se esistente. Non può essere visualizzato con IF NOT EXISTS.

  • IF NOT EXISTS: se esiste una tabella esterna o un'altra risorsa per la tabella con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Impossibile visualizzare con OR REPLACE.

  • table_name: il nome della tabella esterna. Consulta la sintassi del percorso della tabella.

  • column_name: il nome di una colonna della tabella.

  • column_schema: specifica lo schema della colonna. Utilizza la stessa sintassi della definizione column_schema nell'istruzione CREATE TABLE. Se non includi questa clausola, BigQuery rileva automaticamente lo schema.

  • connection_name: specifica una risorsa di connessione con le credenziali per accedere ai dati esterni. Specifica il nome della connessione nel formato PROJECT_ID.LOCATION.CONNECTION_ID. Se l'ID o la località del progetto contiene un trattino, racchiudi il nome della connessione tra parentesi (`).

  • partition_column_name: il nome di una colonna di partizione. Includi questo campo se i dati esterni utilizzano un layout partizionato in Hive. Per scoprire di più, consulta l'articolo Layout dei dati supportati.

  • partition_column_type: il tipo di colonna della partizione.

  • external_table_option_list: un elenco di opzioni per la creazione della tabella esterna.

Dettagli

L'istruzione CREATE EXTERNAL TABLE non supporta la creazione di tabelle esterne temporanee.

Per creare una tabella partizionata esternamente, utilizza la clausola WITH PARTITION COLUMNS per specificare i dettagli dello schema di partizione. BigQuery convalida le definizioni delle colonne in base alla località dei dati esterni. La dichiarazione dello schema deve seguire rigorosamente l'ordine dei campi nel percorso esterno. Per ulteriori informazioni sul partizionamento esterno, consulta l'argomento Eseguire query su dati partizionati esternamente.

external_table_option_list

L'elenco di opzioni specifica le opzioni per la creazione della tabella esterna. Le opzioni format e uris sono obbligatorie. Specifica l'elenco di opzioni nel seguente formato: NAME=VALUE, ...

Opzioni
allow_jagged_rows

BOOL

Se true, consenti le righe che non hanno le colonne finali facoltative.

Si applica ai dati CSV.

allow_quoted_newlines

BOOL

Se true, consenti le sezioni di dati tra virgolette che contengono caratteri di nuova riga nel file.

Si applica ai dati CSV.

compression

STRING

Il tipo di compressione dell'origine dati. I valori supportati includono: GZIP. Se non specificato, l'origine dati non è compressa.

Si applica ai dati CSV e JSON.

enable_logical_types

BOOL

Se true, converti i tipi logici Avro nei tipi SQL corrispondenti. Per maggiori informazioni, consulta Tipi di log.

Si applica ai dati Avro.

encoding

STRING

La codifica dei caratteri dei dati. I valori supportati includono: UTF8 (o UTF-8), ISO_8859_1 (o ISO-8859-1).

Si applica ai dati CSV.

field_delimiter

STRING

Separatore per i campi in un file CSV.

Si applica ai dati CSV.

format

STRING

Il formato dei dati esterni. I valori supportati includono: AVRO, CSV, DATASTORE_BACKUP, GOOGLE_SHEETS, NEWLINE_DELIMITED_JSON (o JSON), ORC, PARQUET.

Il valore JSON equivale a NEWLINE_DELIMITED_JSON.

decimal_target_types

ARRAY<STRING>

Determina come convertire un tipo di Decimal. Equivalente a ExternalDataConfiguration.decimal_target_types

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

json_extension

STRING

Per i dati JSON, indica un particolare formato di interscambio JSON. Se non specificato, BigQuery legge i dati come record JSON generici.

I valori supportati includono:
GEOJSON. Dati GeoJSON delimitati da nuova riga. Per ulteriori informazioni, consulta la sezione Creazione di una tabella esterna da un file GeoJSON delimitato da nuova riga.

hive_partition_uri_prefix

STRING

Un prefisso comune per tutti gli URI di origine prima dell'inizio della codifica della chiave di partizione. Si applica solo alle tabelle esterne partizionate in hive.

Si applica ai dati Avro, CSV, JSON, Parquet e ORC.

Esempio: "gs://bucket/path".

ignore_unknown_values

BOOL

Se true, ignora i valori aggiuntivi che non sono rappresentati nello schema della tabella, senza restituire un errore.

Si applica ai dati CSV e JSON.

max_bad_records

INT64

Il numero massimo di record non validi da ignorare durante la lettura dei dati.

Applicabile a dati CSV, JSON e Fogli.

null_marker

STRING

La stringa che rappresenta i valori NULL in un file CSV.

Si applica ai dati CSV.

projection_fields

STRING

Un elenco di proprietà dell'entità da caricare.

Si applica ai dati di Datastore.

quote

STRING

La stringa utilizzata per citare le sezioni di dati in un file CSV. Se i dati contengono caratteri di nuova riga tra virgolette, imposta anche la proprietà allow_quoted_newlines su true.

Si applica ai dati CSV.

require_hive_partition_filter

BOOL

Se true, tutte le query in questa tabella richiedono un filtro di partizionamento che può essere utilizzato per eliminare le partizioni durante la lettura dei dati. Si applica solo alle tabelle esterne partizionate in hive.

Si applica ai dati Avro, CSV, JSON, Parquet e ORC.

sheet_range

STRING

Intervallo di un foglio di lavoro di Fogli da cui eseguire la query.

Si applica ai dati di Fogli.

Esempio: “sheet1!A1:B20”,

skip_leading_rows

INT64

Il numero di righe nella parte superiore di un file da saltare durante la lettura dei dati.

Si applica ai dati in formato CSV e Fogli.

uris

ARRAY<STRING>

Un array di URI completi per le località dei dati esterni.

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

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.create Il set di dati in cui crei la tabella esterna.

Esempi

L'esempio seguente crea una tabella esterna da più URI. Il formato dei dati è CSV. In questo esempio viene utilizzato il rilevamento automatico degli schemi.

CREATE EXTERNAL TABLE dataset.CsvTable OPTIONS (
  format = 'CSV',
  uris = ['gs://bucket/path1.csv', 'gs://bucket/path2.csv']
);

L'esempio seguente crea una tabella esterna da un file CSV e specifica in modo esplicito lo schema. Specifica anche il perimetro di campo ('|') e imposta il numero massimo di record non validi consentiti.

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

L'esempio seguente crea una tabella partizionata esternamente. Utilizza il rilevamento automatico degli schemi per rilevare sia lo schema dei file sia il layout di partizionamento hive.

Ad esempio, se il percorso esterno è gs://bucket/path/field_1=first/field_2=1/data.csv, le colonne della partizione sarebbero field_1 (STRING) e 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'
);

L'esempio seguente crea una tabella partizionata esternamente specificando le colonne partizione in modo esplicito. Questo esempio presuppone che il percorso file esterno abbia il pattern 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'
);

Istruzione CREATE FUNCTION

Crea una nuova funzione definita dall'utente (UDF). BigQuery supporta le UDF scritte in SQL o JavaScript.

Syntax

Per creare una UDF SQL, utilizza la seguente sintassi:

CREATE [ OR REPLACE ] [ TEMPORARY | TEMP ] FUNCTION [ IF NOT EXISTS ]
    [[project_name.]dataset_name.]function_name
    ([named_parameter[, ...]])
     ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

Per creare un'UDF JavaScript, utilizza la seguente sintassi:

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 }

Per creare una funzione remota, utilizza la seguente sintassi:

CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS]
    [[project_name.]dataset_name.]function_name
    ([named_parameter[, ...]])
  RETURNS data_type
  REMOTE WITH CONNECTION connection_path
  [OPTIONS (function_option_list)]

named_parameter:
  param_name param_type

I nomi delle routine devono contenere solo lettere, numeri e trattini bassi e contenere al massimo 256 caratteri.

Argomenti

  • OR REPLACE: sostituisce qualsiasi funzione con lo stesso nome, se esistente. Impossibile visualizzare con IF NOT EXISTS.

  • IF NOT EXISTS: se esiste un qualsiasi set di dati con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Non può essere visualizzato con OR REPLACE.

  • TEMP o TEMPORARY: crea una funzione temporanea. Se la clausola non è presente, l'istruzione crea un UDF permanente. Puoi riutilizzare gli UDF permanenti in più query, mentre puoi utilizzarli solo in una singola query, script o procedura.

  • project_name. Per le funzioni persistenti, il nome del progetto in cui stai creando la funzione. Il valore predefinito è il progetto che esegue la query DDL. Non includere il nome del progetto per le funzioni temporanee.

  • dataset_name. Per le funzioni permanenti, il nome del set di dati in cui stai creando la funzione. Il valore predefinito è defaultDataset nella richiesta. Non includere il nome del set di dati per le funzioni temporanee.

  • function_name. Il nome della funzione.

  • named_parameter: una coppia param_name e param_type separate da virgole. Il valore di param_type è un tipo di dati BigQuery. Per una UDF SQL, anche il valore param_type può essere ANY TYPE.

  • determinism_specifier: si applica solo alle UDF JavaScript. Offre un suggerimento a BigQuery per determinare se il risultato della query può essere memorizzato nella cache. Può avere uno dei seguenti valori:

    • DETERMINISTIC: la funzione restituisce sempre lo stesso risultato quando vengono passati gli stessi argomenti. Il risultato della query è potenzialmente memorizzabile nella cache. Ad esempio, se la funzione add_one(i) restituisce sempre i + 1, la funzione è deterministica.

    • NOT DETERMINISTIC: la funzione non restituisce sempre lo stesso risultato al momento della trasmissione degli stessi argomenti e, pertanto, non può essere memorizzata nella cache. Ad esempio, se il funzionej add_random(i) restituisce i + rand(), la funzione non è deterministica e BigQuery non utilizza risultati memorizzati nella cache.

      Se tutte le funzioni richiamate sono DETERMINISTIC, BigQuery tenta di memorizzare nella cache il risultato, a meno che i risultati non possano essere memorizzati nella cache per altri motivi. Per ulteriori informazioni, consulta la sezione Utilizzare i risultati delle query memorizzati nella cache.

  • data_type: il tipo di dati restituito dalla funzione.

    • Se la funzione è definita in SQL, la clausola RETURNS è facoltativa. Se la clausola RETURNS viene omessa, BigQuery deduce il tipo di risultato della funzione dal corpo della funzione SQL quando una query chiama la funzione.
    • Se la funzione viene definita in JavaScript, la clausola RETURNS è obbligatoria. Per ulteriori informazioni sui valori consentiti per data_type, consulta la sezione Tipi di dati UDF JavaScript supportati.
  • sql_expression: l'espressione SQL che definisce la funzione.

  • function_option_list. Un elenco di opzioni per la creazione della funzione.

  • javascript_code: la definizione di una funzione JavaScript. Il valore è un valore letterale stringa. Se il codice include virgolette e barre rovesciate, deve essere preceduto dal carattere di escape o rappresentato come una stringa non elaborata. Ad esempio, il codice return "\n"; può essere rappresentato come uno dei seguenti:

    • Stringa tra virgolette"return \"\\n\";". Sia le virgolette sia le barre rovesciate devono essere precedute dal carattere di escape.
    • Stringa tra virgolette: """return "\\n";""". Le barre rovesciate devono essere precedute dal carattere di escape, a differenza delle virgolette.
    • Stringa non elaborata: r"""return "\n";""". Non è necessario inserire caratteri di escape.
  • connection_name: specifica una risorsa di connessione con credenziali per l'accesso all'endpoint remoto. Specifica il nome della connessione nel modulo project_name.location.connection_id. Se il nome o la località del progetto contiene un trattino, racchiudi il nome della connessione in backtick (`).

function_option_list

L'elenco di opzioni specifica le opzioni disponibili per la creazione di una UDF. Sono supportate le seguenti opzioni:

NAME VALUE Dettagli
description

STRING

Una descrizione dell'UDF.
library

ARRAY<STRING>

Un array di librerie JavaScript da includere nella definizione della funzione. Si applica solo alle UDF JavaScript. Per maggiori informazioni, consulta la pagina Includere le librerie JavaScript.

Esempio: ["gs://my-bucket/lib1.js", "gs://my-bucket/lib2.js"]

endpoint

STRING

Un endpoint HTTP di Cloud Functions. Si applica solo alle funzioni remote.

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

Per ulteriori informazioni, consulta la sezione Creare una funzione remota.

user_defined_context

ARRAY<STRUCT<STRING,STRING>>

Un elenco di coppie chiave-valore che verranno inviate con ogni richiesta HTTP quando viene richiamata la funzione. Si applica solo alle funzioni remote.

Esempio: [("key1","value1"),("key2", "value2")]

max_batching_rows

INT64

Il numero massimo di righe in ogni richiesta HTTP. Se non è specificato, BigQuery decide quante righe sono incluse in una richiesta HTTP. Si applica solo alle funzioni remote.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.create Il set di dati in cui crei la funzione.

Per creare una funzione remota, sono necessarie autorizzazioni IAM aggiuntive.

Autorizzazione Risorsa
bigquery.connections.delegate La connessione che utilizzi per creare la funzione remota.

Esempi

Creare un'UDF SQL

L'esempio seguente crea un UDF SQL permanente denominato multiplyInputs in un set di dati denominato mydataset.

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
AS (x * y);

Creare un'UDF JavaScript

L'esempio seguente crea un UDF JavaScript temporaneo denominato multiplyInputs e lo chiama dall'interno di un'istruzione SELECT.

CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS r"""
  return x*y;
""";

SELECT multiplyInputs(a, b) FROM (SELECT 3 as a, 2 as b);

Crea una funzione remota

L'esempio seguente crea una funzione remota permanente denominata remoteMultiplyInputs in un set di dati denominato mydataset, supponendo che mydataset si trovi nella località US e che ci sia una connessione myconnection nella stessa località e nello stesso progetto.

CREATE FUNCTION mydataset.remoteMultiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
REMOTE WITH CONNECTION us.myconnection
OPTIONS(endpoint="https://us-central1-myproject.cloudfunctions.net/multiply");

Istruzione CREATE TABLE FUNCTION

Crea una nuova funzione di tabella, chiamata anche funzione con valore di tabella (TVF).

Syntax

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

Argomenti

  • OR REPLACE: sostituisce qualsiasi funzione di tabella con lo stesso nome, se esistente. Non può essere visualizzato con IF NOT EXISTS.
  • IF NOT EXISTS: se una funzione di tabella esiste con lo stesso nome, l'istruzione CREATE non ha effetto. Non può essere visualizzato con OR REPLACE.
  • project_name: il nome del progetto in cui stai creando la funzione. Il valore predefinito è il progetto che esegue l'istruzione DDL.
  • dataset_name: il nome del set di dati in cui stai creando la funzione.
  • function_name: il nome della funzione da creare.
  • function_parameter: un parametro per la funzione, specificato come nome parametro e tipo di dati. Il valore di data_type è un tipo di dati BigQuery scalato o ANY TYPE.
  • RETURNS TABLE: lo schema della tabella restituita dalla funzione, specificato come elenco separato da virgole di coppie di nomi di colonna e tipo di dati. Se RETURNS TABLE non è presente, BigQuery deduce lo schema di output dall'istruzione di query nel corpo della funzione. Se RETURNS TABLE è incluso, i nomi nel tipo di tabella restituito devono corrispondere ai nomi di colonna della query SQL.
  • sql_query: specifica la query SQL da eseguire. La query SQL deve includere i nomi di tutte le colonne.

Dettagli

Se possibile, BigQuery costringe i tipi di argomenti. Ad esempio, se il tipo di parametro è FLOAT64 e passi un valore INT64, BigQuery lo converte in un FLOAT64.

Se il tipo di parametro è ANY TYPE, la funzione accetta un input di qualsiasi tipo per questo argomento. Il tipo che trasmetti alla funzione deve essere compatibile con la definizione della funzione. Se trasmetti un argomento di tipo incompatibile, la query restituisce un errore. Se più parametri sono di tipo ANY TYPE, BigQuery non applica alcuna relazione di tipo tra questi.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.create Il set di dati in cui crei la funzione di tabella.

Esempi

La seguente funzione tabella utilizza un parametro INT64 utilizzato per filtrare i risultati di una query:

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

L'esempio seguente specifica il tipo TABLE restituito nella clausola 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

Istruzione CREATE PROCEDURE

Crea una nuova procedura, che è un blocco di istruzioni che possono essere richiamate da altre query. Le procedure possono chiamarsi in modo ricorsivo.

Syntax

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

procedure_argument: [procedure_argument_mode] argument_name argument_type

procedure_argument_mode: IN | OUT | INOUT

Argomenti

  • OR REPLACE: sostituisce qualsiasi procedura con lo stesso nome, se esistente. Impossibile visualizzare con IF NOT EXISTS.

  • IF NOT EXISTS: se esiste una procedura con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Non può essere visualizzato con OR REPLACE.

  • project_name**: il nome del progetto in cui stai creando la procedura. Il valore predefinito è il progetto che esegue questa query DDL. Se il nome del progetto contiene caratteri speciali, come i due punti, deve essere racchiuso tra virgolette ` (esempio: `google.com:my_project`).

  • dataset_name: il nome del set di dati in cui stai creando la procedura. Il valore predefinito è defaultDataset nella richiesta.

  • procedure_name: il nome della procedura da creare.

  • multi_statement_query: la query con più istruzioni da eseguire.

  • argument_type: qualsiasi tipo di BigQuery valido.

  • procedure_argument_mode: specifica se un argomento è un input, un output o entrambi.

procedure_option_list

L'procedure_option_list consente di specificare le opzioni della procedura. Le opzioni della procedura hanno la stessa sintassi e gli stessi requisiti delle opzioni tabella, ma con un elenco diverso di NAME e VALUE:

NAME VALUE Dettagli
strict_mode

BOOL

Esempio: strict_mode=FALSE

Se strict_mode è TRUE, il corpo della procedura verrà sottoposto a ulteriori controlli per rilevare l'eventuale presenza di errori, come tabelle o colonne non esistenti. L'istruzione CREATE PROCEDURE non riuscirà se il corpo non supera uno di questi controlli.

strict_mode è utile per rilevare molti tipi comuni di errori, ma non è esaustivo e la creazione di una procedura con strict_mode non garantisce che la procedura verrà eseguita in tempo di esecuzione.

Se strict_mode è FALSE, il corpo della procedura viene controllato solo per sintassi. Le procedure che si richiamano in modo ricorsivo devono essere create con strict_mode=FALSE per evitare errori causati dalla procedura non ancora esistente durante la convalida.

Il valore predefinito è TRUE.

Modalità Argomento

IN indica che l'argomento è solo un input della procedura. Puoi specificare una variabile o un'espressione di valore per gli argomenti IN.

OUT indica che l'argomento è un output della procedura. Un argomento OUT viene inizializzato su NULL all'avvio della procedura. Devi specificare una variabile per gli argomenti OUT.

INOUT indica che l'argomento è un input da e un output della procedura. Devi specificare una variabile per gli argomenti INOUT. È possibile fare riferimento a un argomento INOUT nel corpo di una procedura come variabile e assegnare nuovi valori.

Se non vengono specificati IN, OUT o INOUT, l'argomento viene considerato come argomento IN.

Ambito della variabile

Se una variabile viene dichiarata al di fuori di una procedura, trasmessa come argomento INOUT o OUT a una procedura e la procedura assegna un nuovo valore a tale variabile, tale nuovo valore sarà visibile al di fuori della procedura.

Le variabili dichiarate in una procedura non sono visibili al di fuori della procedura e viceversa.

È possibile assegnare un valore OUT o INOUT all'argomento SET, nel qual caso il valore modificato è visibile al di fuori della procedura. Se la procedura termina corretta, il valore dell'argomento OUT o INOUT è il valore finale assegnato alla variabile INOUT.

Esistono tabelle temporanee per tutta la durata dello script, quindi se una procedura crea una tabella temporanea, il chiamante potrà fare riferimento anche alla tabella temporanea.

Progetto predefinito nel corpo della procedura

Gli enti delle procedure possono fare riferimento alle entità senza specificare il progetto; il progetto predefinito è il progetto proprietario della procedura, non necessariamente il progetto utilizzato per eseguire l'istruzione CREATE PROCEDURE. Considera la query di esempio di seguito.

CREATE PROCEDURE myProject.myDataset.QueryTable()
BEGIN
  SELECT * FROM anotherDataset.myTable;
END;

Dopo aver creato la procedura descritta sopra, puoi eseguire la query CALL myProject.myDataset.QueryTable(). Indipendentemente dal progetto scelto per eseguire questa query CALL, la tabella di riferimento anotherDataset.myTable viene sempre risolta in base al progetto myProject.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.create Il set di dati in cui viene creata la procedura.

Esempi

L'esempio seguente crea una procedura che prende entrambi x come argomento di input e restituisce x come output; poiché per l'argomento delta non è presente alcuna modalità dell'argomento, si tratta di un argomento di input. La procedura consiste in un blocco contenente una singola istruzione, che assegna la somma dei due argomenti di input a x.

CREATE PROCEDURE mydataset.AddDelta(INOUT x INT64, delta INT64)
BEGIN
  SET x = x + delta;
END;

L'esempio seguente chiama la procedura AddDelta dall'esempio precedente, passando la variabile accumulator entrambe le volte; poiché le modifiche a x all'interno di AddDelta sono visibili all'esterno di AddDelta, queste chiamate incrementano il accumulator di un totale di 8.

DECLARE accumulator INT64 DEFAULT 0;
CALL mydataset.AddDelta(accumulator, 5);
CALL mydataset.AddDelta(accumulator, 3);
SELECT accumulator;

Restituisce quanto segue:

+-------------+
| accumulator |
+-------------+
|           8 |
+-------------+

L'esempio seguente crea la procedura SelectFromTablesAndAppend, che utilizza target_date come argomento di input e restituisce rows_added come output. La procedura crea una tabella temporanea DataForTargetDate da una query, quindi calcola il numero di righe in DataForTargetDate e assegna il risultato a rows_added. Poi inserisce una nuova riga in TargetTable, trasmettendo il valore di target_date come uno dei nomi di colonna. Infine, rilascia la tabella DataForTargetDate e restituisce 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;

L'esempio seguente dichiara una variabile rows_added, quindi la trasmette come argomento alla procedura SelectFromTablesAndAppend dell'esempio precedente, insieme al valore CURRENT_DATE; quindi restituisce un messaggio in cui viene indicato il numero di righe aggiunte.

DECLARE rows_added INT64;
CALL mydataset.SelectFromTablesAndAppend(CURRENT_DATE(), rows_added);
SELECT FORMAT('Added %d rows', rows_added);

Istruzione CREATE ROW ACCESS POLICY

Crea o sostituisce un criterio di accesso a livello di riga. I criteri di accesso a livello di riga su una tabella devono avere nomi univoci.

Syntax

CREATE [ OR REPLACE ] ROW ACCESS POLICY [ IF NOT EXISTS ]
row_access_policy_name ON table_name
[GRANT TO (grantee_list)]
FILTER USING (filter_expression);

Argomenti

  • IF NOT EXISTS: se sono presenti criteri di accesso a livello di riga con lo stesso nome, l'istruzione CREATE non ha alcun effetto. Non può essere visualizzato con OR REPLACE.

  • row_access_policy_name: nome del criterio di accesso a livello di riga che stai creando. Il nome del criterio di accesso a livello di riga deve essere univoco per ogni tabella. Il nome del criterio di accesso a livello di riga può contenere quanto segue:

    • Può includere un massimo di 256 caratteri.
    • Lettere (maiuscole o minuscole), numeri e trattini bassi. Deve iniziare con una lettera.
  • table_name: il nome della tabella per cui vuoi creare un criterio di accesso a livello di riga. La tabella deve già esistere.

  • GRANT TO grantee_list: una clausola facoltativa che specifica i membri iniziali con cui devono essere creati i criteri di accesso a livello di riga.

    grantee_list è un elenco di iam_member utenti o gruppi. Le stringhe devono essere entità IAM o membri valide, rispettando il formato di un membro del vincolo di criterio , e devono essere tra virgolette. Sono supportati i seguenti tipi:

    grantee_list tipi
    user:{emailid}

    Un indirizzo email che rappresenta un Account Google specifico.

    Esempio: user:alice@example.com

    serviceAccount:{emailid}

    Un indirizzo email che rappresenta un account di servizio.

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

    group:{emailid}

    Un indirizzo email che rappresenta un gruppo Google.

    Esempio: group:admins@example.com

    domain:{domain}

    Il dominio Google Workspace (principale) che rappresenta tutti gli utenti di quel dominio.

    Esempio: domain:example.com

    allAuthenticatedUsers Un identificatore speciale che rappresenta tutti gli account di servizio e tutti gli utenti su Internet che hanno eseguito l'autenticazione con un Account Google. Questo identificatore include account che non sono collegati a un dominio Google Workspace o Cloud Identity, come gli account Gmail personali. Gli utenti non autenticati, come i visitatori anonimi, non sono inclusi.
    allUsers Un identificatore speciale che rappresenta chiunque si trovi su Internet, inclusi gli utenti autenticati e non autenticati. Poiché BigQuery richiede l'autenticazione prima che un utente possa accedere al servizio, allUsers include solo gli utenti autenticati.

    Puoi combinare una serie di valori iam_member, se sono separati da virgole e vengono racchiusi tra virgolette. Ad esempio: "user:alice@example.com","group:admins@example.com","user:sales@example.com"

  • filter_expression: definisce il sottoinsieme di righe della tabella da mostrare solo ai membri di grantee_list. La filter_expression è simile alla clausola WHERE in una query SELECT.

    Le seguenti espressioni di filtro sono valide:

    • Funzioni scalari SQL standard, funzioni aggregate e funzioni analitiche.
    • SESSION_USER(), per limitare l'accesso solo alle righe che appartengono all'utente che esegue la query. Se all'utente che ha eseguito le query non è applicabile alcun criterio di accesso a livello di riga, l'utente non ha accesso ai dati nella tabella.
    • TRUE. Concede le entità nel campo grantee_list l'accesso a tutte le righe della tabella.

    L'espressione di filtro non può contenere quanto segue:

    • Un riferimento a una tabella.
    • Sottoquery o istruzioni SQL come SELECT, CREATE o UPDATE.
    • Funzioni definite dall'utente.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.rowAccessPolicies.create Tabella di destinazione.
bigquery.rowAccessPolicies.setIamPolicy Tabella di destinazione.
bigquery.tables.getData Tabella di destinazione.

Esempi

Istruzione CREATE CAPACITY

Acquista slot creando un nuovo impegno per la capacità.

Syntax

CREATE CAPACITY
project_id.location_id.commitment_id
AS JSON
capacity_json_object

Argomenti

  • project_id: l'ID del progetto di amministrazione che manterrà la proprietà di questo impegno.
  • location_idLa località del progetto.
  • commitment_id: l'ID dell'impegno. Il valore deve essere univoco per il progetto e la località. Deve iniziare e terminare con una lettera minuscola o un numero e contenere solo lettere minuscole, numeri e trattini.
  • capacity_json_object: una stringa JSON che descrive l'impegno di capacità.

capacity_json_object

Specifica un oggetto JSON contenente i seguenti campi:

NAME TYPE Dettagli
plan Stringa Il piano di acquisto per l'acquisto. I valori supportati includono: FLEX, MONTHLY, ANNUAL. Per ulteriori informazioni, consulta Piani di impegno.
renewal_plan Stringa Il piano di rinnovo dell'impegno. Si applica solo quando plan è ANNUAL. Per ulteriori informazioni, consulta Rinnovo degli impegni.
slot_count Numero intero Il numero di slot nell'impegno.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.capacityCommitments.create Il progetto di amministrazione che mantiene la proprietà degli impegni.

Esempio

L'esempio seguente crea un impegno di capacità di 100 slot flessibili che si trovano nell'area geografica region-us e sono gestiti da un progetto admin_project:

CREATE CAPACITY `admin_project.region-us.my-commitment`
AS JSON """{
 "slot_count": 100,
 "plan": "FLEX"
}"""

Istruzione CREATE RESERVATION

Crea una prenotazione. Per ulteriori informazioni, consulta Introduzione alle prenotazioni.

Syntax

CREATE RESERVATION
project_id.location_id.reservation_id
AS JSON
reservation_json_object

Argomenti

  • project_id: l'ID del progetto di amministrazione in cui è stato creato l'impegno di capacità.
  • location_id: la località del progetto.
  • reservation_id: l'ID prenotazione.
  • reservation_json_object: una stringa JSON che descrive la prenotazione.

reservation_json_object

Specifica un oggetto JSON contenente i seguenti campi:

NAME TYPE Dettagli
ignore_idle_slots Booleano Se il valore è true, la prenotazione utilizza solo le aree di cui viene eseguito il provisioning. Il valore predefinito è false. Per ulteriori informazioni, consulta Slot non attivi.
slot_capacity Numero intero Il numero di slot da assegnare alla prenotazione.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.reservations.create Il progetto di amministrazione che mantiene la proprietà degli impegni.

Esempio

L'esempio seguente crea una prenotazione di 100 slot nel progetto admin_project:

CREATE RESERVATION `admin_project.region-us.prod`
AS JSON """{
 "slot_capacity": 100
}"""

Istruzione CREATE ASSIGNMENT

Assegna un progetto, una cartella o un'organizzazione a una prenotazione.

Syntax

CREATE ASSIGNMENT
project_id.location_id.reservation_id.assignment_id
AS JSON
assignment_json_object

Argomenti

  • project_idL'ID del progetto di amministrazione in cui è stata creata la prenotazione.
  • location_id: la località del progetto.
  • reservation_id: l'ID prenotazione.
  • assignment_id: l'ID del compito. Il valore deve essere univoco per il progetto e la località. Deve iniziare e terminare con una lettera minuscola o un numero e contenere solo lettere minuscole, numeri e trattini.
  • assignment_json_object: una stringa JSON che descrive l'assegnazione.

Per rimuovere un progetto da qualsiasi prenotazione e utilizzare la fatturazione on demand, imposta reservation_id su none.

assignment_json_object

Specifica un oggetto JSON contenente i seguenti campi:

NAME TYPE Dettagli
assignee Stringa L'ID del progetto, della cartella o dell'organizzazione da assegnare alla prenotazione.
job_type Stringa Il tipo di job da assegnare a questa prenotazione. I valori supportati includono QUERY, PIPELINE e ML_EXTERNAL. Per ulteriori informazioni, consulta Assegnazioni.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.reservationAssignments.create Il progetto di amministrazione e l'assegnatario.

Esempio

L'esempio seguente assegna il progetto my_project alla prenotazione di prod per i job di query:

CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
 "assignee": "projects/my_project",
 "job_type": "QUERY"
}"""

L'esempio seguente assegna un'organizzazione alla prenotazione di prod per i job di pipeline, ad esempio i job di caricamento ed esportazione:

CREATE ASSIGNMENT `admin_project.region-us.prod.my_assignment`
AS JSON """{
 "assignee": "organizations/1234",
 "job_type": "PIPELINE"
}"""

Istruzione CREATE SEARCH INDEX

Crea un nuovo indice di ricerca su una o più colonne di una tabella.

Un indice di ricerca consente di eseguire query efficienti utilizzando la funzione SEARCH.

Syntax

CREATE SEARCH INDEX [ IF NOT EXISTS ] index_name
ON table_name({ALL COLUMNS | column_name [, ...]})

Argomenti

  • IF NOT EXISTS: se nella tabella è già presente un indice con quel nome, non fare nulla. Se la tabella ha un indice con un nome diverso, restituisci un errore.

  • index_name: il nome dell'indice che stai creando. Poiché l'indice viene sempre creato nello stesso progetto e set di dati della tabella di base, non è necessario specificarlo nel nome.

  • table_name: il nome della tabella. Consulta la sintassi del percorso della tabella.

  • ALL COLUMNS: crea un indice in ogni colonna della tabella che contiene un campo STRING.

  • column_name: il nome di una colonna di primo livello della tabella, che è un STRING o contiene un campo STRING. La colonna deve avere uno dei seguenti tipi:

    • STRING
    • ARRAY<STRING>
    • STRUCT contenente almeno un campo nidificato di tipo STRING o ARRAY<STRING>
    • JSON

Dettagli

Puoi creare un solo indice per tabella di base. Non puoi creare un indice in una vista materializzata. Per modificare le colonne indicizzate, DROP utilizza l'indice corrente e creane una nuova.

BigQuery restituisce un errore se l'elemento column_name non è un STRING o non contiene un campo STRING o se chiami CREATE SEARCH INDEX su ALL COLUMNS di una tabella che non contiene campi STRING.

La creazione di un indice non riesce in una tabella che contiene elenchi di controllo di accesso (ACL) o filtri di riga. Tuttavia, questi possono essere aggiunti tutti alla tabella dopo la creazione dell'indice.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.createIndex La tabella di base in cui viene creato l'indice.

Esempi

L'esempio seguente crea un indice chiamato my_index su tutte le colonne di stringa di my_table. In questo caso, l'indice viene creato solo nella colonna a.

CREATE TABLE dataset.my_table(a STRING, b INT64);

CREATE SEARCH INDEX my_index
ON dataset.my_table(ALL COLUMNS);

L'esempio seguente crea un indice nelle colonne a, my_struct.string_field e b.

CREATE TABLE dataset.complex_table(
  a STRING,
  my_struct STRUCT<string_field STRING, int_field INT64>,
  b ARRAY<STRING>
);

CREATE SEARCH INDEX my_index
ON dataset.complex_table(a, my_struct, b);

Istruzione ALTER SCHEMA SET DEFAULT COLLATE

Imposta le specifiche di fascicolo su un set di dati.

Syntax

ALTER SCHEMA [IF EXISTS]
[project_name.]dataset_name
SET DEFAULT COLLATE collate_specification

Argomenti

  • IF EXISTS: se non esiste alcun set di dati con questo nome, l'istruzione non ha effetto.

  • DEFAULT COLLATE collate_specification: quando nello schema viene creata una nuova tabella, la tabella eredita una specifica di confronto predefinita, a meno che non sia stata specificata in modo esplicito una specifica di confronto per una colonna.

    La specifica di confronto aggiornata si applica solo alle tabelle create in seguito. Se vuoi aggiornare una specifica di confronto esistente, devi modificare la colonna che la contiene.

  • project_name: il nome del progetto contenente il set di dati. Il valore predefinito è il progetto che esegue l'istruzione DDL.

  • dataset_name: il nome del set di dati.

  • collate_specification: specifica le specifiche di confronto da impostare.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.datasets.get Il set di dati da modificare.
bigquery.datasets.update Il set di dati da modificare.

Esempio

Supponiamo di avere una tabella esistente, mytable_a, in uno schema chiamato mydataset. Ad esempio:

CREATE SCHEMA mydataset
CREATE TABLE mydataset.mytable_a
(
  number INT64,
  word STRING
)
+----------------------+
| mydataset.mytable_a  |
|   number INT64       |
|   word STRING        |
+----------------------+

In un secondo momento decidi di aggiungere una specifica di confronto allo schema. Ad esempio:

ALTER SCHEMA mydataset
SET DEFAULT COLLATE 'und:ci'

Se crei una nuova tabella per lo schema, eredita COLLATE 'und:ci' per tutte le colonne STRING. Ad esempio, le regole di confronto vengono aggiunte a characters quando crei la tabella mytable_b nello schema mydataset:

CREATE TABLE mydataset.mytable_b
(
  amount INT64,
  characters STRING
)
+--------------------------------------+
| mydataset.mytable_b                  |
|   amount INT64                       |
|   characters STRING COLLATE 'und:ci' |
+--------------------------------------+

Tuttavia, anche se hai aggiornato la specifica di confronto per lo schema, la tua tabella esistente mytable_a continua a utilizzare la specifica di confronto precedente. Ad esempio:

+---------------------+
| mydataset.mytable_a |
|   number INT64      |
|   word STRING       |
+---------------------+

Se vuoi aggiornare la specifica di confronto per la colonna word in mytable_a, devi modificare direttamente la colonna. Ad esempio:

ALTER TABLE mydataset.mytable_a
ALTER COLUMN word SET DATA TYPE STRING COLLATE 'und:ci';
+--------------------------------+
| mydataset.mytable_a            |
|   number INT64                 |
|   word STRING COLLATE 'und:ci' |
+--------------------------------+

Istruzione ALTER SCHEMA SET OPTIONS

Imposta le opzioni su un set di dati.

L'istruzione viene eseguita nella posizione del set di dati, se non è specificata, nelle impostazioni della query. Per ulteriori informazioni, consulta la sezione Specificare la località.

Syntax

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

Argomenti

  • IF EXISTS: se non esiste alcun set di dati con questo nome, l'istruzione non ha effetto.

  • project_name: il nome del progetto contenente il set di dati. Il valore predefinito è il progetto che esegue l'istruzione DDL.

  • dataset_name: il nome del set di dati.

  • schema_set_options_list: l'elenco di opzioni da impostare.

schema_set_options_list

L'elenco di opzioni specifica le opzioni per il set di dati. Specifica le opzioni nel seguente formato: NAME=VALUE, ...

Sono supportate le seguenti opzioni:

NAME VALUE Dettagli
default_kms_key_name STRING Specifica la chiave Cloud KMS predefinita per la crittografia dei dati della tabella in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
default_partition_expiration_days FLOAT64 Specifica la scadenza predefinita, in giorni, delle partizioni della tabella in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
default_table_expiration_days FLOAT64 Specifica la scadenza predefinita, in giorni, delle tabelle in questo set di dati. Puoi sostituire questo valore quando crei una tabella.
description STRING La descrizione del set di dati.
friendly_name STRING Un nome descrittivo per il set di dati.
labels <ARRAY<STRUCT<STRING, STRING>>> Un array delle etichette per il set di dati, espresso come coppie chiave-valore.
location STRING La posizione in cui creare il set di dati. Se non specifichi questa opzione, il set di dati viene creato nella località in cui viene eseguita la query. Se specifichi questa opzione e imposti anche esplicitamente la località del job di query, i due valori dovranno corrispondere, altrimenti la query avrà esito negativo.
max_time_travel_hours SMALLINT

In anteprima.

Specifica la durata in ore della finestra di tempo per il set di dati. Il valore max_time_travel_hours deve essere un numero intero compreso tra 48 (2 giorni) e 168 (7 giorni). Se questa opzione non è specificata, 168 ore è l'opzione predefinita.

Per ulteriori informazioni sulla finestra temporale, consulta Configurazione della finestra temporale.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.datasets.get Il set di dati da modificare.
bigquery.datasets.update Il set di dati da modificare.

Esempio

L'esempio seguente imposta la scadenza predefinita della tabella.

ALTER SCHEMA mydataset
SET OPTIONS(
  default_table_expiration_days=3.75
  )

Istruzione ALTER TABLE SET OPTIONS

Consente di impostare le opzioni in una tabella.

Syntax

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

Argomenti

Dettagli

Questa istruzione non è supportata per le tabelle esterne.

table_set_options_list

L'elenco delle opzioni consente di impostare le opzioni della tabella, ad esempio un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni per la tabella nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

partition_expiration_days

FLOAT64

Esempio: partition_expiration_days=7

Imposta la scadenza della partizione in giorni. Per maggiori informazioni, consulta Imposta la scadenza della partizione. Per impostazione predefinita, le partizioni non scadono.

Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.expirationMs, ma utilizza i giorni anziché i millisecondi. Un giorno equivale a 86400000 millisecondi, ovvero 24 ore.

Questa proprietà può essere impostata solo se la tabella è partizionata.

require_partition_filter

BOOL

Esempio: require_partition_filter=true

Specifica se le query in questa tabella devono includere un filtro del predicato che filtra la colonna di partizionamento. Per maggiori informazioni, consulta la sezione Imposta i requisiti del filtro di partizionamento. Il valore predefinito è false.

Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.requirePartitionFilter.

Questa proprietà può essere impostata solo se la tabella è partizionata.

kms_key_name

STRING

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

Questa proprietà equivale alla proprietà della risorsa di tabella encryptionConfiguration.kmsKeyName.

Leggi ulteriori dettagli sulla protezione dei dati con le chiavi Cloud KMS.

friendly_name

STRING

Esempio: friendly_name="my_table"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

VALUE è un'espressione costante contenente solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

L'impostazione di VALUE sostituisce il valore esistente dell'opzione per la tabella, se ne esisteva una. Se imposti VALUE su NULL, il valore della tabella viene cancellato.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

Impostazione del timestamp e della descrizione della scadenza in una tabella

L'esempio seguente imposta il timestamp di scadenza in una tabella su sette giorni dal momento dell'esecuzione dell'istruzione ALTER TABLE e imposta anche la descrizione:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="Table that expires seven days from now"
)

Impostazione dell'attributo richiesta di filtro di partizionamento in una tabella partizionata

L'esempio seguente imposta l'attributo timePartitioning.requirePartitionFilter in una tabella partizionata:

ALTER TABLE mydataset.mypartitionedtable
SET OPTIONS (require_partition_filter=true)

Le query che fanno riferimento a questa tabella devono utilizzare un filtro nella colonna di partizionamento, altrimenti BigQuery restituisce un errore. L'impostazione di questa opzione su true può aiutare a evitare errori nel eseguire query su più dati del previsto.

Cancellazione del timestamp di scadenza in una tabella

L'esempio seguente cancella il timestamp di scadenza in una tabella in modo che non scada:

ALTER TABLE mydataset.mytable
SET OPTIONS (expiration_timestamp=NULL)

Istruzione ALTER TABLE ADD COLUMN

Aggiunge una o più nuove colonne a uno schema di tabella esistente.

Syntax

ALTER TABLE table_name
ADD COLUMN [IF NOT EXISTS] column[, ...]

Argomenti

  • table_name: il nome della tabella. Consulta la sintassi del percorso della tabella.

  • IF EXISTS: se il nome della colonna esiste già, l'istruzione non ha effetto.

  • column: la colonna da aggiungere. che includono il nome della colonna e lo schema da aggiungere. Questo nome di colonna e schema utilizzano la stessa sintassi utilizzata nell'istruzione CREATE TABLE.

Dettagli

Non puoi utilizzare questa istruzione per creare:

  • Colonne partizionate.
  • Colonne in cluster.
  • Colonne nidificate all'interno di campi RECORD esistenti.

Non puoi aggiungere una colonna REQUIRED a uno schema di tabella esistente. Tuttavia, puoi creare una colonna REQUIRED nidificata come parte di un nuovo campo RECORD.

Questa istruzione non è supportata per le tabelle esterne.

Senza la clausola IF NOT EXISTS, se la tabella contiene già una colonna con tale nome, l'istruzione restituisce un errore. Se la clausola IF NOT EXISTS è inclusa e il nome della colonna esiste già, non vengono restituiti errori e non viene intrapresa alcuna azione.

Il valore della nuova colonna per le righe esistenti viene impostato su uno dei seguenti:

  • NULL se la nuova colonna è stata aggiunta con la modalità NULLABLE. Questa è la modalità predefinita.
  • Un campo ARRAY vuoto se la nuova colonna è stata aggiunta con la modalità REPEATED.

Per ulteriori informazioni sulle modifiche allo schema in BigQuery, consulta la sezione Modificare gli schemi delle tabelle.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

Aggiungere colonne

L'esempio seguente aggiunge le seguenti colonne a una tabella esistente denominata mytable:

  • Colonna A di tipo STRING.
  • Colonna B di tipo GEOGRAPHY.
  • Colonna C di tipo NUMERIC con modalità REPEATED.
  • Colonna D di tipo DATE con una descrizione.
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")

Se una delle colonne denominate A, C o D esiste già, l'istruzione non riuscirà. Se la colonna B esiste già, l'istruzione ha esito positivo a causa della clausola IF NOT EXISTS.

Aggiunta di una colonna RECORD in corso...

L'esempio seguente aggiunge una colonna denominata A di tipo STRUCT contenente le seguenti colonne nidificate:

  • Colonna B di tipo GEOGRAPHY.
  • Colonna C di tipo INT64 con modalità REPEATED.
  • Colonna D di tipo INT64 con modalità REQUIRED.
  • Colonna E di tipo TIMESTAMP con una descrizione.
ALTER TABLE mydataset.mytable
   ADD COLUMN A STRUCT<
       B GEOGRAPHY,
       C ARRAY<INT64>,
       D INT64 NOT NULL,
       E TIMESTAMP OPTIONS(description="creation time")
       >

La query non riesce se la tabella ha già una colonna denominata A, anche se la colonna non contiene alcuna colonna nidificata specificata.

Il nuovo STRUCT denominato A è nullo, ma la colonna nidificata D all'interno di A è obbligatoria per tutti i valori STRUCT di A.

Aggiungere il supporto delle regole di confronto a una colonna

Quando crei una nuova colonna per la tabella, puoi assegnare in modo specifico una nuova specifica di confronto a tale colonna.

ALTER TABLE mydataset.mytable
ADD COLUMN word STRING COLLATE 'und:ci'

Istruzione ALTER TABLE RENAME TO

Rinomina un clone, uno snapshot o una tabella.

Syntax

ALTER TABLE [IF EXISTS] table_name
RENAME TO new_table_name

Argomenti

  • IF EXISTS: se non esiste alcuna tabella con questo nome, l'istruzione non ha effetto.

  • table_name: il nome della tabella da rinominare. Consulta la sintassi del percorso della tabella.

  • new_table_name: il nuovo nome della tabella. Il nuovo nome non può essere un nome di tabella esistente.

Dettagli

  • Questa istruzione non è supportata per le tabelle esterne.
  • Se modifichi i criteri della tabella o i criteri di accesso a livello di riga quando rinomini la tabella, tali modifiche potrebbero non essere efficaci.
  • Se vuoi rinominare una tabella con streaming di dati, devi interrompere il flusso di dati e attendere che BigQuery indichi che lo streaming non è in uso.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

Ridenominazione di una tabella

L'esempio seguente rinomina la tabella mydataset.mytable in mydataset.mynewtable:

ALTER TABLE mydataset.mytable RENAME TO mynewtable

Istruzione ALTER TABLE DROP COLUMN

Elimina una o più colonne da uno schema di tabella esistente.

Syntax

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

Argomenti

  • table_name: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella. La tabella deve già esistere e avere uno schema.

  • IF EXISTS: se la colonna specificata non esiste, l'istruzione non ha effetto.

  • column_name: il nome della colonna da rilasciare.

Dettagli

L'istruzione non libera immediatamente lo spazio di archiviazione associato alla colonna eliminata. L'archiviazione viene rivendicata in background per un periodo di 7 giorni dal giorno in cui viene eliminata una colonna.

Per informazioni su come recuperare automaticamente lo spazio di archiviazione, consulta Eliminare una colonna da uno schema di tabella.

Non puoi utilizzare questa istruzione per rilasciare quanto segue:

  • Colonne partizionate
  • Colonne in cluster
  • Colonne nidificate all'interno di campi RECORD esistenti

Questa istruzione non è supportata per le tabelle esterne.

Senza la clausola IF EXISTS, se la tabella non contiene una colonna con tale nome, l'istruzione restituisce un errore. Se la clausola IF EXISTS è inclusa e il nome della colonna non esiste, non viene restituito alcun errore e non viene intrapresa alcuna azione.

Questa istruzione rimuove solo la colonna dalla tabella. Tutti gli oggetti che fanno riferimento alla colonna, come le viste o le viste materializzate, devono essere aggiornati o ricreati separatamente.

Per ulteriori informazioni sulle modifiche allo schema in BigQuery, consulta la sezione Modificare gli schemi delle tabelle.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

Abbandono delle colonne

Nell'esempio seguente, le seguenti colonne vengono eliminate da una tabella esistente denominata mytable:

  • Colonna A
  • Colonna B
ALTER TABLE mydataset.mytable
  DROP COLUMN A,
  DROP COLUMN IF EXISTS B

Se la colonna A non esiste, l'istruzione non riesce. Se la colonna B non esiste, l'istruzione viene comunque eseguita correttamente a causa della clausola IF EXISTS.

Istruzione ALTER TABLE SET DEFAULT COLLATE

Imposta le specifiche di confronto in una tabella.

Syntax

ALTER TABLE
  table_name
  SET DEFAULT COLLATE collate_specification

Argomenti

  • table_name: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella. La tabella deve già esistere e avere uno schema.

  • SET DEFAULT COLLATE collate_specification: se nello schema viene creata una nuova colonna e questa non ha una specifica di confronto esplicita, questa eredita questa colonna per i tipi STRING. La specifica di confronto aggiornata si applica solo alle colonne aggiunte in seguito.

    Se vuoi aggiornare una specifica di confronto esistente, devi modificare la colonna che la contiene. Se vuoi aggiungere una specifica di confronto su una nuova colonna in una tabella esistente, puoi aggiungerla. Se aggiungi una specifica di confronto direttamente in una colonna, questa avrà la precedenza su quella di una tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempio

Supponiamo di avere una tabella esistente, mytable, in uno schema chiamato mydataset.

CREATE TABLE mydataset.mytable
(
  number INT64,
  word STRING
) DEFAULT COLLATE 'und:ci'

Quando crei mytable, tutte le colonne STRING ereditano COLLATE 'und:ci'. La tabella risultante ha questa struttura:

+--------------------------------+
| mydataset.mytable              |
|   number INT64                 |
|   word STRING COLLATE 'und:ci' |
+--------------------------------+

In un secondo momento decidi di modificare la specifica di confronto per la tua tabella.

ALTER TABLE mydataset.mytable
SET DEFAULT COLLATE ''

Anche se hai aggiornato la specifica di confronto, la colonna esistente word continua a utilizzare la specifica di confronto precedente.

+--------------------------------+
| mydataset.mytable              |
|   number INT64                 |
|   word STRING COLLATE 'und:ci' |
+--------------------------------+

Tuttavia, se crei una nuova colonna per la tabella, la nuova colonna includerà la nuova specifica di confronto. Nel seguente esempio è stata aggiunta una colonna name. Poiché la nuova specifica di confronto è vuota, viene utilizzata la specifica di confronto predefinita.

ALTER TABLE mydataset.mytable
ADD COLUMN name STRING
+--------------------------------+
| mydataset.mytable              |
|   number INT64                 |
|   word STRING COLLATE 'und:ci' |
|   name STRING COLLATE          |
+--------------------------------+

Istruzione ALTER COLUMN SET OPTIONS

Imposta le opzioni, come la descrizione della colonna, su una colonna di una tabella di BigQuery.

Syntax

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

Argomenti

  • (ALTER TABLE) IF EXISTS: se non esiste alcuna tabella con questo nome, l'istruzione non ha alcun effetto.

  • table_name: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella.

  • (ALTER COLUMN) IF EXISTS: se la colonna specificata non esiste, l'istruzione non ha effetto.

  • column_name: il nome della colonna di primo livello che stai modificando. La modifica dei sottocampi, ad esempio le colonne nidificate in un elemento STRUCT, non è supportata.

  • column_set_options_list: l'elenco di opzioni da impostare nella colonna.

Dettagli

Questa istruzione non è supportata per le tabelle esterne.

column_set_options_list

Specifica un elenco di opzioni per le colonne nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
description

STRING

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

VALUE è un'espressione costante contenente solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

L'impostazione di VALUE sostituisce il valore esistente di questa opzione per la colonna, se ne era uno. Se imposti VALUE su NULL, il valore della colonna viene cancellato per quella opzione.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

L'esempio seguente imposta una nuova descrizione su una colonna denominata price:

ALTER TABLE mydataset.mytable
ALTER COLUMN price
SET OPTIONS (
  description="Price per unit"
)

Istruzione ALTER COLUMN DROP NOT NULL

Rimuove un vincolo di NOT NULL da una colonna di una tabella in BigQuery.

Syntax

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

Argomenti

  • (ALTER TABLE) IF EXISTS: se non esiste alcuna tabella con questo nome, l'istruzione non ha alcun effetto.

  • table_name: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella.

  • (ALTER COLUMN) IF EXISTS: se la colonna specificata non esiste, l'istruzione non ha effetto.

  • column_name: il nome della colonna di primo livello che stai modificando. La modifica dei sottocampi non è supportata.

Dettagli

Se una colonna non ha un vincolo NOT NULL, la query restituisce un errore.

Questa istruzione non è supportata per le tabelle esterne.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

L'esempio seguente rimuove il vincolo NOT NULL da una colonna denominata mycolumn:

ALTER TABLE mydataset.mytable
ALTER COLUMN mycolumn
DROP NOT NULL

Istruzione ALTER COLUMN SET DATA TYPE

Modifica il tipo di dati di una colonna di una tabella in BigQuery in un tipo di dati meno restrittivo. Ad esempio, un tipo di dati NUMERIC può essere modificato in un tipo BIGNUMERIC, ma non il contrario.

Syntax

ALTER TABLE [IF EXISTS] table_name
ALTER COLUMN [IF EXISTS] column_name SET DATA TYPE column_schema

Argomenti

  • (ALTER TABLE) IF EXISTS: se non esiste alcuna tabella con questo nome, l'istruzione non ha alcun effetto.

  • table_name: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella.

  • (ALTER COLUMN) IF EXISTS: se la colonna specificata non esiste, l'istruzione non ha effetto.

  • column_name: il nome della colonna di primo livello che stai modificando. La modifica dei sottocampi non è supportata.

  • column_schema: lo schema in cui stai convertendo la colonna. Questo schema utilizza la stessa sintassi utilizzata nell'istruzione CREATE TABLE.

Dettagli

Per una tabella di coercions del tipo di dati validi, confronta la colonna"Da Type"con la colonna"Coercion To"nella pagina Regole di conversione in SQL standard.

Di seguito sono riportati esempi di coercizioni di tipi di dati validi:

  • Da INT64 a NUMERIC, BIGNUMERIC, FLOAT64
  • Da NUMERIC a BIGNUMERIC, FLOAT64

Questa istruzione non è supportata per le tabelle esterne.

Senza la clausola IF EXISTS, se la tabella non contiene una colonna con tale nome, l'istruzione restituisce un errore. Se la clausola IF EXISTS è inclusa e il nome della colonna non esiste, non viene restituito alcun errore e non viene intrapresa alcuna azione.

Puoi anche forzare i tipi di dati da tipi di dati con parametri più restrittivi a meno restrittivi. Ad esempio, puoi aumentare la lunghezza massima di un tipo di stringa oppure aumentare la precisione o la scala di un tipo numerico.

Di seguito sono riportati alcuni esempi di modifiche valide dei tipi di dati con parametri:

  • Da NUMERIC(6,10) a NUMERIC(8,12)
  • Da NUMERIC a BIGNUMERIC(40, 20)
  • STRING(5) a STRING(7)

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La tabella da modificare.
bigquery.tables.update La tabella da modificare.

Esempi

Modificare il tipo di dati per una colonna

L'esempio seguente modifica il tipo di dati della colonna c1 da INT64 a NUMERIC:

CREATE TABLE dataset.table(c1 INT64);

ALTER TABLE dataset.table ALTER COLUMN c1 SET DATA TYPE NUMERIC;

Modificare il tipo di dati per un campo

L'esempio seguente modifica il tipo di dati di uno dei campi della colonna s1:

CREATE TABLE dataset.table(s1 STRUCT<a INT64, b STRING>);

ALTER TABLE dataset.table ALTER COLUMN s1
SET DATA TYPE STRUCT<a NUMERIC, b STRING>;

Modifica della precisione

L'esempio seguente modifica la precisione di una colonna di tipo di dati con parametri:

CREATE TABLE dataset.table (pt NUMERIC(7,2));

ALTER TABLE dataset.table
ALTER COLUMN pt
SET DATA TYPE NUMERIC(8,2);

Modifica del supporto per le collaborazioni

Se vuoi aggiornare la specifica di confronto per la colonna word in una tabella denominata mytable, devi modificarla direttamente.

ALTER TABLE mydataset.mytable
ALTER COLUMN word SET DATA TYPE STRING COLLATE 'und:ci';

Istruzione ALTER VIEW SET OPTIONS

Imposta le opzioni su una vista.

Syntax

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

Argomenti

view_set_options_list

L'elenco di opzioni consente di impostare le opzioni di visualizzazione, ad esempio un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni di visualizzazione nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

friendly_name

STRING

Esempio: friendly_name="my_view"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

VALUE è un'espressione costante contenente solo valori letterali, parametri di ricerca e funzioni scalari.

L'espressione costante non può contenere:

  • Un riferimento a una tabella
  • Sottoquery o istruzioni SQL come SELECT, CREATE e UPDATE
  • Funzioni definite dall'utente, funzioni aggregate o funzioni analitiche
  • Le seguenti funzioni scalari:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

L'impostazione di VALUE sostituisce il valore esistente di tale opzione per la vista, se ne era uno. Se imposti VALUE su NULL, viene cancellato il valore della vista per tale opzione.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La vista da modificare.
bigquery.tables.update La vista da modificare.

Esempi

Impostazione del timestamp e della descrizione della scadenza in una vista

L'esempio seguente imposta il timestamp di scadenza su una vista a sette giorni dalla data di esecuzione dell'istruzione ALTER VIEW e imposta anche la descrizione:

ALTER VIEW mydataset.myview
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="View that expires seven days from now"
)

Istruzione ALTER MATERIALIZED VIEW SET OPTIONS

Imposta le opzioni in una vista materializzata.

Syntax

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

Argomenti

materialized_view_set_options_list

L'elenco delle opzioni consente di impostare le opzioni di visualizzazione materializzate, ad esempio se l'aggiornamento è attivato. L'intervallo di aggiornamento, un'etichetta e una data di scadenza. Puoi includere più opzioni utilizzando un elenco separato da virgole.

Specifica un elenco di opzioni di vista materializzata nel seguente formato:

NAME=VALUE, ...

NAME e VALUE devono essere una delle seguenti combinazioni:

NAME VALUE Dettagli
enable_refresh BOOLEAN

Esempio: enable_refresh=false

refresh_interval_minutes FLOAT64

Esempio: refresh_interval_minutes=20

expiration_timestamp TIMESTAMP

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

Questa proprietà equivale alla proprietà della risorsa tabella expirationTime.

friendly_name

STRING

Esempio: friendly_name="my_mv"

Questa proprietà equivale alla proprietà della risorsa tabella friendName.

description

STRING

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

Questa proprietà equivale alla proprietà della risorsa tabella description.

labels

ARRAY<STRUCT<STRING, STRING>>

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

Questa proprietà equivale alla proprietà delle risorse della tabella labels.

L'impostazione VALUE sostituisce il valore esistente di tale opzione per la vista materializzata, se disponibile. Se imposti VALUE su NULL, viene cancellato il valore della vista materializzata per l'opzione in questione.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.get La vista materializzata da modificare.
bigquery.tables.update La vista materializzata da modificare.

Esempi

Impostazione dello stato di attivazione e di aggiornamento dell'aggiornamento su una vista materializzata

L'esempio seguente consente di aggiornare e impostare l'intervallo di aggiornamento su 20 minuti su una vista materializzata:

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

Istruzione DROP SCHEMA

Elimina un set di dati.

Syntax

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

Argomenti

  • IF EXISTS: se non esiste alcun set di dati con questo nome, l'istruzione non ha effetto.

  • project_name: il nome del progetto contenente il set di dati. Il valore predefinito è il progetto che esegue l'istruzione DDL.

  • dataset_name: il nome del set di dati da eliminare.

  • CASCADE: elimina il set di dati e tutte le risorse al suo interno, come tabelle, viste e funzioni. Devi disporre dell'autorizzazione per eliminare le risorse, altrimenti l'istruzione restituisce un errore. Per un elenco delle autorizzazioni di BigQuery, consulta la sezione Autorizzazioni e ruoli predefiniti.

  • RESTRICT: elimina il set di dati solo se è vuoto. In caso contrario, restituisce un errore. Se non specifichi CASCADE o RESTRICT, il comportamento predefinito è RESTRICT.

Dettagli

L'istruzione viene eseguita nella posizione del set di dati, se esistente, a meno che non specifichi la località nelle impostazioni della query. Per ulteriori informazioni, consulta la sezione Specificare la località.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.datasets.delete Il set di dati da eliminare.
bigquery.tables.delete Il set di dati da eliminare. Se il set di dati è vuoto, non è necessaria questa autorizzazione.

Esempi

L'esempio seguente elimina il set di dati denominato mydataset. Se il set di dati non esiste o non è vuoto, l'istruzione restituisce un errore.

DROP SCHEMA mydataset

L'esempio seguente rimuove il set di dati denominato mydataset e le eventuali risorse in quel set di dati. Se il set di dati non esiste, non viene restituito alcun errore.

DROP SCHEMA IF EXISTS mydataset CASCADE

Istruzione DROP TABLE

Elimina una tabella o un clone di tabella.

Syntax

DROP TABLE [IF EXISTS] table_name

Argomenti

  • IF EXISTS: se non esiste alcuna tabella con questo nome, l'istruzione non ha effetto.

  • table_name: il nome della tabella da eliminare. Consulta la sintassi del percorso della tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.delete Tabella da eliminare.
bigquery.tables.get Tabella da eliminare.

Esempi

Eliminazione di una tabella

L'esempio seguente elimina una tabella denominata mytable in mydataset:

DROP TABLE mydataset.mytable

Se il nome della tabella non esiste nel set di dati, viene restituito il seguente errore:

Error: Not found: Table myproject:mydataset.mytable

Eliminazione di una tabella solo se questa esiste

L'esempio seguente elimina una tabella denominata mytable in mydataset solo se la tabella esiste. Se il nome della tabella non esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

DROP TABLE IF EXISTS mydataset.mytable

Istruzione DROP SNAPSHOT TABLE

Elimina uno istantanea tabella.

Syntax

DROP SNAPSHOT TABLE [IF EXISTS] table_snapshot_name

Argomenti

  • IF EXISTS: se non esiste uno snapshot di tabella con questo nome, l'istruzione non ha effetto.

  • table_snapshot_name: il nome dello snapshot della tabella da eliminare. Consulta la sintassi del percorso della tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.deleteSnapshot Istantanea della tabella da eliminare.

Esempi

Elimina uno snapshot della tabella: errore se non esiste

L'esempio seguente elimina lo snapshot della tabella denominato mytablesnapshot nel set di dati mydataset:

DROP SNAPSHOT TABLE mydataset.mytablesnapshot

Se lo snapshot della tabella non esiste nel set di dati, viene restituito il seguente errore:

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

Elimina lo snapshot di una tabella: ignora se non esiste

L'esempio seguente elimina lo snapshot della tabella denominato mytablesnapshot nel set di dati mydataset.

DROP SNAPSHOT TABLE IF EXISTS mydataset.mytablesnapshot

Se nel set di dati non esiste lo snapshot della tabella, non viene intrapresa alcuna azione e non viene restituito alcun errore.

Per informazioni sulla creazione degli snapshot delle tabelle, consulta CREA TABELLA SNAPSHOT.

Per informazioni sul ripristino degli snapshot delle tabelle, consulta CREA CLONE TABLE.

Istruzione DROP EXTERNAL TABLE

Elimina una tabella esterna.

Syntax

DROP EXTERNAL TABLE [IF EXISTS] table_name

Argomenti

  • IF EXISTS: se non esiste una tabella esterna con questo nome, l'istruzione non ha effetto.

  • table_name: il nome della tabella esterna da eliminare. Consulta la sintassi del percorso della tabella.

Dettagli

Se table_name esiste ma non è una tabella esterna, l'istruzione restituisce il seguente errore:

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

L'istruzione DROP EXTERNAL rimuove solo la definizione della tabella esterna da BigQuery. I dati archiviati nella località esterna non sono interessati.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.delete Tabella esterna da eliminare.
bigquery.tables.get Tabella esterna da eliminare.

Esempi

L'esempio seguente rimuove la tabella esterna denominata external_table dal set di dati mydataset. Restituisce un errore se la tabella esterna non esiste.

DROP EXTERNAL TABLE mydataset.external_table

L'esempio seguente rimuove la tabella esterna denominata external_table dal set di dati mydataset. Se la tabella esterna non esiste, non viene restituito alcun errore.

DROP EXTERNAL TABLE IF EXISTS mydataset.external_table

Istruzione DROP VIEW

Elimina una vista.

Syntax

DROP VIEW [IF EXISTS] view_name

Argomenti

  • IF EXISTS: se non esiste una vista con questo nome, l'istruzione non ha alcun effetto.

  • view_name: il nome della vista da eliminare. Consulta la sintassi del percorso della tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.delete La visualizzazione da eliminare.
bigquery.tables.get La visualizzazione da eliminare.

Esempi

Eliminare una vista

L'esempio seguente elimina una vista denominata myview in mydataset:

DROP VIEW mydataset.myview

Se il nome della vista non esiste nel set di dati, viene restituito il seguente errore:

Error: Not found: Table myproject:mydataset.myview

Eliminare una vista solo se esiste

L'esempio seguente elimina una vista denominata myview in mydataset solo se esiste la vista. Se il nome vista non esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

DROP VIEW IF EXISTS mydataset.myview

Istruzione DROP MATERIALIZED VIEW

Elimina una vista materializzata.

Syntax

DROP MATERIALIZED VIEW [IF EXISTS] mv_name

Argomenti

  • IF EXISTS: se non esiste una vista materializzata con questo nome, l'istruzione non ha effetto.

  • mv_name: il nome della vista materializzata da eliminare. Consulta la sintassi del percorso della tabella.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.delete La vista materializzata da eliminare.
bigquery.tables.get La vista materializzata da eliminare.

Esempi

Eliminare una vista materializzata

L'esempio seguente elimina una vista materializzata denominata my_mv in mydataset:

DROP MATERIALIZED VIEW mydataset.my_mv

Se il nome della vista materializzata non esiste nel set di dati, viene restituito il seguente errore:

Error: Not found: Table myproject:mydataset.my_mv

Se elimini una vista materializzata in un altro progetto, devi specificare il progetto, il set di dati e la vista materializzata nel seguente formato: `project_id.dataset.materialized_view` (compresi gli apici se project_id contiene caratteri speciali); ad esempio, `myproject.mydataset.my_mv`.

Eliminazione di una vista materializzata solo se esiste

L'esempio seguente elimina una vista materializzata denominata my_mv in mydataset solo se esiste la vista materializzata. Se il nome della vista materializzata non esiste nel set di dati, non viene restituito alcun errore e non viene intrapresa alcuna azione.

DROP MATERIALIZED VIEW IF EXISTS mydataset.my_mv

Se elimini una vista materializzata in un altro progetto, devi specificare il progetto, il set di dati e la vista materializzata nel seguente formato: `project_id.dataset.materialized_view`, (compresi gli apici se project_id contiene caratteri speciali); ad esempio, `myproject.mydataset.my_mv`.

Istruzione DROP FUNCTION

Elimina una funzione definita dall'utente permanente.

Syntax

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

Argomenti

  • IF EXISTS: se non esiste alcuna funzione con questo nome, l'istruzione non ha effetto.

  • project_name: il nome del progetto contenente la funzione da eliminare. Il valore predefinito è il progetto che esegue questa query DDL. Se il nome del progetto contiene caratteri speciali come i due punti, deve essere racchiuso tra virgolette ` (esempio: `google.com:my_project`).

  • dataset_name: il nome del set di dati contenente la funzione da eliminare. Il valore predefinito è defaultDataset nella richiesta.

  • function_name: il nome della funzione che stai eliminando.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.delete La funzione da eliminare.

Esempi

La seguente istruzione di esempio elimina la funzione parseJsonAsStruct contenuta nel set di dati mydataset.

DROP FUNCTION mydataset.parseJsonAsStruct;

La seguente istruzione di esempio elimina la funzione parseJsonAsStruct dal set di dati sample_dataset nel progetto other_project.

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;

DROP TABLE FUNCTION

Elimina una funzione di tabella.

Syntax

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

Argomenti

  • IF EXISTS: se non esiste alcuna funzione di tabella con questo nome, l'istruzione non ha effetto.

  • project_name: il nome del progetto contenente la funzione di tabella da eliminare. Il valore predefinito è il progetto che esegue questa query DDL.

  • dataset_name: il nome del set di dati contenente la funzione di tabella da eliminare.

  • function_name: il nome della funzione tabella da eliminare.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.delete La funzione di tabella da eliminare.

Esempio

L'esempio seguente elimina una funzione di tabella denominata my_table_function:

DROP TABLE FUNCTION mydataset.my_table_function;

Istruzione DROP PROCEDURE

Elimina una stored procedure.

Syntax

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

Argomenti

  • IF EXISTS: se non esiste alcuna procedura con questo nome, l'istruzione non ha effetto.

  • project_name: il nome del progetto contenente la procedura da eliminare. Il valore predefinito è il progetto che esegue questa query DDL. Se il nome del progetto contiene caratteri speciali come i due punti, deve essere racchiuso tra virgolette ` (esempio: `google.com:my_project`).

  • dataset_name: il nome del set di dati contenente la procedura da eliminare. Il valore predefinito è defaultDataset nella richiesta.

  • procedure_name: il nome della procedura che stai eliminando.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.routines.delete La procedura di eliminazione.

Esempi

La seguente istruzione di esempio elimina la procedura myprocedure contenuta nel set di dati mydataset.

DROP PROCEDURE mydataset.myProcedure;

La seguente istruzione di esempio elimina la procedura myProcedure dal set di dati sample_dataset nel progetto other_project.

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

Istruzione DROP ROW ACCESS POLICY

Elimina un criterio di accesso a livello di riga.

Syntax

DROP [ IF EXISTS ]
row_access_policy_name ON table_name;
DROP ALL ROW ACCESS POLICIES ON table_name;

Argomenti

  • IF EXISTS: se non è presente alcun criterio di accesso a livello di riga con tale nome, l'istruzione non ha effetto.

  • row_access_policy_name: nome del criterio di accesso a livello di riga che stai eliminando. Ogni criterio di accesso a livello di riga di una tabella ha un nome univoco.

  • table_name: il nome della tabella con il criterio di accesso a livello di riga o i criteri che vuoi eliminare.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.rowAccessPolicies.delete Il criterio di accesso a livello di riga da eliminare.

Esempi

Eliminare un criterio di accesso a livello di riga da una tabella

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

Elimina tutti i criteri di accesso a livello di riga da una tabella

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

Istruzione DROP CAPACITY

Elimina un impegno per la capacità.

Syntax

DROP CAPACITY [IF EXISTS]
project_id.location_id.capacity-commitment-id

Argomenti

  • IF EXISTS: se non esiste alcun impegno di capacità per tale ID, l'istruzione non ha alcun effetto.
  • project_id: l'ID del progetto di amministrazione in cui è stata creata la prenotazione.
  • location_id: la località del progetto.
  • capacity-commitment-id: l'ID impegno di capacità.

Per trovare l'ID impegno di capacità, esegui una query sulla tabella INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.capacityCommitments.delete Il progetto di amministrazione che mantiene la proprietà degli impegni.

Esempio

L'esempio seguente elimina l'impegno di capacità:

DROP RESERVATION `admin_project.region-us.1234`

Istruzione DROP RESERVATION

Elimina una prenotazione.

Syntax

DROP RESERVATION [IF EXISTS]
project_id.location_id.reservation_id

Argomenti

  • IF EXISTS: se non esiste alcuna prenotazione con questo ID, l'istruzione non ha effetto.
  • project_id: l'ID del progetto di amministrazione in cui è stata creata la prenotazione.
  • location_id: la località del progetto.
  • reservation_id: l'ID prenotazione.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.reservations.delete Il progetto di amministrazione che mantiene la proprietà degli impegni.

Esempio

L'esempio seguente elimina la prenotazione prod:

DROP RESERVATION `admin_project.region-us.prod`

Istruzione DROP ASSIGNMENT

Elimina un'assegnazione prenotazione.

Syntax

DROP ASSIGNMENT [IF EXISTS]
project_id.location_id.reservation_id.assignment_id

Argomenti

  • IF EXISTS: se non esiste alcuna assegnazione con tale ID, l'istruzione non ha effetto.
  • project_id: l'ID del progetto di amministrazione in cui è stata creata la prenotazione.
  • location_id: la località del progetto.
  • reservation_id: l'ID prenotazione.
  • assignment_id: l'ID del compito.

Per trovare l'ID assegnazione, esegui una query sulla tabella INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.reservationAssignments.delete Il progetto di amministrazione e l'assegnatario.

Esempio

L'esempio seguente elimina un'assegnazione dalla prenotazione denominata prod:

DROP ASSIGNMENT `admin_project.region-us.prod.1234`

Istruzione DROP SEARCH INDEX

Elimina un indice di ricerca in una tabella.

Syntax

DROP SEARCH INDEX [ IF EXISTS ] index_name ON table_name

Argomenti

  • IF EXISTS: se nella tabella non esiste un indice di ricerca con questo nome, l'istruzione non ha effetto.
  • index_name: il nome dell'indice da eliminare.
  • table_name: il nome della tabella con l'indice.

Autorizzazioni obbligatorie

Questa istruzione richiede le seguenti autorizzazioni IAM:

Autorizzazione Risorsa
bigquery.tables.deleteIndex La tabella con l'indice da eliminare.

Esempio

L'esempio seguente elimina un indice my_index da my_table:

DROP SEARCH INDEX my_index ON dataset.my_table;

Sintassi del percorso della tabella

Quando specifichi il percorso di una risorsa per la tabella, utilizza la sintassi seguente, incluse tabelle standard, viste, viste materializzate, tabelle esterne e snapshot delle tabelle.

table_path :=
  [[project_name.]dataset_name.]table_name
  • project_name: il nome del progetto contenente la risorsa di tabella. Il valore predefinito è il progetto che esegue la query DDL. Se il nome del progetto contiene caratteri speciali come i due punti, citalo tra virgolette ` (ad esempio: `google.com:my_project`).

  • dataset_name: il nome del set di dati che contiene la risorsa della tabella. Il valore predefinito è defaultDataset nella richiesta.

  • table_name: il nome della risorsa della tabella.

Quando crei una tabella in BigQuery, il nome della tabella deve essere univoco per ogni set di dati. Il nome della tabella può:

  • Può contenere fino a 1024 caratteri.
  • Contengono caratteri Unicode nella categoria L (lettera), M (marca), N (numero), Pc (connettore, incluso il trattino basso), Pd (trattino), Zs (spazio). Per ulteriori informazioni, consulta la sezione Categoria generale.

Ad esempio, i seguenti nomi di tabella sono validi: table 01, ग्राहक, 00_お客様, étudiant-01.

Alcuni nomi di tabella e prefissi dei nomi delle tabelle sono riservati. Se ricevi un errore che indica che il nome o il prefisso della tabella sono riservati, seleziona un nome diverso e riprova.