Guida alla traduzione SQL di IBM Netezza
Il data warehousing IBM Netezza è progettato per funzionare con la sintassi SQL specifica di Netezza. Netezza SQL si basa su Postgres 7.2. Gli script SQL scritti per Netezza non possono essere utilizzati in un data warehouse BigQuery senza modifiche, perché i dialetti SQL variano.
Questo documento descrive in dettaglio le somiglianze e le differenze nella sintassi SQL tra Netezza e BigQuery nelle seguenti aree:
- Tipi di dati
- Elementi del linguaggio SQL
- Sintassi delle query
- Data Manipulation Language (DML)
- Data Definition Language (DDL)
- Stored procedure
- Funzioni
Puoi anche utilizzare la traduzione SQL batch per eseguire la migrazione collettiva degli script SQL o la traduzione SQL interattiva per tradurre query ad hoc. IBM Netezza SQL/NZPLSQL è supportato da entrambi gli strumenti in anteprima.
Tipi di dati
| Netezza | BigQuery | Note |
|---|---|---|
INTEGER/INT/INT4 |
INT64 |
|
SMALLINT/INT2 |
INT64 |
|
BYTEINT/INT1 |
INT64 |
|
BIGINT/INT8 |
INT64 |
|
DECIMAL
|
NUMERIC
|
Il tipo di dati DECIMAL in Netezza è un alias per il tipo di dati NUMERIC. |
NUMERIC]
|
NUMERIC
INT64 |
|
NUMERIC(p,s)
|
NUMERIC
|
Il tipo NUMERIC in BigQuery non applica limiti (vincoli) personalizzati per cifre o scale come fa Netezza. BigQuery ha 9 cifre fisse dopo il decimale, mentre Netezza consente una configurazione personalizzata. In Netezza, la precisione p può variare da 1 a 38 e la scala s da 0 alla precisione. |
FLOAT(p) |
FLOAT64 |
|
REAL/FLOAT(6) |
FLOAT64 |
|
DOUBLE PRECISION/FLOAT(14) |
FLOAT64 |
|
CHAR/CHARACTER
|
STRING
|
Il tipo STRING in BigQuery è di lunghezza variabile e non richiede l'impostazione manuale di una lunghezza massima dei caratteri, come invece richiedono i tipi CHARACTER e VARCHAR di Netezza. Il valore predefinito di n in CHAR(n) è 1. La dimensione massima della stringa di caratteri è 64.000. |
VARCHAR
|
STRING
|
Il tipo STRING in BigQuery è di lunghezza variabile e non richiede l'impostazione manuale di una lunghezza massima dei caratteri, come invece richiedono i tipi CHARACTER e VARCHAR di Netezza. La dimensione massima della stringa di caratteri è 64.000. |
NCHAR
|
STRING
|
Il tipo STRING in BigQuery viene archiviato come Unicode con codifica UTF-8 di lunghezza variabile. La lunghezza massima è di 16.000 caratteri. |
NVARCHAR
|
STRING
|
Il tipo STRING in BigQuery viene archiviato come Unicode con codifica UTF-8 di lunghezza variabile.
La lunghezza massima è di 16.000 caratteri. |
VARBINARY |
BYTES |
|
ST_GEOMETRY |
GEOGRAPHY |
|
BOOLEAN/BOOL
|
BOOL
|
Il tipo BOOL in BigQuery può accettare solo TRUE/FALSE, a differenza del tipo BOOL in Netezza, che può accettare una varietà di valori come 0/1, yes/no, true/false,
on/off. |
DATE |
DATE |
|
TIME |
TIME |
|
TIMETZ/TIME WITH TIME ZONE
|
TIME
|
Netezza archivia il tipo di dati TIME in formato UTC e ti consente di passare un offset dal formato UTC utilizzando la sintassi WITH TIME
ZONE. Il tipo di dati TIME in BigQuery rappresenta un'ora indipendente da qualsiasi data o fuso orario. |
TIMESTAMP
|
DATETIME
|
Il tipo Netezza TIMESTAMP non include un fuso orario, come il tipo BigQuery DATETIME. |
ARRAY
|
In Netezza non esiste un tipo di dati array. Il tipo di array viene invece archiviato in un campo varchar. |
Formattazione dei tipi di timestamp e data
Quando converti gli elementi di formattazione del tipo di data da Netezza a GoogleSQL, devi prestare particolare attenzione alle differenze di fuso orario tra TIMESTAMP e DATETIME, come riassunto nella tabella seguente:
| Netezza | BigQuery |
|---|---|
CURRENT_TIMESTAMPCURRENT_TIMELe informazioni TIME
in Netezza possono avere
informazioni sul fuso orario
diverse, definite
utilizzando la sintassi
WITH TIME ZONE.
|
Se possibile, utilizza la funzione CURRENT_TIMESTAMP, che è formattata correttamente. Tuttavia, il formato di output non mostra sempre il fuso orario UTC (internamente, BigQuery non ha un fuso orario).
L'oggetto DATETIME nello strumento a riga di comando bq e nella consoleGoogle Cloud è formattato utilizzando un separatoreTin base allo standard RFC 3339. Tuttavia, in Python e Java JDBC, viene utilizzato uno spazio come separatore.
Utilizza la funzione esplicita FORMAT_DATETIME per definire correttamente il formato della data.
In caso contrario, viene eseguito un cast esplicito a una stringa, ad esempio:CAST(CURRENT_DATETIME() AS STRING)Viene restituito anche un separatore di spazio. |
CURRENT_DATE |
CURRENT_DATE |
CURRENT_DATE-3
|
BigQuery non supporta le operazioni aritmetiche sui dati.
Utilizza invece la funzione DATE_ADD. |
SELECT istruzioni
In genere, l'istruzione SELECT di Netezza è compatibile con BigQuery. La tabella seguente contiene un elenco di eccezioni:
| Netezza | BigQuery |
|---|---|
Un'istruzione SELECT senza clausola FROM |
Supporta casi speciali come i seguenti:
|
SELECT (subquery) AS flag, CASE WHEN flag = 1 THEN ... |
In BigQuery, le colonne non possono fare riferimento all'output di altre colonne definite all'interno della stessa query. Devi duplicare la logica o spostarla in una query nidificata.
Opzione 1 SELECT (subquery) AS flag, CASE WHEN (subquery) = 1 THEN ... Opzione 2
SELECT
q.*,
CASE WHEN flag = 1 THEN ...
FROM (
SELECT
(subquery) AS flag,
...
) AS q
|
Operatori di confronto
| Netezza | BigQuery | Descrizione |
|---|---|---|
exp = exp2 |
exp = exp2 |
Uguale |
exp <= exp2 |
exp <= exp2 |
Minore o uguale a |
exp < exp2 |
exp < exp2 |
Minore di |
exp <> exp2exp != exp2 |
exp <> exp2exp != exp2 |
Non uguale |
exp >= exp2
|
exp >= exp2
|
Maggiore o uguale a |
exp > exp2 |
exp > exp2 |
Maggiore di |
Funzioni SQL integrate
| Netezza | BigQuery | Descrizione |
|---|---|---|
CURRENT_DATE
|
CURRENT_DATE
|
Recupera la data corrente (anno, mese e giorno). |
CURRENT_TIME
|
CURRENT_TIME
|
Ottieni l'ora corrente con la frazione. |
CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP
|
Restituisce la data e l'ora correnti del sistema, arrotondate al secondo intero più vicino. |
NOW
|
CURRENT_TIMESTAMP
|
Recupera la data e l'ora correnti del sistema, arrotondate al secondo intero più vicino. |
COALESCE(exp, 0)
|
COALESCE(exp, 0)
|
Sostituisci NULL con zero. |
NVL(exp, 0)
|
IFNULL(exp, 0)
|
Sostituisci NULL con
zero. |
EXTRACT(DOY FROM
timestamp_expression)
|
EXTRACT(DAYOFYEAR FROM
timestamp_expression)
|
Restituisce il numero di giorni dall'inizio dell'anno. |
ADD_MONTHS(date_expr,
num_expr) |
DATE_ADD(date,
INTERVAL k MONTH) |
Aggiunge mesi a una data. |
DURATION_ADD(date,
k) |
DATE_ADD(date,
INTERVAL k DAY) |
Eseguire l'addizione sulle date. |
DURATION_SUBTRACT(date,
k) |
DATE_SUB(date,
INTERVAL k DAY) |
Eseguire la sottrazione sulle date. |
str1 || str2 |
CONCAT(str1,
str2) |
Concatena le stringhe. |
Funzioni
Questa sezione mette a confronto le funzioni di Netezza e BigQuery.
Funzioni di aggregazione
| Netezza | BigQuery |
|---|---|
ANY_VALUE |
|
APPROX_COUNT_DISTINCT |
|
APPROX_QUANTILES |
|
APPROX_TOP_COUNT |
|
APPROX_TOP_SUM |
|
AVG |
AVG |
intNand |
BIT_AND |
intNnot |
Operatore NOT bit per bit: ~ |
intNor |
BIT_OR |
intNxor |
BIT_XOR |
intNshl |
|
intNshr |
|
CORR |
CORR |
COUNT |
COUNT |
COUNTIF |
|
COVAR_POP |
COVAR_POP |
COVAR_SAMP |
COVAR_SAMP |
GROUPING |
|
LOGICAL_AND |
|
LOGICAL_OR |
|
MAX |
MAX |
MIN |
MIN |
MEDIAN |
PERCENTILE_CONT(x, 0.5) |
STDDEV_POP |
STDDEV_POP |
STDDEV_SAMP
|
STDDEV_SAMPSTDDEV |
STRING_AGG |
|
SUM |
SUM |
VAR_POP |
VAR_POP |
VAR_SAMP
|
VAR_SAMPVARIANCE |
Funzioni analitiche
| Netezza | BigQuery |
|---|---|
ANY_VALUE |
|
ARRAY_AGG |
|
ARRAY_CONCAT |
ARRAY_CONCAT_AGG |
ARRAY_COMBINE |
|
ARRAY_COUNT |
|
ARRAY_SPLIT |
|
ARRAY_TYPE |
|
AVG |
AVG |
intNand |
BIT_AND |
intNnot |
Operatore NOT bit per bit: ~ |
intNor |
BIT_OR |
intNxor |
BIT_XOR |
intNshl |
|
intNshr |
|
CORR |
CORR |
COUNT |
COUNT |
COUNTIF |
|
COVAR_POP |
COVAR_POP |
COVAR_SAMP |
COVAR_SAMP |
CUME_DIST |
CUME_DIST |
DENSE_RANK |
DENSE_RANK |
FIRST_VALUE |
FIRST_VALUE |
LAG |
LAG |
LAST_VALUE |
LAST_VALUE |
LEAD |
LEAD |
AND |
LOGICAL_AND |
OR |
LOGICAL_OR |
MAX |
MAX |
MIN |
MIN |
NTH_VALUE |
|
NTILE |
NTILE |
PERCENT_RANK |
PERCENT_RANK |
PERCENTILE_CONT |
PERCENTILE_CONT |
PERCENTILE_DISC |
PERCENTILE_DISC |
RANK |
RANK |
ROW_NUMBER |
ROW_NUMBER |
STDDEV |
STDDEV |
STDDEV_POP |
STDDEV_POP |
STDDEV_SAMP |
STDDEV_SAMP |
STRING_AGG |
|
SUM |
SUM |
VARIANCE |
VARIANCE |
VAR_POP |
VAR_POP |
VAR_SAMP
|
VAR_SAMPVARIANCE |
WIDTH_BUCKET |
Funzioni di data e ora
Funzioni di stringa
| Netezza | BigQuery |
|---|---|
ASCII |
TO_CODE_POINTS(string_expr)[OFFSET(0)] |
BYTE_LENGTH |
|
TO_HEX |
|
CHAR_LENGTH |
|
CHARACTER_LENGTH |
|
CODE_POINTS_TO_BYTES |
|
BTRIM |
|
CHR |
CODE_POINTS_TO_STRING([numeric_expr]) |
CONCAT |
|
DBL_MP |
|
DLE_DST |
|
ENDS_WITH |
|
FORMAT |
|
FROM_BASE32 |
|
FROM_BASE64 |
|
FROM_HEX |
|
HEX_TO_BINARY |
|
HEX_TO_GEOMETRY |
|
INITCAP |
|
INSTR |
|
INT_TO_STRING |
|
LE_DST |
|
LENGTH |
LENGTH |
LOWER |
LOWER |
LPAD |
LPAD |
LTRIM |
LTRIM |
NORMALIZE |
|
NORMALIZE_AND_CASEFOLD |
|
PRI_MP |
|
REGEXP_CONTAINS |
|
REGEXP_EXTRACT |
REGEXP_EXTRACT |
REGEXP_EXTRACT_ALL |
REGEXP_EXTRACT_ALL |
REGEXP_EXTRACT_ALL_SP |
|
REGEXP_EXTRACT_SP |
|
REGEXP_INSTR |
STRPOS(col, REGEXP_EXTRACT()) |
REGEXP_LIKE |
|
REGEXP_MATCH_COUNT |
|
REGEXP_REPLACE |
REGEXP_REPLACE |
REGEXP_REPLACE_SP |
IF(REGEXP_CONTAINS,1,0) |
REGEXP_EXTRACT |
|
REPEAT |
REPEAT |
REPLACE |
|
REVERSE |
|
RPAD |
RPAD |
RTRIM |
RTRIM |
SAFE_CONVERT_BYTES_TO_STRING |
|
SCORE_MP |
|
SEC_MP |
|
SOUNDEX |
|
SPLIT |
|
STARTS_WITH |
|
STRING_TO_INT |
|
STRPOS |
STRPOS |
SUBSTR |
SUBSTR |
TO_BASE32 |
|
TO_BASE64 |
|
TO_CHAR |
|
TO_DATE |
|
TO_NUMBER |
|
TO_TIMESTAMP |
|
TO_CODE_POINTS |
|
TO_HEX |
|
TRANSLATE |
|
TRIM |
|
UPPER |
UPPER |
UNICODE |
|
UNICODES |
Funzioni matematiche
| Netezza | BigQuery |
|---|---|
ABS |
ABS |
ACOS |
ACOS |
ACOSH |
|
ASIN |
ASIN |
ASINH |
|
ATAN |
ATAN |
ATAN2 |
ATAN2 |
ATANH |
|
CEILDCEIL |
CEIL
|
CEILING |
|
COS |
COS |
COSH |
|
COT |
COT |
DEGREES |
|
DIV |
|
EXP |
EXP |
FLOORDFLOOR |
FLOOR
|
GREATEST |
GREATEST |
IEEE_DIVIDE |
|
IS_INF |
|
IS_NAN |
|
LEAST |
LEAST |
LN |
LN |
LOG |
LOG |
LOG10 |
|
MOD |
MOD |
NULLIF(expr, 0) |
|
PI |
ACOS(-1) |
POWFPOW |
POWERPOW |
RADIANS |
|
RANDOM |
RAND |
ROUND |
ROUND |
SAFE_DIVIDE |
|
SETSEED |
|
SIGN |
SIGN |
SIN |
SIN |
SINH |
|
SQRTNUMERIC_SQRT |
SQRT
|
TAN |
TAN |
TANH |
|
TRUNC |
TRUNC |
IFNULL(expr, 0) |
Sintassi DML
Questa sezione mette a confronto la sintassi DML di Netezza e BigQuery.
INSERT istruzioni
| Netezza | BigQuery |
|---|---|
INSERT INTO table VALUES (...); |
INSERT INTO table (...) VALUES (...); Netezza offre una parola chiave DEFAULT e altri vincoli per le colonne. In BigQuery, l'omissione dei nomi delle colonne nell'istruzione INSERT è valida solo se vengono fornite tutte le colonne. |
INSERT INTO table (...) VALUES (...); INSERT INTO table (...) VALUES (...); |
INSERT INTO table VALUES (), (); BigQuery impone quote DML che limitano il numero di istruzioni DML che puoi eseguire ogni giorno. Per utilizzare al meglio la tua quota, tieni presente i seguenti approcci:
|
Gli script DML in BigQuery hanno una semantica di coerenza leggermente diversa rispetto alle istruzioni equivalenti in Netezza. Tieni presente inoltre che BigQuery non offre vincoli oltre a NOT
NULL.
Per una panoramica dell'isolamento degli snapshot e della gestione di sessioni e transazioni, consulta Garanzie di coerenza e isolamento delle transazioni.
UPDATE istruzioni
In Netezza, la clausola WHERE è facoltativa, ma in BigQuery è necessaria.
| Netezza | BigQuery |
|---|---|
UPDATE tbl SET tbl.col1=val1; |
Non supportato senza la clausola WHERE.
Utilizza una clausola WHERE true per aggiornare tutte le righe. |
UPDATE A SET y = B.y, z = B.z + 1 FROM B WHERE A.x = B.x AND A.y IS NULL; |
UPDATE A SET y = B.y, z = B.z + 1 FROM B WHERE A.x = B.x AND A.y IS NULL; |
UPDATE A alias SET x = x + 1 WHERE f(x) IN (0, 1) |
UPDATE A SET x = x + 1 WHERE f(x) IN (0, 1); |
UPDATE A SET z = B.z FROM B WHERE A.x = B.x AND A.y = B.y |
UPDATE A SET z = B.z FROM B WHERE A.x = B.x AND A.y = B.y; |
Per alcuni esempi, consulta Esempi di UPDATE.
A causa delle quote DML,
ti consigliamo di utilizzare istruzioni MERGE più grandi anziché più istruzioni UPDATE e INSERT singole. Gli script DML in BigQuery hanno una semantica di coerenza leggermente diversa rispetto alle istruzioni equivalenti in Netezza.
Per una panoramica dell'isolamento degli snapshot e della gestione di sessioni e transazioni, consulta Garanzie di coerenza e isolamento delle transazioni.
DELETE e TRUNCATE istruzioni
Le istruzioni DELETE e TRUNCATE sono entrambi modi per rimuovere righe da una tabella senza influire sullo schema o sugli indici della tabella. L'istruzione TRUNCATE ha lo stesso effetto dell'istruzione DELETE, ma è molto più veloce dell'istruzione DELETE per le tabelle di grandi dimensioni. L'istruzione TRUNCATE è supportata in Netezza, ma non in BigQuery. Tuttavia, puoi utilizzare le istruzioni DELETE sia in Netezza che in BigQuery.
In BigQuery, l'istruzione DELETE deve avere una clausola WHERE.
In Netezza, la clausola WHERE è facoltativa. Se la clausola WHERE non è specificata, vengono eliminate tutte le righe della tabella Netezza.
| Netezza | BigQuery | Descrizione |
|---|---|---|
BEGIN; LOCK TABLE A IN EXCLUSIVE MODE; DELETE FROM A; INSERT INTO A SELECT * FROM B; COMMIT; |
La sostituzione dei contenuti di una tabella con l'output della query equivale a una transazione. Puoi farlo con un'operazione query o copy (cp). bq query \ bq cp \ |
Sostituisci i contenuti di una tabella con i risultati di una query. |
DELETE FROM database.table |
DELETE FROM table WHERE TRUE; |
In Netezza, quando viene eseguita un'istruzione DELETE, le righe non vengono eliminate fisicamente, ma solo contrassegnate per l'eliminazione. L'esecuzione successiva dei comandi GROOM TABLE o nzreclaim rimuove le righe contrassegnate per l'eliminazione e recupera lo spazio su disco corrispondente.
|
GROOM
TABLE |
Netezza utilizza il comando GROOM TABLE per recuperare spazio su disco rimuovendo le righe contrassegnate per l'eliminazione. |
MERGE istruzioni
Un'istruzione MERGE deve corrispondere al massimo a una riga di origine per ogni riga di destinazione. Gli script DML in BigQuery hanno una semantica di coerenza leggermente diversa rispetto alle istruzioni equivalenti in Netezza. Per una panoramica dell'isolamento degli snapshot e della gestione di sessioni e transazioni, consulta Garanzie di coerenza e isolamento delle transazioni.
Per esempi, consulta
Esempi di BigQuery MERGE
ed
Esempi di Netezza MERGE.
Sintassi DDL
Questa sezione mette a confronto la sintassi DDL di Netezza e BigQuery.
CREATE TABLE istruzioni
| Netezza | BigQuery | Descrizione |
|---|---|---|
TEMPTEMPORARY
|
Con il supporto DDL di BigQuery, puoi creare una tabella dai risultati di una query e specificarne la scadenza al momento della creazione. Ad esempio, per tre giorni:CREATE TABLE
'my-project.public_dump.vtemp'OPTIONS(expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(),INTERVAL 3 DAY)) |
Creare tabelle temporanee per una sessione. |
ZONE MAPS
|
Non supportate. | Ricerca rapida della condizione WHERE. |
DISTRIBUTE ON
|
PARTITION BY
|
Partizionamento.
Questa non è una traduzione diretta. DISTRIBUTE ON condivide i dati tra i nodi, di solito con una chiave univoca per una distribuzione uniforme, mentre PARTITION BY suddivide i dati in segmenti. |
ORGANIZE ON
|
CLUSTER BY
|
Sia Netezza che BigQuery supportano fino a quattro chiavi per il clustering. Le tabelle di base raggruppate (CBT) di Netezza assegnano la stessa precedenza a ciascuna delle colonne di clustering. BigQuery dà la precedenza alla prima colonna su cui è raggruppata la tabella, seguita dalla seconda colonna e così via. |
ROW SECURITY |
Authorized View |
Sicurezza a livello di riga. |
CONSTRAINT |
Non supportata | Controlla i vincoli. |
DROP istruzioni
| Netezza | BigQuery | Descrizione |
|---|---|---|
DROP TABLE |
DROP TABLE |
|
DROP DATABASE |
DROP DATABASE |
|
DROP VIEW |
DROP VIEW |
Opzioni e attributi delle colonne
| Netezza | BigQuery | Descrizione |
|---|---|---|
NULLNOT NULL
|
NULLABLEREQUIRED
|
Specifica se la colonna può contenere valori NULL. |
REFERENCES
|
Non supportata | Specifica il vincolo della colonna. |
UNIQUE
|
Non supportata | Ogni valore della colonna deve essere univoco. |
DEFAULT
|
Non supportata | Valore predefinito per tutti i valori della colonna. |
Tabelle temporanee
Netezza supporta le tabelle TEMPORARY che esistono per la durata di una sessione.
Per creare una tabella temporanea in BigQuery, segui questi passaggi:
- Crea un set di dati con una durata breve (ad esempio 12 ore).
Crea la tabella temporanea nel set di dati, con il prefisso del nome della tabella
temp. Ad esempio, per creare una tabella che scade dopo un'ora:CREATE TABLE temp.name (col1, col2, ...) OPTIONS(expiration_timestamp = TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));
Inizia a leggere e scrivere dalla tabella temporanea.
Puoi anche rimuovere i duplicati in modo indipendente per trovare errori nei sistemi downstream.
Tieni presente che BigQuery non supporta le colonne DEFAULT e IDENTITY (sequenze).
Istruzioni SQL procedurali
Netezza utilizza il linguaggio di scripting NZPLSQL per lavorare con le stored procedure. NZPLSQL si basa sul linguaggio PL/pgSQL di Postgres. Questa sezione descrive come convertire le istruzioni SQL procedurali utilizzate in stored procedure, funzioni e trigger da Netezza a BigQuery.
CREATE PROCEDURE istruzioni
Sia Netezza che BigQuery supportano la creazione di stored procedure utilizzando l'istruzione CREATE PROCEDURE. Per saperne di più, consulta Utilizza le stored procedure SQL.
Dichiarazione e assegnazione di variabili
| Netezza | BigQuery | Descrizione |
|---|---|---|
DECLARE var
datatype(len) [DEFAULT
value]; |
DECLARE
|
Dichiara la variabile. |
SET var = value; |
SET |
Assegna un valore alla variabile. |
Gestori di eccezioni
Netezza supporta i gestori di eccezioni che possono essere attivati per determinate condizioni di errore. BigQuery non supporta i gestori di condizioni.
| Netezza | BigQuery | Descrizione |
|---|---|---|
EXCEPTION
|
Non supportata | Dichiara il gestore delle eccezioni SQL per gli errori generali. |
Istruzioni SQL dinamiche
Netezza supporta le query SQL dinamiche all'interno delle stored procedure. BigQuery non supporta le istruzioni SQL dinamiche.
| Netezza | BigQuery | Descrizione |
|---|---|---|
EXECUTE IMMEDIATE sql_str; |
EXECUTE IMMEDIATE sql_str; |
Esegui SQL dinamico. |
Istruzioni di flusso di controllo
| Netezza | BigQuery | Descrizione |
|---|---|---|
IF THEN ELSE STATEMENTIF conditionTHEN ...ELSE ...END IF; |
IF conditionTHEN ...ELSE ...END IF;
|
Esegui in modo condizionale. |
Iterative ControlFOR var AS SELECT ...DO stmts END FOR;FOR var AS cur CURSORFOR SELECT ...DO stmts END FOR; |
Non supportata | Eseguire l'iterazione su una raccolta di righe. |
Controllo iterativoLOOP stmts END LOOP; |
LOOPsql_statement_list END LOOP; |
Blocco di istruzioni in loop. |
EXIT WHEN |
BREAK |
Uscire da una procedura. |
WHILE *condition* LOOP
|
WHILE conditionDO ...END WHILE |
Esegui un ciclo di istruzioni finché una condizione while non restituisce un errore. |
Altre istruzioni ed elementi del linguaggio procedurale
| Netezza | BigQuery | Descrizione |
|---|---|---|
CALL proc(param,...) |
Non supportata | Eseguire una procedura. |
EXEC proc(param,...) |
Non supportata | Eseguire una procedura. |
EXECUTE proc(param,...) |
Non supportata | Eseguire una procedura. |
Istruzioni SQL con più istruzioni e più righe
Sia Netezza che BigQuery supportano le transazioni (sessioni) e, pertanto, le istruzioni separate da punti e virgola che vengono eseguite insieme in modo coerente. Per saperne di più, consulta Transazioni con più istruzioni.
Altre istruzioni SQL
| Netezza | BigQuery | Descrizione |
|---|---|---|
GENERATE
STATISTICS
|
Genera statistiche per tutte le tabelle nel database corrente. | |
GENERATE
STATISTICS ON
table_name |
Genera statistiche per una tabella specifica. | |
GENERATE
STATISTICS ON
table_name(col1,col4)
|
Utilizza le funzioni statistiche come MIN, MAX, AVG, ecc., l'interfaccia utente o l'API Cloud Data Loss Prevention. |
Genera statistiche per colonne specifiche di una tabella. |
GENERATE
STATISTICS ON
table_name |
APPROX_COUNT_DISTINCT(col) |
Mostra il numero di valori univoci per le colonne. |
INSERT INTO
table_name |
INSERT INTO
table_name |
Inserisci una riga. |
LOCK TABLE
table_name FOR
EXCLUSIVE; |
Non supportata | Blocca riga. |
SET SESSION
CHARACTERISTICS AS
TRANSACTION ISOLATION
LEVEL …
|
BigQuery utilizza sempre l'isolamento degli snapshot. Per maggiori dettagli, consulta Garanzie di coerenza e isolamento delle transazioni. | Definisci il livello di isolamento delle transazioni. |
BEGIN TRANSACTIONEND TRANSACTIONCOMMIT |
BigQuery utilizza sempre l'isolamento degli snapshot. Per maggiori dettagli, consulta Garanzie di coerenza e isolamento delle transazioni. | Definisci il limite della transazione per le richieste con più istruzioni. |
EXPLAIN…
|
Non supportate. Funzionalità simili nel piano di query e nella sequenza temporale | Mostra il piano di query per un'istruzione SELECT.
|
| Metadati delle visualizzazioni utente Metadati delle visualizzazioni di sistema |
SELECT* EXCEPT(is_typed)FROMmydataset.INFORMATION_SCHEMA.TABLES;BigQuery Information Schema |
Esegui query sugli oggetti nel database |
Garanzie di coerenza e isolamento delle transazioni
Sia Netezza che BigQuery sono atomici, ovvero conformi ad ACID a livello di permutazione su più righe. Ad esempio, un'operazione MERGE è completamente atomica, anche con più valori inseriti.
Transazioni
Netezza accetta sintatticamente tutte e quattro le modalità di isolamento delle transazioni ANSI SQL.
Tuttavia, indipendentemente dalla modalità specificata, viene utilizzata solo la modalità SERIALIZABLE, che fornisce il livello di coerenza più elevato possibile. Questa modalità evita anche letture dirty, non ripetibili e phantom tra transazioni simultanee.
Netezza non utilizza il blocco convenzionale per applicare la coerenza. Utilizza invece il controllo della dipendenza di serializzazione, una forma di controllo della contemporaneità ottimistica per eseguire automaticamente il rollback dell'ultima transazione quando due transazioni tentano di modificare gli stessi dati.
BigQuery supporta anche le transazioni. BigQuery aiuta a garantire controllo della contemporaneità ottimistica (il primo commit ha la priorità) con l'isolamento degli snapshot, in cui una query legge gli ultimi dati di cui è stato eseguito il commit prima dell'inizio della query. Questo approccio garantisce lo stesso livello di coerenza per riga, per mutazione e tra le righe all'interno della stessa istruzione DML, evitando al contempo i deadlock. Nel caso di più aggiornamenti DML sulla stessa tabella, BigQuery passa al controllo della concorrenza pessimistico. I job di caricamento possono essere eseguiti in modo completamente indipendente e aggiungere dati alle tabelle.
Esegui il rollback
Netezza supporta l'istruzione ROLLBACK TRANSACTION per interrompere la transazione corrente ed eseguire il rollback di tutte le modifiche apportate nella transazione.
In BigQuery, puoi utilizzare l'istruzione ROLLBACK TRANSACTION.
Limiti per i database
| Limite | Netezza | BigQuery |
|---|---|---|
| Tabelle per database | 32.000 | Senza restrizioni |
| Colonne per tabella | 1600 | 10000 |
| Dimensione massima della riga | 64 kB | 100 MB |
| Lunghezza dei nomi di colonne e tabelle | 128 byte | 16.384 caratteri Unicode |
| Righe per tabella | Illimitato | Illimitato |
| Lunghezza massima della richiesta SQL | 1 MB (lunghezza massima della query SQL standard non risolta). 12 MB (lunghezza massima della query SQLlegacy e standard risolta). Streaming: 10 MB (limite di dimensioni della richiesta HTTP) 10.000 (numero massimo di righe per richiesta) |
|
| Dimensioni massime di richiesta e risposta | 10 MB (richiesta) e 10 GB (risposta) o praticamente illimitato se utilizzi l'impaginazione o l'API Cloud Storage. | |
| Numero massimo di sessioni simultanee | 63 transazioni di lettura/scrittura simultanee. 2000 connessioni simultanee al server. | 100 query simultanee (possono essere aumentate con la prenotazione di slot), 300 richieste API simultanee per utente. |
Passaggi successivi
- Ricevi istruzioni passo passo per eseguire la migrazione da IBM Netezza a BigQuery.