Il driver JDBC di Spanner (Java Database Connectivity) supporta che ti consentono di modificare lo stato della connessione, eseguire transazioni ed eseguire in modo efficiente batch di istruzioni.
I comandi seguenti si applicano ai database di dialetti PostgreSQL.
Istruzioni di connessione
Le seguenti istruzioni consentono di modificare o visualizzare le proprietà della query connessione.
SPANNER.READONLY
Un valore booleano che indica se la connessione è in modalità di sola lettura o meno. La
Il valore predefinito è false
.
SHOW [VARIABLE] SPANNER.READONLY
SET SPANNER.READONLY {TO|=} { true | false }
Puoi modificare il valore di questa proprietà solo quando non è attiva transazione.
▶ Esempio: transazione di sola lettura (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come utilizzare questa proprietà per eseguire l'esecuzione di sola lettura
transazioni in Spanner.
SET SPANNER.READONLY = TRUE;
-- This transaction is a read-only transaction.
BEGIN TRANSACTION;
-- The following two queries both use the read-only transaction.
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SELECT Title
FROM Albums
ORDER BY Title;
-- This shows the read timestamp that was used for the two queries.
SHOW SPANNER.READ_TIMESTAMP;
-- This marks the end of the read-only transaction. The next statement starts
-- a new read-only transaction.
COMMIT;
AUTOCOMMIT
Un valore booleano che indica se la connessione è in modalità di commit automatico. La
Il valore predefinito è true
.
SHOW [VARIABLE] AUTOCOMMIT
SET AUTOCOMMIT {TO|=} { true | false }
Puoi modificare il valore di questa proprietà solo quando non è attiva transazione.
Se il criterio AUTOCOMMIT
viene impostato su false, viene avviata automaticamente una nuova transazione
dopo che hai eseguito COMMIT
o ROLLBACK
. La prima istruzione che esegui
avvia la transazione.
▶ Esempio: commit automatico (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come utilizzare la proprietà autocommit
.
-- The default value for AUTOCOMMIT is true.
SHOW AUTOCOMMIT;
-- This insert statement is automatically committed after it is executed, as
-- the connection is in autocommit mode.
INSERT INTO T (id, col_a, col_b) VALUES (1, 100, 1);
-- Turning off autocommit means that a new transaction is automatically started
-- when the next statement is executed.
SET AUTOCOMMIT = FALSE;
-- The following statement starts a new transaction.
INSERT INTO T (id, col_a, col_b) VALUES (2, 200, 2);
-- This statement uses the same transaction as the previous statement.
INSERT INTO T (id, col_a, col_b) VALUES (3, 300, 3);
-- Commit the current transaction with the two INSERT statements.
COMMIT;
-- Transactions can also be executed in autocommit mode by executing the BEGIN
-- statement.
SET AUTOCOMMIT = FALSE;
-- Execute a transaction while in autocommit mode.
BEGIN;
INSERT INTO T (id, col_a, col_b) VALUES (4, 400, 4);
INSERT INTO T (id, col_a, col_b) VALUES (5, 500, 5);
COMMIT;
SPANNER.RETRY_ABORTS_INTERNALLY
Un valore booleano che indica se l'interruzione automatica della connessione viene ripetuta
transazioni. Il valore predefinito è true
.
SHOW [VARIABLE] SPANNER.RETRY_ABORTS_INTERNALLY
SET SPANNER.RETRY_ABORTS_INTERNALLY {TO|=} { true | false }
Puoi modificare il valore di questa proprietà solo dopo l'inizio di una transazione
(vedi BEGIN TRANSACTION
) e prima
tutte le istruzioni vengono eseguite all'interno della transazione.
Se imposti SPANNER.RETRY_ABORTS_INTERNALLY
su true, la connessione conserva una
checksum di tutti i dati che la connessione restituisce all'applicazione client. Questo
viene utilizzato per riprovare la transazione se viene interrotta da Spanner.
Il valore predefinito è true
. Ti consigliamo di impostare questo valore su false
se
la tua applicazione proverà già a tentare le transazioni interrotte.
SPANNER.AUTOCOMMIT_DML_MODE
Una proprietà STRING
che indica la modalità di commit automatico per
Istruzioni DML (Data Manipulation Language).
SHOW [VARIABLE] SPANNER.AUTOCOMMIT_DML_MODE
SET SPANNER.AUTOCOMMIT_DML_MODE {TO|=} { 'TRANSACTIONAL' | 'PARTITIONED_NON_ATOMIC' }
I valori possibili sono:
- In modalità
TRANSACTIONAL
, il driver esegue le istruzioni DML come entità atomiche separate transazioni. Il driver crea una nuova transazione, esegue il file DML ed esegue il commit della transazione dopo l'esecuzione corretta oppure esegue il rollback della transazione in caso di errore. - In modalità
PARTITIONED_NON_ATOMIC
, il driver esegue le istruzioni DML come istruzioni di aggiornamento partizionate. Un partizionato di aggiornamento può essere eseguita come una serie di molte transazioni, ciascuna delle quali copre delle righe interessate. L'istruzione partizionata fornisce una semantica indebolita in cambio di migliori scalabilità e prestazioni.
Il valore predefinito è TRANSACTIONAL
.
▶ Esempio: DML partizionato (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire
DML partizionato utilizzando il metodo
Driver JDBC di Spanner.
-- Change autocommit DML mode to use Partitioned DML.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'PARTITIONED_NON_ATOMIC';
-- Delete all singers that have been marked as inactive.
-- This statement is executed using Partitioned DML.
DELETE
FROM singers
WHERE active=false;
-- Change DML mode back to standard `TRANSACTIONAL`.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'TRANSACTIONAL';
STATEMENT_TIMEOUT
Una proprietà di tipo STRING
che indica il valore di timeout attuale per le istruzioni.
SHOW [VARIABLE] STATEMENT_TIMEOUT
SET STATEMENT_TIMEOUT {TO|=} { '<int8>{ s | ms | us | ns }' | <int8> | DEFAULT }
Il valore int8
è un numero intero seguito da un suffisso che indica l'ora
unità. DEFAULT
indica 0 secondi, che equivale a nessun timeout. Un numero int8
senza unità indica millisecondi. Se è stato impostato un valore di timeout per le istruzioni, le istruzioni che richiedono più tempo del valore di timeout specificato causeranno un errore int8
e invalideranno la transazione.
Le unità di tempo supportate sono:
s
: secondims
: millisecondius
: microsecondins
: nanosecondi
Il valore predefinito è 0, il che significa nessun timeout.
Il timeout di un'istruzione durante una transazione rende la transazione non valida,
le istruzioni successive nella transazione invalidata (tranne ROLLBACK
) non vanno a buon fine,
mentre il driver JDBC di Spanner genera un java.sql.SQLTimeoutException
.
SPANNER.READ_ONLY_STALENESS
Una proprietà di tipo STRING
che indica lo stato attuale
l'impostazione di inattività di sola lettura,
Spanner utilizza le query e le transazioni di sola lettura in AUTOCOMMIT
.
SHOW [VARIABLE] SPANNER.READ_ONLY_STALENESS SET SPANNER.READ_ONLY_STALENESS {TO|=} staleness_type staleness_type: { 'STRONG' | 'MIN_READ_TIMESTAMP timestamp' | 'READ_TIMESTAMP timestamp' | 'MAX_STALENESS <int8>{ s | ms | us | ns }' | 'EXACT_STALENESS <int8>{ s | ms | us | ns }' }
Il valore di obsolescenza di sola lettura si applica a tutti
successive transazioni di sola lettura e per tutte le query in modalità AUTOCOMMIT
.
Il valore predefinito è STRONG
.
Le opzioni per le associazioni di timestamp sono le seguenti:
STRONG
indica a Spanner di eseguire una lettura sicura.MAX_STALENESS
definisce l'intervallo di tempo utilizzato da Spanner esegui un lettura inattività limitata, rispetto anow()
.MIN_READ_TIMESTAMP
definisce un orario assoluto utilizzato da Spanner per perform una lettura di inattività limitata.EXACT_STALENESS
definisce l'intervallo di tempo utilizzato da Spanner esegui un lettura inattività esatta, rispetto anow()
.READ_TIMESTAMP
definisce un orario assoluto utilizzato da Spanner per eseguire una lettura di inattività esatta.
I timestamp devono utilizzare il seguente formato:
YYYY-[M]M-[D]DT[[H]H:[M]M:[S]S[.DDDDDD]][timezone]
Le unità di tempo supportate per l'impostazione di MAX_STALENESS
e EXACT_STALENESS
sono:
s
: secondims
: millisecondius
: microsecondins
: nanosecondi
Puoi modificare il valore di questa proprietà solo quando non è attiva transazione.
▶ Esempio: mancato aggiornamento in sola lettura (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire query utilizzando un livello di inattività personalizzato
con il driver JDBC di Spanner.
-- Set the read-only staleness to MAX_STALENESS 10 seconds.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 10s';
-- Execute a query in auto-commit mode. This returns results that are up to
-- 10 seconds stale.
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Read-only staleness can also be applied to read-only transactions.
-- MAX_STALENESS is only allowed for queries in autocommit mode.
-- Change the staleness to EXACT_STALENESS and start a read-only transaction.
SET SPANNER.READ_ONLY_STALENESS = 'EXACT_STALENESS 10s';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SELECT Title, SingerId
FROM Albums
ORDER BY Title;
COMMIT;
-- Set the read staleness to an exact timestamp.
SET SPANNER.READ_ONLY_STALENESS = 'READ_TIMESTAMP 2024-01-26T10:36:00Z';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.OPTIMIZER_VERSION
Una proprietà di tipo STRING
che indica
versione dell'ottimizzatore. La versione è
un numero intero o "LATEST
".
SHOW [VARIABLE] SPANNER.OPTIMIZER_VERSION
SET SPANNER.OPTIMIZER_VERSION {TO|=} { 'version'|'LATEST'|'' }
Imposta la versione dell'ottimizzatore da utilizzare per tutte le seguenti dichiarazioni su
la connessione. Se la versione dello strumento di ottimizzazione è impostata su ''
(la stringa vuota),
Spanner utilizza la versione più recente. Se non è impostata alcuna versione,
Spanner utilizza la versione di ottimizzazione impostata a livello di database
livello.
Il valore predefinito è ''
.
▶ Esempio: versione dell'ottimizzatore (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire query utilizzando un modello
versione di ottimizzazione con
Driver JDBC di Spanner.
-- Set the optimizer version to 5 and execute a query.
SET SPANNER.OPTIMIZER_VERSION = '5';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Execute the same query with the latest optimizer version.
SET SPANNER.OPTIMIZER_VERSION = 'LATEST';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Revert back to using the default optimizer version that has been set for the
-- database.
SET SPANNER.OPTIMIZER_VERSION = '';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.OPTIMIZER_STATISTICS_PACKAGE
Una proprietà di tipo STRING
che indica lo stato attuale
pacchetto di statistiche per l'ottimizzazione
usato da questa connessione.
SHOW [VARIABLE] SPANNER.OPTIMIZER_STATISTICS_PACKAGE
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE {TO|=} { 'package'|'' }
Imposta il pacchetto di statistiche dell'ottimizzatore da utilizzare per tutte le seguenti istruzioni su
la connessione. <package>
deve essere un nome di pacchetto valido. Se nessun ottimizzatore
predefinito è impostato, Spanner utilizza le statistiche dell'ottimizzatore
un pacchetto impostato a livello di database.
Il valore predefinito è ''
.
▶ Esempio: pacchetto di statistiche dell'ottimizzatore (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire query utilizzando un modello
pacchetto di statistiche sull'ottimizzazione con
il driver JDBC di Spanner.
-- Show the available optimizer statistics packages in this database.
SELECT * FROM INFORMATION_SCHEMA.SPANNER_STATISTICS;
-- Set the optimizer statistics package and execute a query.
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE = 'auto_20240124_06_47_29UTC';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Execute the same query with the default optimizer statistics package.
SET SPANNER.OPTIMIZER_STATISTICS_PACKAGE = '';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
SPANNER.RETURN_COMMIT_STATS
Una proprietà di tipo BOOL
che indica se è necessario restituire statistiche per
transazioni su questa connessione. Puoi visualizzare le statistiche restituite eseguendo
il comando SHOW SPANNER.COMMIT_RESPONSE
.
SHOW [VARIABLE] SPANNER.RETURN_COMMIT_STATS
SET SPANNER.RETURN_COMMIT_STATS {TO|=} { true | false }
Il valore predefinito è false
.
▶ Esempio: eseguire il commit delle statistiche (Fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come visualizzare le statistiche di commit per una transazione
con il driver JDBC di Spanner.
-- Enable the returning of commit stats.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
COMMIT;
-- View the commit response with the transaction statistics for the last
-- transaction that was committed.
SHOW SPANNER.COMMIT_RESPONSE;
SPANNER.RPC_PRIORITY
Una proprietà di tipo STRING
che indica la priorità relativa per
Richieste Spanner. La priorità funge da suggerimento
scheduler di Spanner e non garantisce l'ordine di esecuzione.
SHOW [VARIABLE] SPANNER.RPC_PRIORITY
SET SPANNER.RPC_PRIORITY = {'HIGH'|'MEDIUM'|'LOW'|'NULL'}
'NULL'
significa che nella richiesta non deve essere incluso alcun suggerimento.
Il valore predefinito è 'NULL'
.
Puoi anche utilizzare un hint di istruzioni per specificare la priorità RPC:
/*@RPC_PRIORITY=PRIORITY_LOW*/ SELECT * FROM Albums
Per ulteriori informazioni, vedi Priority
.
Tag
Le seguenti istruzioni gestiscono i tag di richieste e transazioni.
SPANNER.STATEMENT_TAG
Una proprietà di tipo STRING
contenente il tag di richiesta per il prossimo
l'Informativa.
SHOW [VARIABLE] SPANNER.STATEMENT_TAG
SET SPANNER.STATEMENT_TAG {TO|=} 'tag-name'
Imposta il tag di richiesta per l'istruzione successiva da eseguire. Solo uno
può essere impostato per istruzione. Il tag non comprende più istruzioni. questo elemento
deve essere impostato per singole istruzioni. Un tag di richiesta può essere rimosso impostandolo
alla stringa vuota (''
).
Il valore predefinito è ''
.
Per la stessa istruzione è possibile impostare sia tag di transazione che tag di istruzioni.
Puoi anche utilizzare un suggerimento di istruzioni per aggiungere un tag di istruzioni:
/*@STATEMENT_TAG='my-tag'*/ SELECT * FROM Albums
Per ulteriori informazioni, vedi Risolvi i problemi con i tag di richiesta e di transazione.
▶ Esempio: tag di istruzione (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come impostare tag di istruzioni con
Driver JDBC di Spanner.
-- Set the statement tag that should be included with the next statement.
SET SPANNER.STATEMENT_TAG = 'tag1';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'tag2';
SELECT Title
FROM Albums
ORDER BY Title;
-- Set a statement tag with a query hint.
/*@STATEMENT_TAG='tag3'*/
SELECT TrackNumber, Title
FROM Tracks
WHERE AlbumId=1 AND SingerId=1
ORDER BY TrackNumber;
SPANNER.TRANSACTION_TAG
Una proprietà di tipo STRING
che contiene il tag transazione per la transazione successiva.
SHOW [VARIABLE] SPANNER.TRANSACTION_TAG
SET SPANNER.TRANSACTION_TAG {TO|=} 'tag-name'
Imposta il tag della transazione per la transazione corrente da eseguire. Solo uno
può essere impostato per transazione. Il tag non si applica a più transazioni, ma deve essere impostato su base transazionale. Un tag transazione può essere rimosso
impostandola sulla stringa vuota (''
). Il tag transazione deve essere impostato prima
che eventuali istruzioni siano state eseguite nella transazione.
Il valore predefinito è ''
.
Per la stessa istruzione è possibile impostare sia tag di transazione che tag di istruzioni.
Per ulteriori informazioni, vedi Risolvi i problemi con i tag di richiesta e di transazione.
▶ Esempio: tag transazione (fai clic per espandere)
Il seguente esempio mostra come impostare i tag transazioni con il driver JDBC Spanner.
BEGIN;
-- Set the transaction tag for the current transaction.
SET SPANNER.TRANSACTION_TAG = 'transaction-tag-1';
-- Set the statement tag that should be included with the next statement.
-- The statement will include both the statement tag and the transaction tag.
SET SPANNER.STATEMENT_TAG = 'select-statement';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- The statement tag property is cleared after each statement execution.
SHOW SPANNER.STATEMENT_TAG;
-- Set another tag for the next statement.
SET SPANNER.STATEMENT_TAG = 'insert-statement';
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- The transaction tag property is cleared when the transaction finishes.
SHOW SPANNER.TRANSACTION_TAG;
Estratti conto transazioni
Le seguenti istruzioni gestiscono ed eseguono il commit delle transazioni Spanner.
LIVELLO DI ISOLAZIONE DELLE TRANSAZIONI
SHOW [VARIABLE] TRANSACTION ISOLATION LEVEL
Restituisce un insieme di risultati con una riga e una colonna di tipo STRING
. Restituito
è sempre serializable
.
SPANNER.READ_TIMESTAMP
SHOW [VARIABLE] SPANNER.READ_TIMESTAMP
Restituisce un insieme di risultati con una riga e una colonna di tipo TIMESTAMP
contenente
il timestamp di lettura della transazione di sola lettura più recente. Questa dichiarazione
restituisce un timestamp solo quando una transazione di sola lettura è ancora attiva
abbia eseguito almeno una query o subito dopo che è stata eseguita una transazione di sola lettura
e prima dell'inizio di una nuova transazione. In caso contrario, il risultato è NULL
.
▶ Esempio: leggi timestamp (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come visualizzare il timestamp dell'ultima lettura per un
un'operazione di sola lettura con il driver JDBC di Spanner.
-- Execute a query in autocommit mode using the default read-only staleness
-- (strong).
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp that was used for the previous query.
SHOW SPANNER.READ_TIMESTAMP;
-- Set a non-deterministic read-only staleness and execute the same query.
SET SPANNER.READ_ONLY_STALENESS = 'MAX_STALENESS 20s';
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp that was used for the previous query. The timestamp
-- is determined by Spanner, and is guaranteed to be no less than
-- 20 seconds stale.
SHOW SPANNER.READ_TIMESTAMP;
-- The read timestamp of a read-only transaction can also be retrieved.
SET SPANNER.READ_ONLY_STALENESS = 'STRONG';
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Show the read timestamp of the current read-only transaction. All queries in
-- this transaction will use this read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
SELECT Title
FROM Albums
ORDER BY Title;
-- The read timestamp is the same as for the previous query, as all queries in
-- the same transaction use the same read timestamp.
SHOW SPANNER.READ_TIMESTAMP;
COMMIT;
SPANNER.COMMIT_TIMESTAMP
SHOW [VARIABLE] SPANNER.COMMIT_TIMESTAMP
Restituisce un insieme di risultati con una riga e una colonna di tipo TIMESTAMP
contenente
il timestamp di commit dell'ultima transazione di lettura/scrittura che
Spanner è stato sottoposto a commit. Questa istruzione restituisce un timestamp solo quando
lo esegui dopo il commit di una transazione di lettura/scrittura e prima di eseguire
eventuali istruzioni SELECT
, DML
o di modifica dello schema successive. In caso contrario,
il risultato è NULL
.
▶ Esempio: timestamp del commit (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come visualizzare il timestamp dell'ultimo commit per un
di scrittura con il driver JDBC di Spanner.
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_TIMESTAMP;
SPANNER.COMMIT_RESPONSE
SHOW [VARIABLE] SPANNER.COMMIT_RESPONSE
Restituisce un insieme di risultati con una riga e due colonne:
COMMIT_TIMESTAMP
(type=TIMESTAMP
) indica quando è avvenuta l'ultima il commit della transazione è stato eseguito.MUTATION_COUNT
(type=INT64
) indica quante mutazioni sono state applicate in la transazione impegnata. Questo valore è sempre vuoto quando viene eseguito un emulatore.
Il conteggio delle mutazioni è disponibile solo se SET SPANNER.RETURN_COMMIT_STATS
era
impostato su true
prima del commit della transazione.
▶ Esempio: commit di risposta (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come visualizzare l'ultima risposta al commit per un
di scrittura con il driver JDBC di Spanner.
-- Enable returning commit stats in addition to the commit timestamp.
SET SPANNER.RETURN_COMMIT_STATS = true;
-- Execute a DML statement.
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1), (2, 200, 2), (3, 300, 3);
-- Show the timestamp that the statement was committed.
SHOW SPANNER.COMMIT_RESPONSE;
{ START | INIZIO } [ TRANSAZIONE | LAVORO ]
{ START | BEGIN } [ TRANSACTION | WORK ] [{ READ ONLY | READ WRITE }]
Avvia una nuova transazione. Le parole chiave TRANSACTION
e WORK
sono facoltative.
equivalenti e non hanno alcun effetto.
- Utilizza
COMMIT
oROLLBACK
per terminare una transazione. - Se hai attivato la modalità
AUTOCOMMIT
, questa affermazione disattiva temporaneamente la connessione dalla modalitàAUTOCOMMIT
. La connessione torna alla modalitàAUTOCOMMIT
al termine della transazione. - Se
READ ONLY
oREAD WRITE
non è specificato, la modalità di transazione è determinato dalla modalità di transazione predefinita della sessione. L'impostazione predefinita è impostato con il comandoSET SESSION CHARACTERISTICS AS TRANSACTION
oppure tramite impostare la variabileREADONLY
.
È possibile eseguire questa istruzione solo quando non ci sono transazioni attive.
▶ Esempio: INIZIO TRANSAZIONE (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come avviare diversi tipi di transazioni con
il driver JDBC di Spanner.
-- This starts a transaction using the current defaults of this connection.
-- The value of READONLY determines whether the transaction is a
-- read-write or a read-only transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Set READONLY to TRUE to use read-only transactions by default.
SET READONLY=TRUE;
-- This starts a read-only transaction.
BEGIN;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
-- Add 'READ WRITE' or 'READ ONLY' to the 'BEGIN' command to
-- override the current default of the connection.
SET READONLY=FALSE;
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
IMPEGNI [TRANSAZIONE | LAVORO]
COMMIT [ TRANSACTION | WORK ]
Esegue il commit della transazione corrente. Le parole chiave TRANSACTION
e WORK
sono
facoltativi ed equivalenti e non hanno alcun effetto.
- Il commit di una transazione di lettura/scrittura comporta tutti gli aggiornamenti di questa transazione visibile ad altre transazioni e sblocca tutti i blocchi della transazione su Spanner.
- Il commit di una transazione di sola lettura termina l'attuale transazione di sola lettura. Qualsiasi
l'istruzione successiva avvia una nuova transazione. Non esiste una differenza semantica
tra
COMMIT
eROLLBACK
per una transazione di sola lettura.
Puoi eseguire questa istruzione solo quando è presente una transazione attiva.
▶ Esempio: TRANSAZIONE DI IMPEGNO (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire il commit di una transazione con
Driver JDBC di Spanner.
-- Execute a regular read-write transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
-- Execute a read-only transaction. Read-only transactions also need to be
-- either committed or rolled back in the Spanner JDBC driver in order
-- to mark the end of the transaction.
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
COMMIT;
{ ABORT | ROLLBACK } [TRANSAZIONE | LAVORO]
{ ABORT | ROLLBACK } [TRANSACTION | WORK]
Esegue un ROLLBACK
della transazione corrente. Le parole chiave TRANSACTION
e
WORK
sono facoltative ed equivalenti e non hanno alcun effetto.
- L'esecuzione di un
ROLLBACK
di una transazione di lettura/scrittura cancella tutti i dati nel buffer le mutazioni, esegue il rollback della transazione su Spanner e rilascia qualsiasi blocco della transazione trattenuta. - L'esecuzione di un
ROLLBACK
di una transazione di sola lettura termina l'attuale sola lettura transazione. Eventuali istruzioni successive avviano una nuova transazione. Non esiste differenza semantica traCOMMIT
eROLLBACK
per un modello di sola lettura su una connessione.
Puoi eseguire questa istruzione solo mentre è presente una transazione attiva.
▶ Esempio: TRANSAZIONE DI ROLLBACK (fai clic per espandere)
L'esempio seguente mostra come eseguire il rollback di una transazione con il driver JDBC Spanner.
-- Use ROLLBACK to undo the effects of a transaction.
BEGIN;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
-- This ensures that the insert statement is not persisted in the database.
ROLLBACK;
-- Read-only transactions also need to be either committed or rolled back in the
-- Spanner JDBC driver in order to mark the end of the transaction.
-- There is no semantic difference between rolling back or committing a
-- read-only transaction.
BEGIN READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
ROLLBACK;
IMPOSTA TRANSAZIONE
SET TRANSACTION { READ ONLY | READ WRITE }
Imposta la modalità di transazione per la transazione corrente.
Puoi eseguire questa istruzione solo quando AUTOCOMMIT
è false
o se hai
ha avviato una transazione eseguendo BEGIN [TRANSACTION | WORK]
e non ha
ha già eseguito istruzioni nella transazione.
Questa istruzione imposta la modalità di transazione solo per la transazione corrente. Quando
viene eseguito il commit o il rollback della transazione, la transazione successiva utilizza il valore predefinito
per la connessione.
Vedi SET SESSION CHARACTERISTICS
.
▶ Esempio: IMPOSTA TRANSAZIONE (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come impostare le caratteristiche delle transazioni con
Driver JDBC di Spanner.
-- Start a transaction and set the transaction mode to read-only.
BEGIN;
SET TRANSACTION READ ONLY;
SELECT FirstName, LastName
FROM Singers
ORDER BY LastName;
-- Commit the read-only transaction to mark the end of the transaction.
COMMIT;
-- Start a transaction and set the transaction mode to read-write.
BEGIN;
SET TRANSACTION READ WRITE;
INSERT INTO T (id, col_a, col_b)
VALUES (1, 100, 1);
COMMIT;
IMPOSTARE LE CARATTERISTICHE DELLA SESSIONE
SET SESSION CHARACTERISTICS AS TRANSACTION { READ ONLY | READ WRITE }
Imposta la modalità di transazione predefinita per le transazioni nella sessione su
READ ONLY
o READ WRITE
. Questa istruzione è consentita solo quando non è presente alcuna transazione attiva.
Il comando SET TRANSACTION
può sostituire questa impostazione.
Istruzioni batch
Le istruzioni seguenti gestiscono i batch di istruzioni DDL e inviano questi batch a Spanner.
AVVIA DDL DI BATCH
START BATCH DDL
Avvia un batch di istruzioni DDL sulla connessione. Tutte le dichiarazioni successive
durante il batch devono essere istruzioni DDL. Le istruzioni DDL vengono memorizzate nel buffer localmente
e inviato a Spanner come singolo batch quando esegui RUN BATCH
.
L'esecuzione di più istruzioni DDL come un unico batch è in genere più veloce dell'esecuzione
delle istruzioni separatamente.
È possibile eseguire questa istruzione solo quando non ci sono transazioni attive.
▶ Esempio: batch DDL (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire un batch DDL con
Driver JDBC di Spanner.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Singers (
SingerId BIGINT NOT NULL PRIMARY KEY,
FirstName VARCHAR,
LastName VARCHAR
);
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Albums (
AlbumId BIGINT NOT NULL PRIMARY KEY,
Title VARCHAR,
SingerId BIGINT,
CONSTRAINT fk_albums_singers FOREIGN KEY (SingerId) REFERENCES Singers (SingerId)
);
-- This runs the DDL statements as one batch.
RUN BATCH;
ESEGUI BATCH
RUN BATCH
Invia al database tutte le istruzioni DDL contenute nel buffer nel batch DDL corrente, attende che Spanner esegua queste istruzioni e termina batch DDL attuale.
Se Spanner non può eseguire almeno un'istruzione DDL, RUN BATCH
restituisce un errore per la prima istruzione DDL che Spanner non può
eseguire il deployment. In caso contrario, l'articolo RUN BATCH
viene restituito correttamente.
PRIMA LETTO
ABORT BATCH
Cancella tutte le istruzioni DDL incluse nel buffer nel batch DDL corrente e termina il batch.
È possibile eseguire questa istruzione solo quando è attivo un batch DDL. Puoi utilizzare la modalità
ABORT BATCH
a prescindere dal fatto che il batch abbia un DDL inserito nel buffer o meno
istruzioni. Tutte le istruzioni DDL precedenti nel batch verranno interrotte.
▶ Esempio: interrompere il batch DDL (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come interrompere un batch DDL con
Driver JDBC di Spanner.
-- Start a DDL batch. All following statements must be DDL statements.
START BATCH DDL;
-- The following statements are buffered locally.
CREATE TABLE Singers (
SingerId BIGINT NOT NULL PRIMARY KEY,
FirstName VARCHAR,
LastName VARCHAR
);
-- This statement is buffered locally until RUN BATCH is executed.
CREATE TABLE Albums (
AlbumId BIGINT NOT NULL PRIMARY KEY,
Title VARCHAR,
SingerId BIGINT,
CONSTRAINT fk_albums_singers FOREIGN KEY (SingerId) REFERENCES Singers (SingerId)
);
-- This aborts the DDL batch and removes the DDL statements from the buffer.
ABORT BATCH;
AVVIA BATCH DML ed ESEGUI BATCH
Le seguenti istruzioni raggruppano le due istruzioni DML e le inviano una chiamata al server. Un batch DML può essere eseguito come parte di una transazione in modalità commit automatico.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
RUN BATCH;
▶ Esempio: batch DML (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire un batch DML con
Driver JDBC di Spanner.
-- Start a DML batch. All following statements must be a DML statement.
START BATCH DML;
-- The following statements are buffered locally.
INSERT INTO MYTABLE (ID, NAME) VALUES (1, 'ONE');
INSERT INTO MYTABLE (ID, NAME) VALUES (2, 'TWO');
-- This sends the statements to Spanner.
RUN BATCH;
-- DML batches can also be part of a read/write transaction.
BEGIN;
-- Insert a row using a single statement.
INSERT INTO MYTABLE (ID, NAME) VALUES (3, 'THREE');
-- Insert two rows using a batch.
START BATCH DML;
INSERT INTO MYTABLE (ID, NAME) VALUES (4, 'FOUR');
INSERT INTO MYTABLE (ID, NAME) VALUES (5, 'FIVE');
RUN BATCH;
-- Rollback the current transaction. This rolls back both the single DML
-- statement and the DML batch.
ROLLBACK;
Data Boost e istruzioni di query partizionate
partitionQuery L'API divide una query in parti più piccole, o partizioni, e utilizza più per recuperare le partizioni in parallelo. Ogni partizione è identificata da una di partizione. L'API PartitionQuery ha una latenza più elevata rispetto all'API query standard, in quanto è destinata solo a operazioni collettive come l'esportazione o la scansione dell'intero database.
Incremento dei dati consente di eseguire query di analisi ed esportazioni dei dati quasi azzerate sui carichi di lavoro esistenti sull'istanza Spanner di cui è stato eseguito il provisioning. Data Boost supporta solo le query partizionate.
Puoi attivare Data Boost sulla connessione corrente
SET SPANNER.DATA_BOOST_ENABLED
.
Il driver JDBC supporta tre alternative per l'esecuzione di query partizionate:
SET SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
PARTITION sql
seguito da piùRUN PARTITION 'partition-token'
Nelle sezioni che seguono vengono descritti tutti questi metodi.
SPANNER.DATA_BOOST_ENABLED
Una proprietà di tipo BOOL
che indica se questa connessione deve utilizzare
Data Boost per le query partizionate. Il valore predefinito
è false
.
SHOW [VARIABLE] SPANNER.DATA_BOOST_ENABLED
SET SPANNER.DATA_BOOST_ENABLED {TO|=} { true | false }
Imposta se questa connessione deve utilizzare Data Boost per le query partizionate.
Il valore predefinito è false
.
▶ Esempio: eseguire una query utilizzando Data Boost (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire una query utilizzando Data Boost con
Driver JDBC di Spanner.
-- Enable Data Boost on this connection.
SET SPANNER.DATA_BOOST_ENABLED = true;
-- Execute a partitioned query. Data Boost is only used for partitioned queries.
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers;
Per un esempio completo, vedi PostgreSQL DataBoostExample.
SPANNER.AUTO_PARTITION_MODE
Una proprietà di tipo BOOL
che indica se la connessione utilizza automaticamente
partizionate per tutte le query eseguite.
SHOW [VARIABLE] SPANNER.AUTO_PARTITION_MODE
SET SPANNER.AUTO_PARTITION_MODE {TO|=} { true | false}
- Imposta questa variabile su
true
se vuoi che la connessione utilizzi partizionata per tutte le query eseguite. - Imposta anche
SPANNER.DATA_BOOST_ENABLED
sutrue
se vuoi che connessione per utilizzare Data Boost per tutti query.
Il valore predefinito è false
.
▶ Esempio: Esegui (fai clic per espandere)
di Gemini Advanced.
In questo esempio vengono eseguite due query con il driver JDBC di Spanner utilizzando
Incremento dei dati
SET SPANNER.AUTO_PARTITION_MODE = true
SET SPANNER.DATA_BOOST_ENABLED = true
SELECT FirstName, LastName FROM Singers
SELECT SingerId, Title FROM Albums
Per un esempio completo, vedi PostgreSQL AutoPartitionModeExample.
ESEGUI QUERY PARZIATA
RUN PARTITIONED QUERY <sql>
Esegue una query come query partizionata su Spanner. Assicurati che
SPANNER.DATA_BOOST_ENABLED
è impostato su true
per eseguire la query con
Data Boost:
SET SPANNER.DATA_BOOST_ENABLED = true
RUN PARTITIONED QUERY SELECT FirstName, LastName FROM Singers
Il driver JDBC esegue internamente il partizionamento della query ed esegue le partizioni
parallelo. I risultati vengono uniti in un unico set di risultati e restituiti al
un'applicazione. È possibile impostare il numero di thread worker che eseguono le partizioni con
la variabile SPANNER.MAX_PARTITIONED_PARALLELISM
.
Per un esempio completo, vedi PostgreSQL RunPartitionedQueryExample.
PARTIZIONE <SQL>
PARTITION <sql>
Crea un elenco di partizioni per eseguire una query su Spanner e
restituisce un elenco di token di partizione. Ogni token di partizione può essere eseguito
su una connessione JDBC separata sullo stesso host o su un altro host utilizzando
Comando RUN PARTITION 'partition-token'
.
▶ Esempio: query di partizione (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come eseguire il partizionamento di una query ed eseguire ogni
usando il driver JDBC di Spanner.
-- Partition a query. This returns a list of partition tokens that can be
-- executed either on this connection or on any other connection to the same
-- database.
PARTITION SELECT FirstName, LastName FROM Singers;
-- Run the partitions that were returned from the previous statement.
RUN PARTITION 'partition-token-1';
RUN PARTITION 'partition-token-2';
Per un esempio completo, vedi PostgreSQL PartitionQueryExample.
RUN PARTITION "partition-token"
RUN PARTITION 'partition-token'
Esegue una partizione di query precedentemente restituita da PARTITION
. Il comando può essere eseguito su qualsiasi connessione JDBC
lo stesso database che ha creato i token di partizione.
Per un esempio completo, vedi PostgreSQL PartitionQueryExample.
SPANNER.MAX_PARTITIONED_PARALLELISM
Una proprietà di tipo int8
che indica il numero di thread worker in cui
Il driver JDBC di Spanner utilizza le partizioni. Questo valore viene utilizzato per:
SPANNER.AUTO_PARTITION_MODE = true
RUN PARTITIONED QUERY sql
SHOW [VARIABLE] SPANNER.MAX_PARTITIONED_PARALLELISM
SET SPANNER.MAX_PARTITIONED_PARALLELISM = <int8>
Imposta il numero massimo di thread worker che il driver JDBC di Spanner
che può utilizzare per eseguire le partizioni. Se questo valore è impostato su 0
,
Driver JDBC Spanner per utilizzare il numero di core della CPU sul client
come valore massimo.
Il valore predefinito è 0
.
Comandi Savepoint
Le seguenti istruzioni abilitano e disabilitano emulate
punti di salvataggio
delle transazioni. Puoi creare un punto di salvataggio richiamando
java.sql.Connection#setSavepoint()
.
Il driver JDBC di Spanner emula i punti di salvataggio per supportare i framework che che puoi utilizzare per le transazioni nidificate. I punti di salvataggio vengono emulati tenendo traccia di un checksum in esecuzione per i risultati restituiti dalle istruzioni la transazione. Quando esegui il rollback a un punto di salvataggio, Il driver JDBC di Spanner esegue il rollback della transazione e ritenta fino al punto in cui è stato impostato il punto di salvataggio. Il checksum del viene confrontato con il checksum della transazione iniziale per verificare che sono stati restituiti gli stessi risultati.
SPANNER.SAVEPOINT_SUPPORT
SHOW [VARIABLE] SPANNER.SAVEPOINT_SUPPORT
SET SPANNER.SAVEPOINT_SUPPORT {TO|=} { 'DISABLED' | 'FAIL_AFTER_ROLLBACK' | 'ENABLED' }
Una proprietà di tipo STRING
che indica l'attuale SAVEPOINT_SUPPORT
configurazione. I valori possibili sono:
DISABLED
: tutti i comandi del punto di salvataggio sono disabilitati e non riusciranno.FAIL_AFTER_ROLLBACK
: i comandi Savepoint sono abilitati. Il rollback a un il punto di salvataggio esegue il rollback dell'intera transazione. Se tenti, la transazione non va a buon fine per utilizzare la transazione dopo il rollback a un punto di salvataggio.ENABLED
: tutti i comandi Savepoint sono abilitati. Il rollback a un punto di salvataggio eseguirà il rollback della transazione e verrà eseguito un nuovo tentativo fino al punto di salvataggio. Questo l'operazione non riesce e restituisce un erroreAbortedDueToConcurrentModificationException
se i dati sottostanti utilizzati dalla transazione fino al punto di salvataggio è cambiato.
Il valore predefinito è FAIL_AFTER_ROLLBACK
.
Puoi modificare il valore di questa variabile solo quando non è attiva transazione.
▶ Esempio: supporto di Savepoint (fai clic per espandere)
di Gemini Advanced.
L'esempio seguente mostra come attivare e disattivare il supporto dei punti di salvataggio in
il driver JDBC di Spanner.
try (Connection connection =
DriverManager.getConnection(
String.format(
"jdbc:cloudspanner:/projects/%s/instances/%s/databases/%s",
"my-project", "my-instance", "my-database"))) {
// Savepoints can only be used when AutoCommit=false.
connection.setAutoCommit(false);
// Disables setting a savepoint.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='DISABLED'");
// The following statement fails because savepoints have been disabled.
connection.setSavepoint("my_savepoint1");
// Enables setting a savepoint and releasing a savepoint.
// Rolling back to a savepoint is disabled.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='FAIL_AFTER_ROLLBACK'");
Savepoint mySavepoint2 = connection.setSavepoint("my_savepoint2");
connection.createStatement().execute("insert into my_table (id, value) values (1, 'One')");
connection.releaseSavepoint(mySavepoint2);
connection.commit();
// Enables setting, releasing and rolling back to a savepoint.
connection.createStatement().execute("SET SPANNER.SAVEPOINT_SUPPORT='ENABLED'");
Savepoint mySavepoint3 = connection.setSavepoint("my_savepoint3");
connection.createStatement().execute("insert into my_table (id, value) values (2, 'Two')");
connection.rollback(mySavepoint3);
}
Passaggi successivi
Scopri come connettere JDBC a un database di dialetti PostgreSQL.