IBM Netezza SQL 翻譯指南

IBM Netezza 資料倉儲技術專為與 Netezza 專屬的 SQL 語法搭配使用而設計。Netezza SQL 是以 Postgres 7.2 為基礎。針對 Netezza 編寫的 SQL 指令碼必須經過修改,才能在 BigQuery 資料倉儲中使用,因為 SQL 方言會有所不同。

本文將詳細說明 Netezza 和 BigQuery 在以下領域的 SQL 語法相似與相異之處:

  • 資料類型
  • SQL 語言元素
  • 查詢語法
  • 資料操縱語言 (DML)
  • 資料定義語言 (DDL)
  • 預存程序
  • 函式

您也可以使用批次 SQL 翻譯大量遷移 SQL 指令碼,或是使用互動式 SQL 翻譯來翻譯臨時查詢。預先發布版中的兩個工具都支援 IBM Netezza SQL/NZPLSQL。

資料類型

Netezza BigQuery 附註
INTEGER/INT/INT4 INT64
SMALLINT/INT2 INT64
BYTEINT/INT1 INT64
BIGINT/INT8 INT64
DECIMAL NUMERIC Netezza 中的 DECIMAL 資料類型是 NUMERIC 資料類型的別名。
NUMERIC NUMERIC INT64
NUMERIC(p,s) NUMERIC BigQuery 中的 NUMERIC 類型不會像 Netezza 一樣強制執行自訂位數或比例邊界 (限制)。BigQuery 在小數點後固定有 9 個位數,而 Netezza 則允許自訂設定。在 Netezza 中,精確度 p 的範圍為 1 到 38,而比例 s 的範圍為 0 到精確度。
FLOAT(p) FLOAT64
REAL/FLOAT(6) FLOAT64
DOUBLE PRECISION/FLOAT(14) FLOAT64
CHAR/CHARACTER STRING BigQuery 中的 STRING 類型為可變長度,不需要手動設定最大字元長度,這點與 Netezza CHARACTERVARCHAR 類型不同。CHAR(n)n 的預設值為 1。字串大小上限為 64,000。
VARCHAR STRING BigQuery 中的 STRING 類型為可變長度,因此不需要手動設定最大字元長度,這點與 Netezza CHARACTERVARCHAR 類型不同。字串大小上限為 64,000。
NCHAR STRING BigQuery 中的 STRING 類型會儲存為變長 UTF-8 編碼的 Unicode。長度上限為 16,000 個半形字元。
NVARCHAR STRING BigQuery 中的 STRING 類型會儲存為可變長度 UTF-8 編碼的 Unicode。長度上限為 16,000 個半形字元。
VARBINARY BYTES
ST_GEOMETRY GEOGRAPHY
BOOLEAN/BOOL BOOL BigQuery 中的 BOOL 類型只能接受 TRUE/FALSE,這與 Netezza 中的 BOOL 類型不同,後者可接受各種值,例如 0/1yes/notrue/false,on/off
DATE DATE
TIME TIME
TIMETZ/TIME WITH TIME ZONE TIME Netezza 會以 UTC 格式儲存 TIME 資料類型,並允許您使用 WITH TIME ZONE 語法傳遞 UTC 的偏移值。BigQuery 中的 TIME 資料類型代表不受任何日期或時區影響的時間。
TIMESTAMP DATETIME Netezza TIMESTAMP 類型不包含時區,這與 BigQuery DATETIME 類型相同。
ARRAY Netezza 中沒有陣列資料類型。陣列類型會改為儲存在 varchar 欄位中

時間戳記和日期類型格式

如要進一步瞭解 Netezza SQL 使用的日期類型格式,請參閱 Netezza 日期時間範本模式說明文件。如要進一步瞭解日期時間函式,請參閱 Netezza 日期/時間函式說明文件。

將日期類型格式元素從 Netezza 轉換為 GoogleSQL 時,請特別留意 TIMESTAMPDATETIME 之間的時區差異,如以下表格所示:

Netezza BigQuery
CURRENT_TIMESTAMP
CURRENT_TIME

