Teradata SQL 翻譯指南
本文詳細說明 Teradata 和 BigQuery 在 SQL 語法方面的異同,協助您規劃遷移作業。使用批次 SQL 翻譯大量遷移 SQL 指令碼,或使用互動式 SQL 翻譯翻譯臨時查詢。
資料類型
本節說明 Teradata 和 BigQuery 資料類型的對應關係。
| Teradata | BigQuery | 附註 |
|---|---|---|
INTEGER |
INT64 |
|
SMALLINT |
INT64 |
|
BYTEINT |
INT64 |
|
BIGINT |
INT64 |
|
DECIMAL |
如果小數位數 (小數點後的位數) <= 9,請使用 BigQuery 的 如需強制執行自訂數字或小數位數界限 (限制),請使用 BigQuery 的參數化十進位資料類型。 Teradata 允許您透過四捨五入儲存的值來插入更高精確度的值,但會保留計算中的高精確度。與 ANSI 標準相比,這可能會導致 非預期的四捨五入行為。 |
|
FLOAT |
FLOAT64 |
|
NUMERIC |
如果小數位數 (小數點後的位數) <= 9,請使用 BigQuery 的 如需強制執行自訂數字或小數位數界限 (限制),請使用 BigQuery 的參數化十進位資料類型。 Teradata 允許您透過四捨五入儲存的值來插入更高精確度的值,但會保留計算中的高精確度。與 ANSI 標準相比,這可能會導致 非預期的四捨五入行為。 |
|
NUMBER |
如果小數位數 (小數點後的位數) <= 9,請使用 BigQuery 的 如需強制執行自訂數字或小數位數界限 (限制),請使用 BigQuery 的參數化十進位資料類型。 Teradata 允許您透過四捨五入儲存的值來插入更高精確度的值,但會保留計算中的高精確度。與 ANSI 標準相比,這可能會導致 非預期的四捨五入行為。 |
|
REAL |
FLOAT64 |
|
CHAR/CHARACTER |
STRING |
如需強制規定字元長度上限,請使用 BigQuery 的參數化
|
VARCHAR |
STRING |
如需強制規定字元長度上限,請使用 BigQuery 的參數化
|
CLOB |
STRING |
|
JSON |
JSON |
|
BLOB |
BYTES |
|
BYTE |
BYTES |
|
VARBYTE |
BYTES |
|
DATE |
DATE |
BigQuery 不支援自訂格式,這與 Teradata 搭配 DataForm 在 SDF 中支援的格式類似。 |
TIME |
TIME |
|
TIME WITH TIME ZONE |
TIME |
Teradata 會以世界標準時間 (UTC) 儲存 TIME 資料類型,並允許您使用 WITH TIME ZONE 語法傳遞與 UTC 的時差。
BigQuery 中的 TIME 資料類型代表與任何日期或時區無關的時間。 |
TIMESTAMP |
TIMESTAMP |
Teradata 和 BigQuery TIMESTAMP 資料類型都具有微秒精確度 (但 Teradata 支援閏秒,BigQuery 則不支援)。Teradata 和 BigQuery 資料類型通常與世界標準時間時區相關聯 (詳細資料)。 |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP |
Teradata TIMESTAMP 可在整個系統、個別使用者或個別資料欄 (使用
WITH TIME ZONE) 設定不同的時區。如果您未明確指定時區,BigQuery TIMESTAMP 類型會假設為世界標準時間。請務必正確匯出時區資訊 (請勿在沒有時區資訊的情況下串連 DATE 和 TIME 值),以便 BigQuery 在匯入時轉換。或是在匯出前,務必將時區資訊轉換為世界標準時間。BigQuery 具有 DATETIME,可做為民用時間 (輸出時不會顯示時區) 和 TIMESTAMP (精確的時間點,一律顯示世界標準時間時區) 之間的抽象概念。 |
ARRAY |
ARRAY |
|
MULTI-DIMENSIONAL ARRAY |
ARRAY |
在 BigQuery 中,使用 struct 陣列,每個 struct 包含 ARRAY 類型的欄位 (詳情請參閱 BigQuery 說明文件)。 |
INTERVAL HOUR |
INT64 |
|
INTERVAL MINUTE |
INT64 |
|
INTERVAL SECOND |
INT64 |
|
INTERVAL DAY |
INT64 |
|
INTERVAL MONTH |
INT64 |
|
INTERVAL YEAR |
INT64 |
|
PERIOD(DATE) |
DATE,DATE |
PERIOD(DATE) 應轉換為兩個包含開始日期和結束日期的 DATE 欄,以便與視窗函式搭配使用。 |
PERIOD(TIMESTAMP WITH TIME ZONE) |
TIMESTAMP,TIMESTAMP |
|
PERIOD(TIMESTAMP) |
TIMESTAMP,TIMESTAMP |
|
PERIOD(TIME) |
TIME,TIME |
|
PERIOD(TIME WITH TIME ZONE) |
TIME,TIME |
|
UDT |
STRING |
|
XML |
STRING |
|
TD_ANYTYPE |
STRING |
如要進一步瞭解類型轉換,請參閱下一節。
Teradata 類型格式
Teradata SQL 會使用一組預設格式來顯示運算式和資料欄資料,以及在資料類型之間進行轉換。舉例來說,INTEGERDATE 模式中的 PERIOD(DATE) 資料類型預設格式為 YY/MM/DD。建議您盡可能使用 ANSIDATE 模式,確保符合 ANSI SQL 標準,並趁此機會清理舊版格式。
Teradata 允許使用 FORMAT 子句自動套用自訂格式,而不變更基礎儲存空間,無論是使用 DDL 建立資料表時做為資料類型屬性,或是在衍生運算式中。例如,FORMAT 規格 9.99 會將任何 FLOAT 值四捨五入至兩位數。在 BigQuery 中,這項功能必須使用 ROUND() 函式轉換。
這項功能需要處理複雜的極端案例。舉例來說,如果將 FORMAT 子句套用至 NUMERIC 欄,則必須考量特殊四捨五入和格式規則。FORMAT 子句可用來將 INTEGER Epoch 值隱含轉換為 DATE 格式。或者,VARCHAR 欄上的 FORMAT 規格 X(6) 會截斷欄值,因此您必須轉換為 SUBSTR() 函式。這項行為不符合 ANSI SQL 標準。因此,建議您不要將資料欄格式遷移至 BigQuery。
如果絕對需要資料欄格式,請使用檢視表或 user-defined function (UDF)。
如要瞭解 Teradata SQL 針對各資料類型使用的預設格式,請參閱 Teradata 預設格式說明文件。
時間戳記和日期類型格式
下表摘要說明 Teradata SQL 和 GoogleSQL 之間,時間戳記和日期格式元素的差異。
| Teradata 格式 | Teradata 說明 | BigQuery |
|---|---|---|
CURRENT_TIMESTAMP
|
Teradata 中的 TIME 和 TIMESTAMP 資訊可能會有不同的時區資訊,這些資訊是使用 WITH
TIME ZONE 定義。 |
請盡可能使用 ISO 格式的 CURRENT_TIMESTAMP()。不過,輸出格式一律會顯示世界標準時間時區。(BigQuery 內部沒有時區)。請注意下列 ISO 格式差異。 DATETIME 的格式是根據輸出管道慣例設定。在 BigQuery 指令列工具和 BigQuery 控制台中,系統會根據 RFC 3339 使用 T 分隔符設定格式。不過,在 Python 和 Java JDBC 中,空格會做為分隔符號。如要使用明確格式,請使用 FORMAT_DATETIME(),這會將明確轉換為字串。舉例來說,下列運算式一律會傳回空格分隔符號:CAST(CURRENT_DATETIME() AS STRING)Teradata 支援 TIME 資料欄中的 DEFAULT 關鍵字,可用於設定目前時間 (時間戳記);BigQuery 不會使用這個關鍵字。 |
CURRENT_DATE |
日期會使用下列公式,以 INT64 值儲存在 Teradata 中:(YEAR - 1900) * 10000 + (MONTH * 100) + DAY日期可以設定為整數格式。 |
BigQuery 具有獨立的 DATE 格式,一律會以 ISO 8601 格式傳回日期。DATE_FROM_UNIX_DATE 是以 1970 年為基準,因此無法使用。Teradata 支援在 DATE 資料欄中使用 DEFAULT 關鍵字來設定目前日期,但 BigQuery 不會使用這個關鍵字。
|
CURRENT_DATE-3 |
日期值會以整數表示。Teradata 支援日期類型的算術運算子。 |
日期類型請使用 DATE_ADD() 或 DATE_SUB()。BigQuery 會對 INT64、NUMERIC 和 FLOAT64 資料類型使用算術運算子。
|
SYS_CALENDAR.CALENDAR |
Teradata 提供日曆作業檢視畫面,可執行整數運算以外的作業。 | 不適用於 BigQuery。 |
SET SESSION DATEFORM=ANSIDATE |
將工作階段或系統日期格式設為 ANSI (ISO 8601)。 | BigQuery 一律使用 ISO 8601,因此請務必轉換 Teradata 日期和時間。 |
查詢語法
本節說明 Teradata 和 BigQuery 之間的查詢語法差異。
SELECT 陳述式
大多數 Teradata SELECT 陳述式都與 BigQuery 相容。下表列出細微差異。
| Teradata | BigQuery | |
|---|---|---|
SEL |
轉換為 SELECT。BigQuery 不會使用 SEL 縮寫。 |
|
SELECT
|
在 BigQuery 中,資料欄無法參照相同選取清單中定義的其他資料欄輸出內容。建議將子查詢移至 WITH 子句。
WITH flags AS (
|
|
SELECT * FROM table
|
BigQuery 不會使用 ANY 邏輯述詞。您可以使用多個 OR 運算子達到相同功能:SELECT * FROM table在這種情況下,字串比較也會有所不同。請參閱「比較運算子」。 |
|
SELECT TOP 10 * FROM table
|
BigQuery 會在查詢結尾使用 LIMIT,而不是在 SELECT 關鍵字後方使用 TOP n。 |
比較運算子
下表列出 Teradata 專屬的比較運算子,這些運算子必須轉換為 BigQuery 使用的 ANSI SQL:2011 相容運算子。
如要瞭解 BigQuery 中的運算子,請參閱 BigQuery 說明文件的「運算子」一節。
| Teradata | BigQuery | 附註 |
|---|---|---|
exp EQ exp2exp IN (exp2, exp3)
|
exp = exp2exp IN (exp2, exp3)如要保留 NOT CASESPECIFIC 的非 ANSI 語意,可以使用 RTRIM(UPPER(exp)) = RTRIM(UPPER(exp2))
|
比較字串是否相等時,Teradata「可能」會忽略結尾空白字元,而 BigQuery 則會將其視為字串的一部分。舉例來說,'xyz'=' xyz' 在 Teradata 中是 TRUE,但在 BigQuery 中是 FALSE。Teradata 也提供
NOT CASESPECIFIC 資料欄屬性,指示 Teradata 在比較兩個字串時忽略大小寫。BigQuery 在比較字串時一律會區分大小寫。舉例來說,'xYz' = 'xyz' 在 Teradata 中是 TRUE,但在 BigQuery 中是 FALSE。 |
exp LE exp2 |
exp <= exp2 |
|
exp LT exp2 |
exp < exp2 |
|
exp NE exp2 |
exp <> exp2
|
|
exp GE exp2 |
exp >= exp2 |
|
exp GT exp2 |
exp > exp2 |
JOIN 個條件
BigQuery 和 Teradata 支援相同的 JOIN、ON 和 USING 條件。下表列出細微差異。
| Teradata | BigQuery | 附註 |
|---|---|---|
FROM A JOIN B ON
A.date > B.start_date AND A.date < B.end_date
|
FROM A LEFT OUTER JOIN B ON A.date > B.start_date AND A.date < B.end_date
|
BigQuery 支援所有內部 join 的不等式 JOIN 子句,或至少提供一個等式條件 (=)。但不能在 OUTER JOIN 中只提供一個不等式條件 (= 和 <)。這類結構有時會用於查詢日期或整數範圍。
BigQuery 會防止使用者不小心建立大型 cross join。 |
FROM A, B ON A.id = B.id
|
FROM A JOIN B ON A.id = B.id
|
在 Teradata 中,資料表之間使用逗號等同於 INNER JOIN,而在 BigQuery 中則等同於 CROSS JOIN (笛卡兒乘積)。由於 BigQuery
舊版 SQL 會將逗號視為 UNION,因此建議您明確指定作業,以免混淆。
|
FROM A JOIN B ON
(COALESCE(A.id , 0) = COALESCE(B.id, 0))
|
FROM A JOIN B ON
(COALESCE(A.id , 0) = COALESCE(B.id, 0))
|
純量 (常數) 函式沒有差異。 |
FROM A JOIN B ON
A.id = (SELECT MAX(B.id) FROM B)
|
FROM A JOIN (SELECT MAX(B.id) FROM B)
B1 ON A.id = B1.id
|
BigQuery 會禁止使用者在 join 述詞中使用子查詢、關聯子查詢或匯總。這樣 BigQuery 就能平行處理查詢。 |
類型轉換和轉型
BigQuery 的資料類型比 Teradata 少,但範圍更廣,因此 BigQuery 在轉換資料類型時必須更嚴格。
| Teradata | BigQuery | 附註 |
|---|---|---|
exp EQ exp2exp IN (exp2, exp3)
|
exp = exp2exp IN (exp2, exp3)如要保留 NOT CASESPECIFIC 的非 ANSI 語意,可以使用 RTRIM(UPPER(exp)) = RTRIM(UPPER(exp2))
|
比較字串是否相等時,Teradata「可能」會忽略結尾空白字元,而 BigQuery 則會將其視為字串的一部分。舉例來說,'xyz'=' xyz' 在 Teradata 中是 TRUE,但在 BigQuery 中是 FALSE。Teradata 也提供
NOT CASESPECIFIC 資料欄屬性,指示 Teradata 在比較兩個字串時忽略大小寫。BigQuery 在比較字串時一律會區分大小寫。舉例來說,'xYz' = 'xyz' 在 Teradata 中是 TRUE,但在 BigQuery 中是 FALSE。 |
CAST(long_varchar_column AS CHAR(6))
|
LPAD(long_varchar_column, 6)
|
在 Teradata 中,轉換字元欄有時會做為非標準且非最佳的方式,用來建立填補的子字串。 |
CAST(92617 AS TIME)
92617 (FORMAT '99:99:99')
|
PARSE_TIME("%k%M%S", CAST(92617 AS STRING)) |
Teradata 執行的隱含類型轉換和捨入作業比 BigQuery 多,後者通常較嚴格,且會強制執行 ANSI 標準。 (這個範例會傳回 09:26:17) |
CAST(48.5 (FORMAT 'zz') AS FLOAT)
|
CAST(SUBSTR(CAST(48.5 AS STRING), 0, 2) AS FLOAT64) |
浮點和數值資料類型在套用貨幣等格式時,可能需要特殊的四捨五入規則。
(這個範例會傳回 48) |
將「FLOAT」/「DECIMAL」投放到「INT」
Teradata 使用高斯和銀行家演算法來四捨五入數值,BigQuery 則使用 ROUND_HALF_EVEN RoundingMode:
round(CAST(2.5 as Numeric),0, 'ROUND_HALF_EVEN')
將 STRING 轉換為 NUMERIC 或 BIGNUMERIC
從 STRING 轉換為數值時,請根據 STRING 值的小數位數,使用正確的資料類型 (NUMERIC 或 BIGNUMERIC)。
如要進一步瞭解 BigQuery 支援的數值精確度和規模,請參閱「十進位類型」。
另請參閱比較運算子和資料欄格式。比較和資料欄格式設定的行為可能類似類型轉換。
QUALIFY,ROWS 個子句
Teradata 中的 QUALIFY 子句可讓您篩選視窗函式的結果。或者,您也可以使用 ROWS 詞組執行相同工作。這些函式的運作方式類似於 GROUP 子句的 HAVING 條件,可限制 BigQuery 中視窗函式的輸出內容。
| Teradata | BigQuery |
|---|---|
SELECT col1, col2
|
Teradata QUALIFY 子句搭配 ROW_NUMBER()、SUM()、COUNT() 等視窗函式,以及 OVER PARTITION BY,在 BigQuery 中會表示為包含數據分析值的子查詢上的 WHERE 子句。使用 ROW_NUMBER():SELECT col1, col2 使用支援較大分區的 ARRAY_AGG:
SELECT
|
SELECT col1, col2
|
SELECT col1, col2在 BigQuery 中, RANGE 和 ROWS 都能用於視窗框架子句。不過,視窗子句只能與 AVG() 等視窗函式搭配使用,不能與 ROW_NUMBER() 等編號函式搭配使用。 |
SELECT col1, col2
|
SELECT col1, |
NORMALIZE 關鍵字
Teradata 為 SELECT 子句提供 NORMALIZE 關鍵字,可將重疊的期間或間隔合併為涵蓋所有個別期間值的單一期間或間隔。
BigQuery 不支援 PERIOD 類型,因此 Teradata 中的任何 PERIOD 類型資料欄都必須插入 BigQuery,做為兩個獨立的 DATE 或 DATETIME 欄位,分別對應至期間的開始和結束。
| Teradata | BigQuery |
|---|---|
SELECT NORMALIZE
|
SELECT
|
函式
下列各節列出 Teradata 函式與 BigQuery 對等函式之間的對應關係。
匯總函式
下表列出常見的 Teradata 匯總、統計匯總和近似匯總函式,以及對應的 BigQuery 函式。BigQuery 提供下列額外的匯總函式:
ANY_VALUEAPPROX_COUNT_DISTINCTAPPROX_QUANTILESAPPROX_TOP_COUNTAPPROX_TOP_SUMCOUNTIFLOGICAL_ANDLOGICAL_ORSTRING_AGG
| Teradata | BigQuery |
|---|---|
AVG |
AVG注意:BigQuery 在計算 INT 值的平均值時,會提供近似結果。
|
BITAND |
BIT_AND |
BITNOT |
位元 not 運算子 (~) |
BITOR |
BIT_OR |
BITXOR |
BIT_XOR |
CORR |
CORR |
COUNT |
COUNT |
COVAR_POP |
COVAR_POP |
COVAR_SAMP |
COVAR_SAMP |
MAX |
MAX |
MIN |
MIN |
REGR_AVGX |
AVG( |
REGR_AVGY |
AVG( |
REGR_COUNT |
SUM( |
REGR_INTERCEPT |
AVG(dep_var_expression) - AVG(ind_var_expression) *
(COVAR_SAMP(ind_var_expression,
|
REGR_R2 |
(COUNT(dep_var_expression)* |
REGR_SLOPE |
- COVAR_SAMP(ind_var_expression, |
REGR_SXX |
SUM(POWER(ind_var_expression, 2)) -
COUNT(ind_var_expression) * |
REGR_SXY |
SUM(ind_var_expression * dep_var_expression) -
COUNT(ind_var_expression) |
REGR_SYY |
SUM(POWER(dep_var_expression, 2)) -
COUNT(dep_var_expression) |
SKEW |
自訂 user-defined function。 |
STDDEV_POP |
STDDEV_POP |
STDDEV_SAMP |
STDDEV_SAMP,
STDDEV |
SUM |
SUM |
VAR_POP |
VAR_POP |
VAR_SAMP |
VAR_SAMP,
VARIANCE |
分析函式和 window 函式
下表列出常見的 Teradata 分析和匯總分析函式,以及對應的 BigQuery 視窗函式。BigQuery 提供下列額外函式:
日期/時間函式
下表列出常見的 Teradata 日期/時間函式,以及對應的 BigQuery 函式。BigQuery 提供下列額外的日期/時間函式:
CURRENT_DATETIMEDATE_ADDDATE_DIFFDATE_FROM_UNIX_DATEDATE_SUBDATE_TRUNCDATETIMEDATETIME_ADDDATETIME_DIFFDATETIME_SUBDATETIME_TRUNCPARSE_DATEPARSE_DATETIMEPARSE_TIMEPARSE_TIMESTAMPSTRINGTIMETIME_ADDTIME_DIFFTIME_SUBTIME_TRUNCTIMESTAMPTIMESTAMP_ADDTIMESTAMP_DIFFTIMESTAMP_MICROSTIMESTAMP_MILLISTIMESTAMP_SECONDSTIMESTAMP_SUBTIMESTAMP_TRUNCUNIX_DATEUNIX_MICROSUNIX_MILLISUNIX_SECONDS
| Teradata | BigQuery |
|---|---|
ADD_MONTHS |
DATE_ADD,
TIMESTAMP_ADD
|
CURRENT_DATE |
CURRENT_DATE
|
CURRENT_TIME |
CURRENT_TIME
|
CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP
|
DATE + k |
DATE_ADD(date_expression,
INTERVAL k DAY)
|
DATE - k |
DATE_SUB(date_expression,
INTERVAL k DAY)
|
EXTRACT |
EXTRACT(DATE),
EXTRACT(TIMESTAMP)
|
FORMAT_DATE
|
|
FORMAT_DATETIME
|
|
FORMAT_TIME
|
|
FORMAT_TIMESTAMP
|
|
LAST_DAY |
LAST_DAY
注意:這項函式支援 DATE 和 DATETIME 輸入運算式。
|
MONTHS_BETWEEN |
DATE_DIFF(date_expression, date_expression, MONTH)
|
NEXT_DAY |
DATE_ADD( |
OADD_MONTHS |
DATE_SUB( |
td_day_of_month |
EXTRACT(DAY FROM date_expression) |
td_day_of_week |
EXTRACT(DAYOFWEEK FROM date_expression) |
td_day_of_year |
EXTRACT(DAYOFYEAR FROM date_expression) |
td_friday |
DATE_TRUNC( |
td_monday |
DATE_TRUNC( |
td_month_begin |
DATE_TRUNC(date_expression, MONTH)
|
td_month_end |
DATE_SUB( |
td_month_of_calendar |
(EXTRACT(YEAR FROM date_expression) - 1900) * 12 + EXTRACT(MONTH FROM date_expression)
|
td_month_of_quarter |
EXTRACT(MONTH FROM date_expression) |
td_month_of_year |
EXTRACT(MONTH FROM date_expression) |
td_quarter_begin |
DATE_TRUNC(date_expression, QUARTER)
|
td_quarter_end |
DATE_SUB( |
td_quarter_of_calendar |
(EXTRACT(YEAR FROM date_expression) |
td_quarter_of_year |
EXTRACT(QUARTER FROM date_expression) |
td_saturday |
DATE_TRUNC( |
td_sunday |
DATE_TRUNC( |
td_thursday |
DATE_TRUNC( |
td_tuesday |
DATE_TRUNC( |
td_wednesday |
DATE_TRUNC( |
td_week_begin |
DATE_TRUNC(date_expression, WEEK)
|
td_week_end |
DATE_SUB( |
td_week_of_calendar |
(EXTRACT(YEAR FROM date_expression) - 1900) * 52 + EXTRACT(WEEK FROM date_expression)
|
td_week_of_month |
EXTRACT(WEEK FROM date_expression) |
td_week_of_year |
EXTRACT(WEEK FROM date_expression) |
td_weekday_of_month |
CAST( |
td_year_begin |
DATE_TRUNC(date_expression, YEAR)
|
td_year_end |
DATE_SUB( |
td_year_of_calendar |
EXTRACT(YEAR FROM date_expression)
|
TO_DATE |
PARSE_DATE
|
TO_TIMESTAMP |
PARSE_TIMESTAMP
|
TO_TIMESTAMP_TZ |
PARSE_TIMESTAMP
|
字串函式
下表列出 Teradata 字串函式與 BigQuery 對等函式的對應關係。BigQuery 提供下列額外的字串函式:
BYTE_LENGTHCODE_POINTS_TO_BYTESENDS_WITHFROM_BASE32FROM_BASE64FROM_HEXNORMALIZENORMALIZE_AND_CASEFOLDREGEXP_CONTAINSREGEXP_EXTRACTREGEXP_EXTRACT_ALLREPEATREPLACESAFE_CONVERT_BYTES_TO_STRINGSPLITSTARTS_WITHSTRPOSTO_BASE32TO_BASE64TO_CODE_POINTSTO_HEX
| Teradata | BigQuery |
|---|---|
ASCII |
TO_CODE_POINTS(string_expression)[OFFSET(0)]
|
CHAR2HEXINT |
TO_HEX
|
CHARACTER LENGTH |
CHAR_LENGTH
|
CHARACTER LENGTH |
CHARACTER_LENGTH
|
CHR |
CODE_POINTS_TO_STRING( |
CONCAT, (|| operator) |
CONCAT, (|| operator)
|
CSV |
自訂 user-defined function。 |
CSVLD |
自訂 user-defined function。 |
FORMAT |
FORMAT
|
INDEX |
STRPOS(string, substring)
|
INITCAP |
INITCAP |
INSTR |
自訂 user-defined function。 |
LEFT |
SUBSTR(source_string, 1, length)
|
LENGTH |
LENGTH
|
LOWER |
LOWER
|
LPAD |
LPAD
|
LTRIM |
LTRIM
|
NGRAM |
自訂 user-defined function。 |
NVP |
自訂 user-defined function。 |
OREPLACE |
REPLACE
|
OTRANSLATE |
自訂 user-defined function。 |
POSITION |
STRPOS(string, substring)
|
REGEXP_INSTR |
STRPOS(source_string,注意:傳回第一個出現的值。 |
REGEXP_REPLACE |
REGEXP_REPLACE |
REGEXP_SIMILAR |
IF(REGEXP_CONTAINS,1,0) |
REGEXP_SUBSTR |
REGEXP_EXTRACT, |
REGEXP_SPLIT_TO_TABLE |
自訂 user-defined function。 |
REVERSE |
REVERSE
|
RIGHT |
SUBSTR(source_string, -1, length)
|
RPAD |
RPAD
|
RTRIM |
RTRIM
|
STRTOK注意:分隔符號字串引數中的每個字元都會視為獨立的分隔符號字元。預設分隔符號為空格字元。 |
SPLIT(instring, delimiter)[ORDINAL(tokennum)]注意:整個 delimiter 字串引數會做為單一分隔符號使用。預設分隔符號為半形逗號。 |
STRTOK_SPLIT_TO_TABLE |
自訂 user-defined function |
SUBSTRING、SUBSTR |
SUBSTR
|
TRIM |
TRIM
|
UPPER |
UPPER
|
數學函式
下表列出 Teradata 數學函式與 BigQuery 對等函式的對應關係。BigQuery 提供下列額外的數學函式:
| Teradata | BigQuery |
|---|---|
ABS |
ABS |
ACOS |
ACOS |
ACOSH |
ACOSH |
ASIN |
ASIN |
ASINH |
ASINH |
ATAN |
ATAN |
ATAN2 |
ATAN2 |
ATANH |
ATANH |
CEILING |
CEIL |
CEILING |
CEILING |
COS |
COS |
COSH |
COSH |
EXP |
EXP |
FLOOR |
FLOOR |
GREATEST |
GREATEST |
LEAST |
LEAST |
LN |
LN |
LOG |
LOG |
MOD (% 運算子) |
MOD |
NULLIFZERO |
NULLIF(expression, 0) |
POWER (** 運算子) |
POWER,
POW
|
RANDOM |
RAND |
ROUND |
ROUND |
SIGN |
SIGN |
SIN |
SIN |
SINH |
SINH |
SQRT |
SQRT |
TAN |
TAN |
TANH |
TANH |
TRUNC |
TRUNC |
ZEROIFNULL |
IFNULL(expression, 0),
COALESCE(expression, 0)
|
Rounding 函式
Teradata 使用高斯和銀行家演算法來四捨五入數值,BigQuery 則使用 ROUND_HALF_EVEN RoundingMode:
-- Teradata syntax
round(3.45,1)
-- BigQuery syntax
round(CAST(3.45 as Numeric),1, 'ROUND_HALF_EVEN')
DML 語法
本節說明 Teradata 和 BigQuery 之間資料管理語言語法的差異。
INSERT 陳述式
大多數 Teradata INSERT 陳述式都與 BigQuery 相容。下表列出例外狀況。
BigQuery 中的 DML 指令碼與 Teradata 中的對等陳述式,在一致性語意上略有不同。如要瞭解快照隔離、工作階段和交易處理,請參閱本文其他部分的「CREATE INDEX」一節。
| Teradata | BigQuery |
|---|---|
INSERT INTO table VALUES (...);
|
INSERT INTO
table (...) VALUES (...);Teradata 為不可為空值的資料欄提供 DEFAULT 關鍵字。注意:在 BigQuery 中,只有在目標資料表所有資料欄的值,都依序號位置遞增排序時,才能在 INSERT 陳述式中省略資料欄名稱。 |
INSERT INTO table VALUES (1,2,3);
|
INSERT INTO
table VALUES (1,2,3),
Teradata 有多重陳述式要求 (MSR) 的概念,可一次傳送多個 INSERT 陳述式。在 BigQuery 中,由於陳述式之間有隱含交易邊界,因此不建議這麼做。請改用多值
INSERT。BigQuery 允許並行 INSERT 陳述式,但可能會將 UPDATE 排入佇列。
如要提升成效,建議採取下列做法: |
UPDATE 陳述式
除了下列項目外,大多數 Teradata UPDATE 陳述式都與 BigQuery 相容:
- 使用
FROM子句時,Teradata 和 BigQuery 中的FROM和SET子句順序會顛倒。 - 在 GoogleSQL 中,每個
UPDATE陳述式都必須包含WHERE關鍵字,後面接著條件。如要更新資料表中的所有資料列,請使用WHERE true。
最佳做法是將多個 DML 異動分組,而非使用單一 UPDATE 和 INSERT 陳述式。BigQuery 中的 DML 指令碼與 Teradata 中的對等陳述式,一致性語意略有不同。如要概略瞭解快照隔離、工作階段和交易處理,請參閱本文其他部分的 CREATE INDEX 區段。
下表列出 Teradata UPDATE 陳述式和 BigQuery 陳述式,兩者可完成相同工作。
如要進一步瞭解 BigQuery 中的 UPDATE,請參閱 DML 說明文件中的 BigQuery UPDATE 範例。
| Teradata | BigQuery | |
|---|---|---|
UPDATE table_A
|
UPDATE table_A
|
|
UPDATE table alias
|
UPDATE table
|
|
UPDATE table_A
|
UPDATE table_A
|
DELETE 和 TRUNCATE 陳述式
DELETE 和 TRUNCATE 陳述式都是支援的方法,可從資料表中移除資料列,而不會影響資料表結構定義或索引。TRUNCATE 會刪除所有資料,DELETE 則會從資料表中移除所選資料列。
在 BigQuery 中,DELETE 陳述式必須包含 WHERE 子句。如要刪除資料表中的所有資料列 (截斷),請使用 WHERE true。如要加快大型資料表的截斷作業,建議使用 CREATE OR REPLACE TABLE ... AS SELECT 陳述式,在同一個資料表上使用 LIMIT 0 來取代自身。不過,使用時請務必手動新增分區和分群資訊。
Teradata 稍後會清理已刪除的資料列。這表示 DELETE 作業一開始會比在 BigQuery 中更快,但之後會需要資源,尤其是影響資料表大部分內容的大規模 DELETE 作業。如要在 BigQuery 中使用類似方法,建議您減少 DELETE 作業數量,例如將不刪除的資料列複製到新資料表。或者,您也可以移除整個分區。這兩種選項的設計都比原子 DML 異動更快。
如要進一步瞭解 BigQuery 中的 DELETE,請參閱 DML 說明文件中的「DELETE 範例」。
| Teradata | BigQuery |
|---|---|
BEGIN TRANSACTION;
|
以查詢輸出內容取代資料表內容,相當於一筆交易。您可以使用查詢作業或複製作業來執行這項操作。 使用查詢作業:
bq query --replace --destination_table table_A 'SELECT * FROM table_B';
使用複製作業: bq cp -f table_A table_B |
DELETE database.table ALL; |
DELETE FROM table WHERE TRUE;如果表格非常大,可以採用更快速的方法: CREATE OR REPLACE table AS SELECT * FROM table LIMIT 0;
|
MERGE 陳述式
MERGE 陳述式可將 INSERT、UPDATE 和 DELETE 作業合併為單一「upsert」陳述式,並以不可分割的方式執行作業。MERGE 作業必須為每個目標資料列比對最多一個來源資料列。BigQuery 和 Teradata 都遵循 ANSI 語法。
Teradata 的 MERGE 作業僅限於比對一個存取模組處理器 (AMP) 內的主鍵。相較之下,BigQuery 對 MERGE 作業沒有大小或資料欄限制,因此使用 MERGE 是實用的最佳化做法。不過,如果 MERGE 主要是大量刪除,請參閱本文其他部分的 DELETE 最佳化。
BigQuery 中的 DML 指令碼與 Teradata 中的對等陳述式,在一致性語意上略有不同。舉例來說,Teradata 的 SET 資料表在工作階段模式中,可能會在 MERGE 作業期間忽略重複項目。如要概略瞭解如何處理 MULTISET 和 SET 資料表、快照隔離,以及工作階段和交易處理,請參閱本文件其他部分的 CREATE INDEX 區段。
受影響的資料列變數
在 Teradata 中,ACTIVITY_COUNT 變數是 Teradata ANSI SQL 擴充功能,會填入受 DML 陳述式影響的資料列數量。
指令碼功能中的 @@row_count 系統變數也提供類似功能。在 BigQuery 中,較常見的做法是檢查稽核記錄中的 numDmlAffectedRows 傳回值,或 INFORMATION_SCHEMA 檢視表。
DDL 語法
本節說明 Teradata 和 BigQuery 之間資料定義語言語法的差異。
CREATE TABLE 陳述式
大多數 Teradata CREATE TABLE 陳述式都與 BigQuery 相容,但下列語法元素除外,因為 BigQuery 不會使用這些元素:
MULTISET。請參閱「CREATE INDEX」一節。VOLATILE。請參閱「臨時資料表」一節。[NO] FALLBACK。請參閱「復原」一節。[NO] BEFORE JOURNAL,[NO] AFTER JOURNALCHECKSUM = DEFAULT | valDEFAULT MERGEBLOCKRATIOPRIMARY INDEX (col, ...)。請參閱「CREATE INDEX」一節。UNIQUE PRIMARY INDEX。請參閱「CREATE INDEX」一節。CONSTRAINTDEFAULTIDENTITY
如要進一步瞭解 BigQuery 中的 CREATE TABLE,請參閱 DML 說明文件中的 BigQuery CREATE 範例。
資料欄選項和屬性
BigQuery 不會使用 CREATE TABLE 陳述式的下列資料欄規格:
FORMAT 'format'。請參閱 Teradata 類型格式設定一節。CHARACTER SET name。BigQuery 一律使用 UTF-8 編碼。[NOT] CASESPECIFICCOMPRESS val | (val, ...)
Teradata 透過資料欄 TITLE 選項擴充 ANSI 標準。您也可以在 BigQuery 中使用資料欄說明,實作類似功能,如下表所示。請注意,這個選項不適用於檢視表。
| Teradata | BigQuery |
|---|---|
CREATE TABLE table (
|
CREATE TABLE dataset.table (
|
臨時資料表
Teradata 支援揮發性資料表,通常用於儲存指令碼中的中繼結果。在 BigQuery 中,有幾種方法可以達到類似臨時資料表的效果:
CREATE TEMPORARY TABLE可用於指令碼,且在指令碼生命週期內有效。如果資料表必須在指令碼之外存在,您可以使用這份清單中的其他選項。資料集存留時間:建立存留時間較短 (例如 1 小時) 的資料集,這樣一來,在資料集中建立的任何資料表都只會暫時存在,因為資料表的存留時間不會超過資料集的存留時間。您可以在這個資料集的所有資料表名稱前加上
temp,清楚表示這些資料表是暫時性的。資料表存留時間:使用類似下列的 DDL 陳述式,建立具有資料表專屬短存留時間的資料表:
CREATE TABLE temp.name (col1, col2, ...) OPTIONS(expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));
WITH子句:如果只需要在同一個區塊內使用臨時資料表,請使用WITH陳述式或子查詢,建立臨時結果。這是最有效率的做法。
Teradata 指令碼 (BTEQ) 中常用的模式是建立永久資料表、在其中插入值、在後續陳述式中將其當做暫存資料表使用,然後刪除或截斷資料表。實際上,這會將資料表當做常數變數 (信號) 使用。這種方法在 BigQuery 中效率不彰,建議改用指令碼中的實際變數,或使用 CREATE OR REPLACE 搭配 AS SELECT 查詢語法,建立已包含值的資料表。
CREATE VIEW 陳述式
下表列出 Teradata 和 BigQuery 中 CREATE VIEW 陳述式的對應關係。BigQuery 不需要 LOCKING ROW FOR ACCESS 等資料表鎖定子句。
| Teradata | BigQuery | 附註 |
|---|---|---|
CREATE VIEW view_name AS SELECT ...
|
CREATE VIEW
view_name AS SELECT ...
|
|
REPLACE VIEW view_name AS SELECT ...
|
CREATE OR REPLACE VIEW
|
|
| 不支援 |
CREATE VIEW IF NOT EXISTS
|
只有在指定資料集中目前不存在該檢視表時,才會建立新的檢視表。 |
CREATE [UNIQUE] INDEX 陳述式
Teradata 需要所有資料表的索引,並需要特殊解決方法 (例如 MULTISET 資料表和 NoPI 資料表),才能處理非不重複或非索引資料。
BigQuery 不需要索引。本節說明 BigQuery 的方法,說明如何建立類似於 Teradata 中使用索引的功能,其中有實際的商業邏輯需求。
建立索引以提升效能
BigQuery 是資料欄導向的資料庫,具備查詢和儲存空間最佳化功能,因此不需要明確的索引。BigQuery 提供分區和分群以及巢狀欄位等功能,可最佳化資料儲存方式,進而提升查詢效率和效能。
Teradata 不支援 materialized view。不過,它會使用 CREATE JOIN INDEX 陳述式提供彙整索引,基本上會具體化彙整所需的資料。BigQuery 不需要具體化索引來加快效能,也不需要專用的多工緩衝處理空間來執行 join。
如果是其他最佳化案例,則可使用materialized view。
建立索引以確保一致性 (UNIQUE、PRIMARY INDEX)
在 Teradata 中,不重複索引可用來防止資料表中的資料列含有非不重複索引鍵。如果程序嘗試插入或更新資料,而資料的值已存在於索引中,則作業會因違反索引而失敗 (MULTISET 資料表),或自動忽略該作業 (SET 資料表)。
由於 BigQuery 不提供明確索引,因此可以使用 MERGE 陳述式,只將不重複的記錄從暫存資料表插入目標資料表,同時捨棄重複的記錄。不過,由於 BigQuery 在 INSERT 作業期間不會鎖定,因此無法防止具備編輯權限的使用者插入重複記錄。如要為 BigQuery 中的重複記錄產生錯誤,您可以使用臨時資料表中的 MERGE 陳述式,如以下範例所示。
| Teradata | BigQuery | |
|---|---|---|
CREATE [UNIQUE] INDEX name;
|
MERGE `prototype.FIN_MERGE` t
|
使用者通常會偏好自行移除重複項目,以便找出下游系統中的錯誤。
BigQuery 不支援 DEFAULT 和 IDENTITY (序列) 資料欄。
建立索引以達成鎖定
Teradata 在存取模組處理器 (AMP) 中提供資源;查詢可以耗用所有 AMP、單一 AMP 或群組 AMP 資源。DDL 陳述式全為 AMP,因此類似於全域 DDL 鎖定。BigQuery 沒有這類鎖定機制,可執行並行查詢和 INSERT 陳述式,直到達到配額上限。只有並行 UPDATE DML 陳述式會產生特定並行影響:針對相同分區的 UPDATE 作業會排入佇列,確保快照隔離,因此您不必鎖定,即可防止幻讀或更新遺失。
由於這些差異,BigQuery 不會使用下列 Teradata 元素:
ON COMMIT DELETE ROWS;ON COMMIT PRESERVE ROWS;
程序 SQL 陳述式
本節說明如何將預存程序、函式和觸發條件中使用的程序 SQL 陳述式,從 Teradata 轉換為 BigQuery 指令碼、程序或 user-defined function (UDF)。系統管理員可以使用 INFORMATION_SCHEMA 檢視畫面查看所有這些資訊。
CREATE PROCEDURE 陳述式
BigQuery 指令碼支援預存程序。
在 BigQuery 中,指令碼是指任何使用控制陳述式的情況,而程序則是具名指令碼 (視需要包含引數),可從其他指令碼呼叫,並視需要永久儲存。您也可以使用 JavaScript 撰寫 user-defined function (UDF)。
| Teradata | BigQuery |
|---|---|
CREATE PROCEDURE |
CREATE PROCEDURE
如果需要名稱,否則請使用 BEGIN 內嵌,或使用 CREATE TEMP FUNCTION 單行。
|
REPLACE PROCEDURE |
CREATE OR REPLACE PROCEDURE |
CALL |
CALL |
以下各節說明如何將現有的 Teradata 程序陳述式,轉換為具有類似功能的 BigQuery 指令碼陳述式。
變數宣告和指派
BigQuery 變數在指令碼的生命週期內有效。
| Teradata | BigQuery |
|---|---|
DECLARE |
DECLARE |
SET |
SET |
錯誤狀況處理常式
Teradata 會在程序中使用狀態碼處理常式,以便控制錯誤。在 BigQuery 中,錯誤處理是主要控制流程的核心功能,類似於其他語言提供的 TRY ... CATCH 區塊。
| Teradata | BigQuery |
|---|---|
DECLARE EXIT HANDLER
FOR SQLEXCEPTION |
BEGIN ... EXCEPTION WHEN ERROR THEN |
SIGNAL sqlstate |
RAISE message |
DECLARE CONTINUE HANDLER
FOR SQLSTATE VALUE 23505; |
BigQuery 不會使用針對特定錯誤條件觸發的例外狀況處理常式。 建議使用 ASSERT 陳述式,其中結束條件用於預先檢查或偵錯,因為這符合 ANSI SQL:2011 標準。 |
Teradata 中的 SQLSTATE 變數與 BigQuery 中的 @@error 系統變數類似。在 BigQuery 中,較常見的做法是使用稽核記錄或 INFORMATION_SCHEMA 檢視表調查錯誤。
游標宣告和作業
BigQuery 不支援游標或工作階段,因此 BigQuery 不會使用下列陳述式:
DECLARE cursor_name CURSOR [FOR | WITH] ...PREPARE stmt_id FROM sql_str;OPEN cursor_name [USING var, ...];FETCH cursor_name INTO var, ...;CLOSE cursor_name;
動態 SQL 陳述式
BigQuery 的指令碼功能支援動態 SQL 陳述式,如下表所示。
| Teradata | BigQuery |
|---|---|
EXECUTE IMMEDIATE
sql_str; |
EXECUTE IMMEDIATE
sql_str; |
EXECUTE
stmt_id [USING var,...]; |
EXECUTE IMMEDIATE
stmt_id USING var; |
BigQuery 不會使用下列動態 SQL 陳述式:
PREPARE stmt_id FROM sql_str;
控制流程陳述式
BigQuery 的指令碼功能支援流程控制陳述式,如下表所示。
| Teradata | BigQuery |
|---|---|
IF condition THEN stmts ELSE stmts END IF
|
IF condition THEN stmts ELSE stmts END IF |
label_name: LOOP stmts END LOOP label_name;
|
BigQuery 不會使用 GOTO 樣式的區塊建構。 建議您將這些函式改寫為使用者定義函式 (UDF),或在用於錯誤處理時使用 ASSERT 陳述式。
|
REPEAT stmts UNTIL condition END REPEAT;
|
WHILE condition DO stmts END WHILE |
LEAVE outer_proc_label;
|
LEAVE 不會用於 GOTO 樣式的區塊,而是做為 BREAK 的同義詞,用於離開 WHILE 迴圈。 |
LEAVE label;
|
LEAVE 不會用於 GOTO 樣式的區塊,而是做為 BREAK 的同義詞,用於離開 WHILE 迴圈。 |
WITH RECURSIVE temp_table AS ( ... );
|
BigQuery 不會使用遞迴查詢 (也稱為遞迴一般資料表運算式 (CTE))。您可以使用 UNION ALL 陣列重寫。 |
BigQuery 不使用游標或工作階段,因此不會使用下列控制流程陳述式:
中繼資料和交易 SQL 陳述式
| Teradata | BigQuery |
|---|---|
HELP TABLE table_name;
HELP VIEW view_name;
|
SELECT您也可以使用相同查詢,取得檢視表的資料欄資訊。 詳情請參閱 BigQuery INFORMATION_SCHEMA 中的資料欄檢視畫面。 |
SELECT * FROM dbc.tables WHERE tablekind = 'T';(Teradata DBC 檢視表) |
SELECT詳情請參閱「BigQuery INFORMATION_SCHEMA 簡介」。 |
HELP STATISTICS table_name; |
APPROX_COUNT_DISTINCT(col) |
COLLECT STATS USING SAMPLE ON table_name column (...); |
不適用於 BigQuery。 |
LOCKING TABLE table_name FOR EXCLUSIVE; |
BigQuery 一律使用快照隔離。詳情請參閱本文件其他部分的「一致性保證」。 |
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ... |
BigQuery 一律使用快照隔離。詳情請參閱本文件其他部分的一致性保證。 |
BEGIN TRANSACTION; |
BigQuery 一律使用快照隔離。詳情請參閱本文件其他部分的一致性保證。 |
EXPLAIN ... |
不適用於 BigQuery。 類似的功能包括 BigQuery 網頁版 UI 中的查詢計畫說明,以及 INFORMATION_SCHEMA 檢視畫面和 Cloud Monitoring 稽核記錄中顯示的運算單元分配情形。 |
BEGIN TRANSACTION; |
BEGIN |
多陳述式和多行 SQL 陳述式
Teradata 和 BigQuery 都支援交易 (工作階段),因此支援以分號分隔、一律一起執行的陳述式。詳情請參閱「多陳述式交易」。
錯誤代碼和訊息
Teradata 錯誤代碼和 BigQuery 錯誤代碼不同。BigQuery 提供 REST API,主要依賴 HTTP 狀態碼和詳細錯誤訊息。
如果應用程式邏輯目前會擷取下列錯誤,請嘗試消除錯誤來源,因為 BigQuery 不會傳回相同的錯誤代碼。
SQLSTATE = '02000'-「找不到資料列」SQLSTATE = '21000'-「Cardinality violation (Unique Index)」SQLSTATE = '22000'-「資料違規 (資料類型)」SQLSTATE = '23000'-「Constraint Violation」
在 BigQuery 中,較常見的做法是使用 INFORMATION_SCHEMA 檢視表或稽核記錄,深入探究錯誤。
如要瞭解如何處理指令碼錯誤,請參閱下列各節。
一致性保證和交易隔離
Teradata 和 BigQuery 都具備不可分割性,也就是在多個資料列的每個異動層級都符合 ACID 標準。舉例來說,MERGE 作業完全是不可分割的,即使插入及更新多個值也一樣。
交易
在工作階段模式 (而非自動提交模式) 下執行時,Teradata 會提供「讀取未提交」(允許髒讀) 或「可序列化」交易隔離等級。在最佳情況下,Teradata 會對所有分區中所有資料列的所有資料欄,使用悲觀鎖定機制鎖定資料列雜湊,藉此達到嚴格的可序列化隔離。可能會發生死結。DDL 一律會強制執行交易邊界。Teradata Fastload 工作會獨立執行,但只能在空白資料表上執行。
BigQuery 也支援交易。BigQuery 透過快照隔離確保開放式並行控制 (先提交者優先),其中查詢會讀取查詢開始前最後提交的資料。這種做法可確保每個資料列、每個異動,以及同一 DML 陳述式中的各個資料列都有一致性,同時避免死結。如果對同一個資料表有多個 UPDATE 陳述式,BigQuery 會切換至悲觀並行控制,並將多個 UPDATE 陳述式排入佇列,在發生衝突時自動重試。INSERT DML 陳述式和載入工作可並行且獨立執行,將資料附加至資料表。
復原
Teradata 支援兩種工作階段復原模式:ANSI 工作階段模式和 Teradata 工作階段模式 (SET SESSION CHARACTERISTICS 和 SET SESSION TRANSACTION),視您要使用的復原模式而定。如果失敗,交易可能不會復原。
BigQuery 支援 ROLLBACK TRANSACTION 陳述式。BigQuery 中沒有 ABORT 陳述式。
資料庫限制
請務必查看 BigQuery 公開說明文件 ,瞭解最新的配額和限制。如需提高用量,請與 Cloud 支援團隊聯絡。下表比較 Teradata 和 BigQuery 資料庫的限制。
| 限制 | Teradata | BigQuery |
|---|---|---|
| 每個資料庫的資料表數 | 未限制 | 未限制 |
| 每個資料表的欄數 | 2,048 | 10,000 |
| 資料列大小上限 | 1 MB | 100 MB |
| 欄名稱長度 | 128 個 Unicode 字元 | 300 個 Unicode 字元 |
| 資料表說明長度 | 128 個 Unicode 字元 | 16,384 個 Unicode 字元 |
| 每個資料表的資料列數 | 無限制 | 無限制 |
| SQL 要求長度上限 | 1 MB | 1 MB (未解析 GoogleSQL 查詢長度上限) 12 MB (已解析舊版和 GoogleSQL 查詢長度上限) 串流:
|
| 要求和回應大小上限 | 7 MB (要求),16 MB (回應) | 10 MB (要求) 和 10 GB (回應),如果使用分頁或 Cloud Storage API,則幾乎沒有限制。 |
| 並行工作階段數量上限 | 每個剖析引擎 (PE) 120 個 | 1,000 項並行多重陳述式查詢 (可透過預留運算單元提高),每位使用者 300 項並行 API 要求。 |
| 並行 (快速) 載入數量上限 | 30 (預設為 5) | 沒有並行限制,工作會排入佇列。每項專案每天 100,000 項載入工作。 |