Scrittura di query in sessioni
Questo documento descrive come scrivere query in una sessione BigQuery. È destinata agli utenti che hanno già una conoscenza generale Sessioni BigQuery e sapere come per eseguire query in una sessione.
Uno stato dell'archiviazione della sessione. Lo stato creato in una sessione viene mantenuto e utilizzabile durante l'intera sessione. Quindi, se crei una tabella temporanea in di query, puoi utilizzare questa tabella temporanea in altre voci di query per per il resto della sessione.
Una sessione include il supporto per le variabili di sessione, variabili di sistema di sessione, query con più dichiarazioni e transazioni con più dichiarazioni.
Prima di completare questi passaggi, assicurati di disporre della necessaria autorizzazioni per durante una sessione.
Utilizzare le variabili di sistema in una sessione
Puoi impostare o recuperare i dati a livello di sessione con: variabili di sistema:
@@dataset_id
: l'ID del set di dati predefinito nel progetto corrente. La è possibile impostare le variabili di sistema@@dataset_project_id
e@@dataset_id
utilizzati insieme.@@dataset_project_id
: l'ID del progetto predefinito per i set di dati che sono usato nella query. Se questa variabile di sistema non è impostata o se è impostata suNULL
, viene utilizzato il progetto di esecuzione della query. Le variabili di sistema@@dataset_project_id
e@@dataset_id
possono essere impostati e utilizzati insieme.@@query_label
: l'etichetta del job per assegnare alla sessione. L'etichetta può essere usata durante l'intera sessione, non solo per una specifica query nella sessione.@@session_id
: l'ID della sessione corrente.@@time_zone
: il fuso orario predefinito da utilizzare in base al fuso orario Funzioni SQL, quando non è specificato un fuso orario come argomento.
Queste variabili di sistema possono essere utilizzate in qualsiasi momento durante la sessione e si trovano
per la sessione rimanente. Non definisci queste variabili, ma possono
le verrà assegnato un nuovo valore
SET
.
La dimensione massima di una variabile per sessione è 1 MB e la dimensione massima di tutte le variabili in una sessione è 10 MB
Assegnare un'etichetta a una sessione
Puoi assegnare l'etichetta di un job a una sessione. In questo modo, tutte le query future della sessione vengono assegnate all'etichetta. Le etichette possono essere utilizzate in qualsiasi momento durante la sessione e rientrano nell'ambito del sessione rimanente. L'etichetta del job assegnata verrà visualizzata in log di controllo.
Utilizzare le variabili in una sessione
Puoi creare, impostare e recuperare dati a livello di sessione con variabili. Le variabili possono essere utilizzate in qualsiasi momento durante la sessione e rientrano nell'ambito del parametro sessione rimanente.
- Per creare una variabile basata sulle sessioni, utilizza la classe
Istruzione
DECLARE
al di fuori di unBEGIN...END
bloccare. - Per impostare una variabile con ambito a livello di sessione dopo averla creata, utilizza la
SET
. - Una variabile dichiarata all'interno di un blocco
BEGIN...END
non è basata sulle sessioni . - È possibile fare riferimento a una variabile basata sulle sessioni all'interno di un blocco
BEGIN...END
. - Una variabile basata sulle sessioni può essere impostata all'interno di un blocco
BEGIN...END
.
La dimensione massima di una variabile per sessione è 1 MB e la dimensione massima di tutte le variabili in una sessione è 10 MB
Utilizza tabelle temporanee nelle sessioni
Una tabella temporanea consente di salvare i risultati intermedi in una tabella. R tabella temporanea è visibile a livello di sessione, quindi non devi salvare e la mantengono in un set di dati. Viene automaticamente eliminato dopo un o la sessione in corso. Ti viene addebitata l'archiviazione delle tabelle temporanee mentre è attiva. Per saperne di più sulle tabelle temporanee, consulta Utilizzare query con più dichiarazioni.
Utilizzare funzioni temporanee nelle sessioni
Una funzione temporanea è visibile a livello di sessione, quindi non è necessario salvare o e la mantengono in un set di dati. Viene automaticamente eliminato dopo un o la sessione in corso.
Lavorare con query con più istruzioni nelle sessioni
Puoi utilizzare Query multi-istruzione GoogleSQL in una sessione. Uno script può includere tabelle temporanee e variabili di sistema per in ogni script. Le variabili di sessione e le tabelle temporanee sono visibili agli script. Anche tutte le variabili di primo livello dichiarate in uno script sono variabili di sessione.
Eseguire transazioni multi-query con più query nelle sessioni
Puoi eseguire transazioni con più dichiarazioni su più query in una sessione. Ad esempio:
La seguente query avvia una transazione.
BEGIN TRANSACTION
All'interno della transazione, la seguente query crea una tabella temporanea denominata
Flights
, quindi restituisce i dati in questa tabella. Sono incluse due dichiarazioni.
nella query.
CREATE TEMP TABLE Flights(total INT64) AS SELECT * FROM UNNEST([10,23,3,14,55]) AS a;
SELECT * FROM Flights;
La seguente query esegue il commit della transazione.
COMMIT
Puoi trovare una transazione attiva che interessa la tabella Flights
:
WITH running_transactions AS (
SELECT DISTINCT transaction_id
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
EXCEPT DISTINCT
SELECT transaction_id FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND statement_type = "COMMIT_TRANSACTION"
OR statement_type = "ROLLBACK_TRANSACTION"
)
SELECT
jobs.transaction_id AS transaction_id,
project_id,
user_email,
session_info.session_id,
query
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT AS jobs, running_transactions
WHERE
creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND destination_table = ("Flights")
AND jobs.transaction_id = running_transactions.transaction_id;
Se vuoi annullare una transazione in corso e hai la bigquery.admin
puoi inviare un'istruzione di rollback,
utilizzando l'ID sessione associato alla transazione in Cloud Shell
o con una chiamata API. Quando esegui la query,
utilizzando l'ID sessione associato alla transazione, l'ID sessione viene mostrato
i risultati.
Sessione di esempio
Ecco un esempio del flusso di lavoro della sessione nella console Google Cloud:
Nella console Google Cloud, apri una nuova scheda dell'editor e per creare una sessione.
Nella scheda dell'editor, aggiungi la seguente query:
CREATE TEMP TABLE Flights(total INT64) AS SELECT * FROM UNNEST([10,23,3,14,55]) AS a; SELECT * FROM Flights;
Esegui la query. Viene creata una tabella temporanea denominata
Flights
e tutti i vengono restituiti i dati.+-------+ | total | +-------+ | 55 | | 23 | | 3 | | 14 | | 10 | +-------+
Elimina i contenuti nella scheda dell'editor e aggiungi la seguente query:
SELECT * FROM Flights LIMIT 2;
Esegui la query. Vengono restituiti i risultati per i due record. Anche se eliminato la query precedente, le informazioni della query vengono la sessione corrente.
+-------+ | total | +-------+ | 55 | | 23 | +-------+
Elimina i contenuti nella scheda dell'editor e aggiungi la seguente query:
DECLARE x INT64 DEFAULT 10; SELECT total * x AS total_a FROM Flights LIMIT 2; BEGIN SET x = 100; SELECT total * x AS total_b FROM Flights LIMIT 2; END; SELECT total * x AS total_c FROM Flights LIMIT 2;
Esegui la query. La variabile basata sulle sessioni
x
viene utilizzata per limitare il numero di risultati restituiti per la tabellaFlights
. Esamina attentamente il modo in cui la definizione dell'ambito influisce su questa variabile quando viene dichiarata al di fuori di unBEGIN...END
impostata all'interno di un'istruzioneBEGIN...END
, quindi viene fatto riferimento al di fuori dell'istruzioneBEGIN...END
.+---------+ | total_a | +---------+ | 550 | | 230 | +---------+ +---------+ | total_b | +---------+ | 5500 | | 2300 | +---------+ +---------+ | total_c | +---------+ | 5500 | | 2300 | +---------+
Elimina i contenuti nella scheda dell'editor e aggiungi la seguente query:
SELECT STRING(TIMESTAMP "2008-12-20 15:30:00+00", @@time_zone) AS default_time_zone; SET @@time_zone = "America/Los_Angeles"; SELECT STRING(TIMESTAMP "2008-12-20 15:30:00+00", @@time_zone) AS new_time_zone;
Esegui la query. La variabile di sistema con ambito a livello di sessione
@@time_zone
viene utilizzata per assegnare un fuso orario a un timestamp. La prima istruzione restituisce un timestamp con il fuso orario predefinito (in questo esempio,UTC
). Il prossimo l'istruzione assegna@@time_zone
a un nuovo valore. La terza istruzione restituisce un timestamp con il nuovo fuso orario.+-------------------------------+ | default_time_zone | +-------------------------------+ | 2008-12-20 15:30:00+00 | +-------------------------------+ +-------------------------------+ | new_time_zone | +-------------------------------+ | 2008-12-20 07:30:00-08 | +-------------------------------+
Passaggi successivi
- Esecuzione di query in sessioni
- Visualizzazione della cronologia delle query nelle sessioni
- Terminare una sessione