Netezza 中的 TIME 資訊可以有不同的時區資訊,這些資訊會使用 WITH TIME ZONE 語法定義。
盡可能使用格式正確的 CURRENT_TIMESTAMP 函式。不過,輸出格式不一定會顯示 UTC 時區 (BigQuery 在內部沒有時區)。bq 指令列工具和Google Cloud 主控台中的 DATETIME 物件會根據 RFC 3339 使用 T 分隔符進行格式設定。不過,在 Python 和 Java JDBC 中,空格會用來做為分隔符。請使用明確的 FORMAT_DATETIME 函式正確定義日期格式。否則會對字串進行明確轉換,例如:
CAST(CURRENT_DATETIME() AS STRING)
這也會傳回空格分隔符。
CURRENT_DATE CURRENT_DATE
CURRENT_DATE-3 BigQuery 不支援算術資料運算。請改用 DATE_ADD 函式。

SELECT 陳述式

一般來說,Netezza SELECT 陳述式與 BigQuery 相容。下表列出例外狀況:

Netezza BigQuery
不含 FROM 子句的 SELECT 陳述式 支援特殊情況,例如:

SELECT 1 UNION ALL SELECT 2;

SELECT
  (subquery) AS flag,
  CASE WHEN flag = 1 THEN ...

在 BigQuery 中,資料欄無法參照在同一查詢中定義的其他資料欄輸出內容。您必須複製邏輯,或將邏輯移至巢狀查詢。

選項 1

SELECT
  (subquery) AS flag,
  CASE WHEN (subquery) = 1 THEN ...

選項 2

SELECT
  q.*,
  CASE WHEN flag = 1 THEN ...
FROM (
  SELECT
    (subquery) AS flag,
    ...
  ) AS q

比較運算子

Netezza BigQuery 說明
exp = exp2 exp = exp2 等於
exp <= exp2 exp <= exp2 小於或等於
exp < exp2 exp < exp2 小於
exp <> exp2
exp != exp2
exp <> exp2
exp != exp2
不等於
exp >= exp2 exp >= exp2 大於或等於
exp > exp2 exp > exp2 大於

內建 SQL 函式

Netezza BigQuery 說明
CURRENT_DATE CURRENT_DATE 取得目前日期 (年、月和日)。
CURRENT_TIME CURRENT_TIME 取得目前時間與小數。
CURRENT_TIMESTAMP CURRENT_TIMESTAMP 取得目前的系統日期和時間,以最接近的整秒為單位。
NOW CURRENT_TIMESTAMP 取得目前的系統日期和時間,以最接近的整秒為單位。
COALESCE(exp, 0) COALESCE(exp, 0) NULL 替換為零。
NVL(exp, 0) IFNULL(exp, 0) NULL 替換為零。
EXTRACT(DOY FROM timestamp_expression) EXTRACT(DAYOFYEAR FROM timestamp_expression) 傳回從今年年初算起的天數。
ADD_MONTHS(date_expr, num_expr) DATE_ADD(date, INTERVAL k MONTH) 為日期加上月份。
DURATION_ADD(date, k) DATE_ADD(date, INTERVAL k DAY) 對日期執行加法運算。
DURATION_SUBTRACT(date, k) DATE_SUB(date, INTERVAL k DAY) 對日期執行減法運算。
str1 || str2 CONCAT(str1, str2) 連接字串。

函式

本節將比較 Netezza 和 BigQuery 函式。

匯總函式

Netezza BigQuery
ANY_VALUE
APPROX_COUNT_DISTINCT
APPROX_QUANTILES
APPROX_TOP_COUNT
APPROX_TOP_SUM
AVG AVG
intNand BIT_AND
intNnot 位元 not 運算子:~
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_SAMP
STDDEV
STRING_AGG
SUM SUM
VAR_POP VAR_POP
VAR_SAMP VAR_SAMP
VARIANCE

分析函式

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 位元 not 運算子:~
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_SAMP
VARIANCE
WIDTH_BUCKET

