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
Vai alla pagina BigQuery in Cloud Console.
Fai clic su Crea nuova query.
Inserisci l'istruzione DDL nell'area di testo Query Editor. Ad esempio:
CREATE TABLE mydataset.newtable ( x INT64 )
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. OppureDROP 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'istruzioneCREATE TABLE/VIEW
oDROP 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.
Node.js
Python
Chiama il metodo
Client.query()
per avviare un job di query. Chiama il metodo
QueryJob.result()
per attendere il termine della query DDL.
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'istruzioneCREATE
non ha alcun effetto. Non può essere visualizzato conOR 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 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 conIF NOT EXISTS
.TEMP | TEMPORARY
: crea una tabella temporanea.IF NOT EXISTS
: se esiste una tabella con lo stesso nome, l'istruzioneCREATE
non ha effetto. Non può essere visualizzato conOR 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 tipiSTRING
.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 clausolaas 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 clausolaas 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 clausolaLIKE
. - Non sono consentiti nomi di colonna duplicati.
- Se sono presenti entrambe le clausole
LIKE
eas query_statement
, l'elenco delle colonne nell'istruzione di query deve corrispondere alle colonne della tabella a cui fa riferimento la clausolaLIKE
.
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 DMLINSERT
per inserire dati al suo interno. - Non è possibile utilizzare il modificatore
OR REPLACE
per sostituire una tabella con un tipo di partizionamento diverso. Prova aDROP
la tabella, poi usa un'istruzioneCREATE TABLE ... AS SELECT ...
per ricrearla.
Questa istruzione supporta le seguenti varianti:
CREATE TABLE LIKE
: crea una tabella con lo stesso schema di una tabella esistente.CREATE TABLE COPY
: crea una tabella copiando schema e dati da una tabella esistente.
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 vincoloNOT NULL
facoltativo per i tipi diversi daARRAY
.column_schema
supporta anche le opzioni nelle colonne di primo livello e nei campiSTRUCT
.column_schema
può essere utilizzato solo nell'elenco di definizioni delle colonne delle istruzioniCREATE TABLE
. Non può essere utilizzato come tipo nelle espressioni. Persimple_type
: qualsiasi tipo di dati supportato a parteSTRUCT
eARRAY
.Se
simple_type
è unSTRING
, supporta una clausola aggiuntiva per il collaudo, che definisce come unSTRING
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 vincoloNOT NULL
per una colonna o un campo, la colonna o il campo viene creato in modalitàREQUIRED
. Al contrario, quando il vincoloNOT 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 modificatoreNOT NULL
. Ad esempio, un elementocolumn_schema
diARRAY<INT64> NOT NULL
non è valido perché le colonneARRAY
hanno modalitàREPEATED
e possono essere vuote, ma non possono essereNULL
. Un elemento array in una tabella non può mai essereNULL
, indipendentemente dal fatto che il vincoloNOT NULL
sia specificato. Ad esempio,ARRAY<INT64>
equivale aARRAY<INT64 NOT NULL>
.L'attributo
NOT NULL
dicolumn_schema
di una tabella non si propaga tra le query nella tabella. Se la tabellaT
contiene una colonna dichiarata comex INT64 NOT NULL
, ad esempio,CREATE TABLE dataset.newtable AS SELECT x FROM T
crea una tabella denominatadataset.newtable
in cuix
è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 clausolaAS query_statement
.DATE(_PARTITIONTIME)
. Equivalente a_PARTITIONDATE
. Questa sintassi non può essere utilizzata con la clausolaAS query_statement
.<date_column>
. Partizionamento per una colonnaDATE
con partizioni giornaliere.DATE({ <timestamp_column> | <datetime_column> })
. Partizione per una colonnaTIMESTAMP
oDATETIME
con partizioni giornaliere.DATETIME_TRUNC(<datetime_column>, { DAY | HOUR | MONTH | YEAR })
. Partizionamento per colonnaDATETIME
con il tipo di partizionamento specificato.TIMESTAMP_TRUNC(<timestamp_column>, { DAY | HOUR | MONTH | YEAR })
. Partizione in base a una colonnaTIMESTAMP
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 clausolaAS query_statement
.DATE_TRUNC(<date_column>, { MONTH | YEAR })
. Partizionamento per una colonnaDATE
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: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
partition_expiration_days |
|
Esempio: 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 |
|
Esempio: 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 è
Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.requirePartitionFilter. Questa proprietà può essere impostata solo se la tabella è partizionata. |
kms_key_name |
|
Esempio: 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 |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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
eUPDATE
- 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 |
|
Esempio: 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
diSTRUCT
contenente due campi:word
(unSTRING
) eword_count
(unINT64
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 (unREQUIRED
booleano) e c (un floatNULLABLE
). 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'istruzioneCREATE
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 datimestamp_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: Questa proprietà equivale alla proprietà della risorsa di tabella |
friendly_name |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa di tabella |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa di tabella |
labels |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa di tabella |
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
eUPDATE
- 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 conIF NOT EXISTS
.IF NOT EXISTS
: se il nome della tabella di destinazione specificata esiste già, l'istruzioneCREATE
non ha alcun effetto. Non può essere visualizzato conOR 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 conIF NOT EXISTS
.IF NOT EXISTS
: se esiste una vista o un'altra risorsa di tabella con lo stesso nome, l'istruzioneCREATE
non ha alcun effetto. Impossibile visualizzare conOR 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: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
friendly_name |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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
eUPDATE
- 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 conIF NOT EXISTS
.IF NOT EXISTS
: se esiste una vista materializzata o un'altra risorsa per la tabella con lo stesso nome, l'istruzioneCREATE
non ha alcun effetto. Impossibile visualizzare conOR 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 inquery_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 inquery_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 inquery 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: |
refresh_interval_minutes |
FLOAT64 |
Esempio: |
expiration_timestamp |
TIMESTAMP |
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
friendly_name |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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 conIF NOT EXISTS
.IF NOT EXISTS
: se esiste una tabella esterna o un'altra risorsa per la tabella con lo stesso nome, l'istruzioneCREATE
non ha alcun effetto. Impossibile visualizzare conOR 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 definizionecolumn_schema
nell'istruzioneCREATE 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 |
Se Si applica ai dati CSV. |
allow_quoted_newlines |
Se Si applica ai dati CSV. |
compression |
Il tipo di compressione dell'origine dati. I valori supportati includono:
Si applica ai dati CSV e JSON. |
enable_logical_types |
Se Si applica ai dati Avro. |
encoding |
La codifica dei caratteri dei dati. I valori supportati includono:
Si applica ai dati CSV. |
field_delimiter |
Separatore per i campi in un file CSV. Si applica ai dati CSV. |
format |
Il formato dei dati esterni.
I valori supportati includono: Il valore |
decimal_target_types |
Determina come convertire un tipo di Esempio: |
json_extension |
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: |
hive_partition_uri_prefix |
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: |
ignore_unknown_values |
Se Si applica ai dati CSV e JSON. |
max_bad_records |
Il numero massimo di record non validi da ignorare durante la lettura dei dati. Applicabile a dati CSV, JSON e Fogli. |
null_marker |
La stringa che rappresenta i valori Si applica ai dati CSV. |
projection_fields |
Un elenco di proprietà dell'entità da caricare. Si applica ai dati di Datastore. |
quote |
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à Si applica ai dati CSV. |
require_hive_partition_filter |
Se Si applica ai dati Avro, CSV, JSON, Parquet e ORC. |
sheet_range |
Intervallo di un foglio di lavoro di Fogli da cui eseguire la query. Si applica ai dati di Fogli. Esempio: |
skip_leading_rows |
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 |
Un array di URI completi per le località dei dati esterni. Esempio: |
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 conIF NOT EXISTS
.IF NOT EXISTS
: se esiste un qualsiasi set di dati con lo stesso nome, l'istruzioneCREATE
non ha alcun effetto. Non può essere visualizzato conOR REPLACE
.TEMP
oTEMPORARY
: 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 coppiaparam_name
eparam_type
separate da virgole. Il valore diparam_type
è un tipo di dati BigQuery. Per una UDF SQL, anche il valoreparam_type
può essereANY 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 funzioneadd_one(i)
restituisce semprei + 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 funzionejadd_random(i)
restituiscei + 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 clausolaRETURNS
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 perdata_type
, consulta la sezione Tipi di dati UDF JavaScript supportati.
- Se la funzione è definita in SQL, la clausola
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 codicereturn "\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.
- Stringa tra virgolette
connection_name
: specifica una risorsa di connessione con credenziali per l'accesso all'endpoint remoto. Specifica il nome della connessione nel moduloproject_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 |
|
Una descrizione dell'UDF. |
library |
|
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: |
endpoint |
|
Un endpoint HTTP di Cloud Functions. Si applica solo alle funzioni remote. Esempio: Per ulteriori informazioni, consulta la sezione Creare una funzione remota. |
user_defined_context |
|
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: |
max_batching_rows |
|
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 conIF NOT EXISTS
.IF NOT EXISTS
: se una funzione di tabella esiste con lo stesso nome, l'istruzioneCREATE
non ha effetto. Non può essere visualizzato conOR 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 didata_type
è un tipo di dati BigQuery scalato oANY 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. SeRETURNS TABLE
non è presente, BigQuery deduce lo schema di output dall'istruzione di query nel corpo della funzione. SeRETURNS 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 conIF NOT EXISTS
.IF NOT EXISTS
: se esiste una procedura con lo stesso nome, l'istruzioneCREATE
non ha alcun effetto. Non può essere visualizzato conOR 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 |
|
Esempio: Se
Se Il valore predefinito è |
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'istruzioneCREATE
non ha alcun effetto. Non può essere visualizzato conOR 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 diiam_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
tipiuser:{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 digrantee_list
. Lafilter_expression
è simile alla clausolaWHERE
in una querySELECT
.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 campograntee_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
oUPDATE
. - 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_id
La 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_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. 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 campoSTRING
.column_name
: il nome di una colonna di primo livello della tabella, che è unSTRING
o contiene un campoSTRING
. La colonna deve avere uno dei seguenti tipi:STRING
ARRAY<STRING>
STRUCT
contenente almeno un campo nidificato di tipoSTRING
oARRAY<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 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
IF EXISTS
: se non esiste alcuna tabella con questo nome, l'istruzione non ha effetto.table_name
: il nome della tabella da modificare. Consulta la sintassi del percorso della tabella.table_set_options_list
: l'elenco di opzioni da impostare.
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: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
partition_expiration_days |
|
Esempio: 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 |
|
Esempio: 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 è
Questa proprietà equivale alla proprietà della risorsa di tabella timePartitioning.requirePartitionFilter. Questa proprietà può essere impostata solo se la tabella è partizionata. |
kms_key_name |
|
Esempio: 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 |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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
eUPDATE
- 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'istruzioneCREATE 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 tipoSTRING
. - Colonna
B
di tipoGEOGRAPHY
. - Colonna
C
di tipoNUMERIC
con modalitàREPEATED
. - Colonna
D
di tipoDATE
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 tipoGEOGRAPHY
. - Colonna
C
di tipoINT64
con modalitàREPEATED
. - Colonna
D
di tipoINT64
con modalitàREQUIRED
. - Colonna
E
di tipoTIMESTAMP
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 tipiSTRING
. 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 elementoSTRUCT
, 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 |
|
Esempio: |
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
eUPDATE
- 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'istruzioneCREATE 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
IF EXISTS
: se non esiste una vista con questo nome, l'istruzione non ha alcun effetto.view_name
: il nome della vista da modificare. Consulta la sintassi del percorso della tabella.view_set_options_list
: l'elenco di opzioni da impostare.
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: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
friendly_name |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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
eUPDATE
- 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
IF EXISTS
: se non esiste una vista materializzata con questo nome, l'istruzione non ha effetto.materialized_view_name
: il nome della vista materializzata da modificare. Consulta la sintassi del percorso della tabella.materialized_view_set_options_list
: l'elenco di opzioni da impostare.
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: |
refresh_interval_minutes |
FLOAT64 |
Esempio: |
expiration_timestamp |
TIMESTAMP |
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella expirationTime. |
friendly_name |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella friendName. |
description |
|
Esempio: Questa proprietà equivale alla proprietà della risorsa tabella description. |
labels |
|
Esempio: 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 specifichiCASCADE
oRESTRICT
, 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.