日期和時間函式

Netezza BigQuery
ADD_MONTHS DATE_ADD
TIMESTAMP_ADD
AGE
CURRENT_DATE CURRENT_DATE
CURRENT_DATETIME
CURRENT_TIME CURRENT_TIME
CURRENT_TIME(p)
CURRENT_TIMESTAMP CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(p)
DATE
DATE_ADD
DATE_DIFF
DATE_FROM_UNIX_DATE
DATE_SUB
DATE_TRUNC DATE_TRUNC
DATE_PART
DATETIME
DATETIME_ADD
DATETIME_DIFF
DATETIME_SUB
DATETIME_TRUNC
DURATION_ADD
DURATION_SUBTRACT
EXTRACT EXTRACT (DATE)
EXTRACT (TIMESTAMP)
FORMAT_DATE
FORMAT_DATETIME
FORMAT_TIME
FORMAT_TIMESTAMP
LAST_DAY DATE_SUB( DATE_TRUNC( DATE_ADD( date_expression, INTERVAL 1 MONTH ), MONTH ), INTERVAL 1 DAY )
MONTHS_BETWEEN DATE_DIFF(date_expression, date_expression, MONTH)
NEXT_DAY
NOW
OVERLAPS
PARSE_DATE
PARSE_DATETIME
PARSE_TIME
PARSE_TIMESTAMP
STRING
TIME
TIME_ADD
TIME_DIFF
TIME_SUB
TIME_TRUNC
TIMEOFDAY
TIMESTAMP DATETIME
TIMESTAMP_ADD
TIMESTAMP_DIFF
TIMESTAMP_MICROS
TIMESTAMP_MILLIS
TIMESTAMP_SECONDS
TIMESTAMP_SUB
TIMESTAMP_TRUNC
TIMEZONE
TO_DATE PARSE_DATE
TO_TIMESTAMP PARSE_TIMESTAMP
UNIX_DATE
UNIX_MICROS
UNIX_MILLIS
UNIX_SECONDS

字串函式

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

數學函式

Netezza BigQuery
ABS ABS
ACOS ACOS
ACOSH
ASIN ASIN
ASINH
ATAN ATAN
ATAN2 ATAN2
ATANH
CEIL
DCEIL
CEIL
CEILING
COS COS
COSH
COT COT
DEGREES
DIV
EXP EXP
FLOOR
DFLOOR
FLOOR
GREATEST GREATEST
IEEE_DIVIDE
IS_INF
IS_NAN
LEAST LEAST
LN LN
LOG LOG
LOG10
MOD MOD
NULLIF(expr, 0)
PI ACOS(-1)
POW
FPOW
POWER
POW
RADIANS
RANDOM RAND
ROUND ROUND
SAFE_DIVIDE
SETSEED
SIGN SIGN
SIN SIN
SINH
SQRT
NUMERIC_SQRT
SQRT
TAN TAN
TANH
TRUNC TRUNC
IFNULL(expr, 0)

DML 語法

本節將比較 Netezza 和 BigQuery DML 語法。

INSERT 陳述式

Netezza BigQuery

INSERT INTO table VALUES (...);

INSERT INTO table (...) VALUES (...);


Netezza 提供 DEFAULT 關鍵字和其他資料欄限制。在 BigQuery 中,只有在提供所有資料欄的情況下,才能在 INSERT 陳述式中省略資料欄名稱。

INSERT INTO table (...) VALUES (...);
INSERT INTO table (...) VALUES (...);

INSERT INTO table VALUES (), ();

BigQuery 會設有 DML 配額,限制您每天可執行的 DML 陳述式數量。如要充分運用配額,請考慮採用下列做法:

  • 在單一 INSERT 陳述式中合併多個資料列,而非每個 INSERT 陳述式一列。
  • 使用 MERGE 陳述式合併多個 DML 陳述式 (包括 INSERT 陳述式)。
  • 使用 CREATE TABLE ... AS SELECT 陳述式建立及填入新資料表。

BigQuery 中的 DML 指令碼與 Netezza 中的等效陳述式,在一致性上略有不同。另請注意,除了 NOT NULL 之外,BigQuery 不提供任何限制。

如要瞭解快照隔離和工作階段與交易處理的概略說明,請參閱「一致性保證和交易隔離」。

UPDATE 陳述式

在 Netezza 中,WHERE 子句為選用項目,但在 BigQuery 中則為必要項目。

Netezza BigQuery

UPDATE tbl
SET
tbl.col1=val1;

不支援未使用 WHERE 子句的情況。使用 WHERE true 子句更新所有資料列。

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;

如需範例,請參閱 UPDATE 範例

由於DML 配額的關係,建議您使用較大的 MERGE 陳述式,而非多個單一 UPDATEINSERT 陳述式。BigQuery 中的 DML 指令碼與 Netezza 中的等效陳述式,在一致性意義上略有不同。如要瞭解快照隔離和工作階段與交易處理的概略說明,請參閱「一致性保證和交易隔離」。

DELETETRUNCATE 陳述式

DELETETRUNCATE 陳述式都能從資料表中移除資料列,且不會影響資料表結構定義或索引。TRUNCATE 陳述式的效果與 DELETE 陳述式相同,但在處理大型資料表時,其速度比 DELETE 陳述式快得多。Netezza 支援 TRUNCATE 陳述式,但 BigQuery 不支援。不過,您可以在 Netezza 和 BigQuery 中使用 DELETE 陳述式。

在 BigQuery 中,DELETE 陳述式必須包含 WHERE 子句。在 Netezza 中,WHERE 子句為選用項目。如果未指定 WHERE 子句,系統會刪除 Netezza 資料表中的所有資料列。

Netezza BigQuery 說明

BEGIN;
LOCK TABLE A IN EXCLUSIVE MODE;
DELETE FROM A;
INSERT INTO A SELECT * FROM B;
COMMIT;

將表格內容替換為查詢輸出內容,等同於執行交易。您可以使用 querycopy (cp) 作業來執行這項操作。

bq query \
--replace \
--destination_table \
tableA \
'SELECT * \
FROM tableB \
WHERE ...'

bq cp \
-f tableA tableB

將表格內容替換為查詢結果。

DELETE FROM database.table

DELETE FROM table WHERE TRUE;

在 Netezza 中,執行刪除陳述式時,系統不會實際刪除資料列,而是只標示要刪除的資料列。稍後執行 GROOM TABLEnzreclaim 指令,即可移除標示為刪除的資料列,並回收對應的磁碟空間。
GROOM TABLE Netezza 會使用 GROOM TABLE 指令,移除標示為刪除的資料列,藉此釋出磁碟空間。

MERGE 陳述式

MERGE 陳述式必須與每個目標資料列最多一個來源資料列相符。BigQuery 中的 DML 指令碼與 Netezza 中的等效陳述式,在一致性意義上略有不同。如要瞭解快照隔離、工作階段和交易處理的概略說明,請參閱「一致性保證和交易隔離」。如需範例,請參閱 BigQuery MERGE 範例Netezza MERGE 範例

DDL 語法

本節將比較 Netezza 和 BigQuery 的 DDL 語法。

CREATE TABLE 陳述式

Netezza BigQuery 說明
TEMP
TEMPORARY
有了 BigQuery 的 DDL 支援功能,您就能根據查詢結果建立資料表,並在建立時指定其到期日。例如,為期三天:

CREATE TABLE 'my-project.public_dump.vtemp'
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(),
INTERVAL 3 DAY))
建立暫時性的工作階段表格。
ZONE MAPS 不支援。 快速搜尋 WHERE 條件。
DISTRIBUTE ON PARTITION BY 分割。這不是直接翻譯。DISTRIBUTE ON 會在節點之間共用資料,通常會使用專屬鍵來平均分配資料,而 PARTITION BY 會將資料裁剪為區段。
ORGANIZE ON CLUSTER BY Netezza 和 BigQuery 都支援最多四個鍵來進行叢集。Netezza 叢集基礎資料表 (CBT) 會為每個叢集資料欄提供相同的優先順序。BigQuery 會優先處理資料表叢集的首個資料欄,接著是第二個資料欄,依此類推。
ROW SECURITY Authorized View 資料列層級安全性。
CONSTRAINT 不支援 檢查限制條件。

DROP 陳述式

Netezza BigQuery 說明
DROP TABLE DROP TABLE
DROP DATABASE DROP DATABASE
DROP VIEW DROP VIEW

欄選項和屬性

Netezza BigQuery 說明
NULL
NOT NULL
NULLABLE
REQUIRED
指定資料欄是否可含有 NULL 值。
REFERENCES 不支援 指定資料欄限制。
UNIQUE 不支援 資料欄中的每個值都必須不重複。
DEFAULT 不支援 資料欄中所有值的預設值。

臨時資料表

Netezza 支援在工作階段期間存在的 TEMPORARY 資料表

如要在 BigQuery 中建立暫時資料表,請按照下列步驟操作:

  1. 建立存留時間較短的資料集 (例如 12 小時)。
  2. 在資料集中建立臨時資料表,資料表名稱前置字串為 temp。舉例來說,如要建立一小時後到期的資料表,請按照下列步驟操作:

    CREATE TABLE temp.name (col1, col2, ...)
    OPTIONS(expiration_timestamp = TIMESTAMP_ADD(CURRENT_TIMESTAMP(),
    INTERVAL 1 HOUR));
  3. 開始從暫存資料表讀取及寫入資料。

您也可以自行移除重複項目,以便找出下游系統中的錯誤。

請注意,BigQuery 不支援 DEFAULTIDENTITY (序列) 資料欄。

程序 SQL 陳述式

Netezza 會使用 NZPLSQL 指令碼語言搭配儲存程序。NZPLSQL 是以 Postgres 的 PL/pgSQL 語言為基礎。本節說明如何將儲存程序、函式和觸發事件中使用的程序 SQL 陳述式,從 Netezza 轉換為 BigQuery。

CREATE PROCEDURE 陳述式

Netezza 和 BigQuery 都支援使用 CREATE PROCEDURE 陳述式建立預存程序。詳情請參閱「使用 SQL 儲存程序」。

變數宣告和指派

Netezza BigQuery 說明
DECLARE var datatype(len) [DEFAULT value]; DECLARE 宣告變數。
SET var = value; SET 將值指派給變數。

例外狀況處理常式

Netezza 支援例外狀況處理常式,可在特定錯誤狀況下觸發。BigQuery 不支援條件處理程序。

Netezza BigQuery 說明
EXCEPTION 不支援 宣告一般錯誤的 SQL 例外狀況處理常式。

動態 SQL 陳述式

Netezza 支援預存程序中的動態 SQL 查詢。BigQuery 不支援動態 SQL 陳述式。

Netezza BigQuery 說明
EXECUTE IMMEDIATE sql_str; EXECUTE IMMEDIATE sql_str; 執行動態 SQL。

控制流程陳述式

Netezza BigQuery 說明
IF THEN ELSE STATEMENT
IF condition
THEN ...
ELSE ...
END IF;
IF condition
THEN ...
ELSE ...
END IF;
以條件方式執行。
迭代控制
FOR var AS SELECT ...
DO stmts END FOR;
FOR var AS cur CURSOR
FOR SELECT ...
DO stmts END FOR;
不支援 逐一檢視資料列集合。
迭代控制
LOOP stmts END LOOP;
LOOP
sql_statement_list END LOOP;
陳述式的迴圈區塊。
EXIT WHEN BREAK 退出程序。
WHILE *condition* LOOP WHILE condition
DO ...
END WHILE
執行陳述式迴圈,直到 while 條件失敗為止。

其他陳述式和程序語言元素

Netezza BigQuery 說明
CALL proc(param,...) 不支援 執行程序。
EXEC proc(param,...) 不支援 執行程序。
EXECUTE proc(param,...) 不支援 執行程序。

多陳述式和多行 SQL 陳述式

Netezza 和 BigQuery 都支援交易 (工作階段),因此支援以分號分隔的陳述式,並且會一併執行。詳情請參閱「多語句交易」。

其他 SQL 陳述式

Netezza BigQuery 說明
GENERATE STATISTICS 為目前資料庫中的所有資料表產生統計資料。
GENERATE STATISTICS ON table_name 產生特定資料表的統計資料。
GENERATE STATISTICS ON table_name(col1,col4) 請使用 MIN, MAX, AVG,統計函式、使用 UI,或使用 Cloud Data Loss Prevention API。 針對資料表中的特定欄產生統計資料。
GENERATE STATISTICS ON table_name APPROX_COUNT_DISTINCT(col) 顯示資料欄的不重複值數量。
INSERT INTO table_name INSERT INTO table_name 插入資料列。
LOCK TABLE table_name FOR EXCLUSIVE; 不支援 鎖定資料列。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ... BigQuery 一律會使用快照隔離功能。詳情請參閱「一致性保證和交易隔離」。 定義交易隔離等級。
BEGIN TRANSACTION
END TRANSACTION
COMMIT
BigQuery 一律會使用快照隔離功能。詳情請參閱「一致性保證和交易隔離」。 定義多個陳述式要求的交易邊界。
EXPLAIN ... 不支援。查詢計畫和時程中的類似功能 顯示 SELECT 陳述式的查詢計畫。
使用者檢視表中繼資料
系統檢視表中繼資料
SELECT
* EXCEPT(is_typed)
FROM
mydataset.INFORMATION_SCHEMA.TABLES;

BigQuery 資訊架構
查詢資料庫中的物件

一致性保證和交易隔離

Netezza 和 BigQuery 都是原子式,也就是說,在許多資料列的每個排列層級上,都符合 ACID 標準。舉例來說,即使插入多個值,MERGE 運算也是完全原子運算。

交易

Netezza 語法可接受 ANSI SQL 交易隔離的所有四種模式。不過,無論指定哪種模式,系統只會使用 SERIALIZABLE 模式,以提供最高程度的一致性。這個模式還可避免在並行交易之間發生髒讀、無法重複讀取和幻影讀取。Netezza 不會使用傳統的鎖定機制來強制執行一致性。而是使用序列化依附元件檢查,這是一種開放式並行控制,可在兩個交易嘗試修改相同資料時,自動回復最新交易。

BigQuery 也支援交易。BigQuery 可透過快照隔離功能,確保樂觀並行控制 (先提交者優先),在查詢開始前讀取上次提交的資料。這種方法可確保每個資料列、每個變形以及同一個 DML 陳述式中的資料列,都具有相同程度的一致性,同時避免發生死結。如果針對同一個資料表執行多個 DML 更新,BigQuery 會切換為悲觀並行控制。載入工作可以完全獨立執行,並附加至資料表。

復原

Netezza 支援 ROLLBACK 陳述式,可用於中止目前的交易,並回復交易中所做的所有變更。

在 BigQuery 中,您可以使用 ROLLBACK TRANSACTION 陳述式

資料庫限制

限制 Netezza BigQuery
每個資料庫的資料表數 32,000 未限制
每個資料表的欄數 1600 10000
資料列大小上限 64 KB 100 MB
資料欄和資料表名稱長度 128 位元組 16,384 個 Unicode 字元
每個資料表的資料列數 無限制 無限制
最大 SQL 要求長度 1 MB (未解析的標準 SQL 查詢長度上限)。

12 MB (已解析的舊版和 標準 SQL 查詢長度上限)。

串流:
10 MB (HTTP 要求大小上限)
10,000 (每個要求的最大資料列數)
要求和回應大小上限 10 MB (要求) 和 10 GB (回應),或使用分頁或 Cloud Storage API 時幾乎不受限制。
並行工作階段數量上限 63 個並行讀寫交易。2000 個伺服器並行連線。 100 個並行查詢 (可透過時段預留提高),每位使用者 300 個並行 API 要求。

後續步驟