Amazon Redshift SQL 转换指南
本文档详细介绍了 Amazon Redshift 和 BigQuery 在 SQL 语法方面的异同,以帮助您规划迁移。使用批量 SQL 转换来批量迁移 SQL 脚本,或使用交互式 SQL 转换来转换临时查询。
本指南的目标受众是企业架构师、数据库管理员、应用开发者和 IT 安全专家。此外,还假设您熟悉 Amazon Redshift。
数据类型
本部分介绍了 Amazon Redshift 和 BigQuery 中的数据类型之间的等效项。
Amazon Redshift | BigQuery | 备注 | |
---|---|---|---|
数据类型 | 别名 | 数据类型 | |
SMALLINT |
INT2 |
INT64 |
Amazon Redshift 的 SMALLINT 为 2 个字节,而 BigQuery 的 INT64 为 8 个字节。 |
INTEGER |
INT64 |
Amazon Redshift 的 INTEGER 为 4 个字节,而 BigQuery 的 INT64 为 8 个字节。 |
|
BIGINT |
INT8 |
INT64 |
Amazon Redshift 的 BIGINT 和 BigQuery 的 INT64 均为 8 个字节。 |
DECIMAL |
NUMERIC |
NUMERIC |
|
REAL |
FLOAT4 |
FLOAT64 |
Amazon Redshift 的 REAL 为 4 个字节,而 BigQuery 的 FLOAT64 为 8 个字节。 |
DOUBLE
PRECISION |
FLOAT64 |
||
BOOLEAN |
BOOL |
BOOL |
Amazon Redshift 的 BOOLEAN 可以使用 TRUE 、t 、true 、y 、yes 和 1 作为 true 的有效字面量值。BigQuery 的 BOOL 数据类型使用不区分大小写的 TRUE 。 |
CHAR |
STRING |
||
VARCHAR |
STRING |
||
DATE |
DATE |
||
TIMESTAMP |
TIMESTAMP WITHOUT TIME ZONE |
DATETIME |
|
TIMESTAMPTZ |
TIMESTAMP |
注意:在 BigQuery 中,当解析时间戳或设置时间戳格式以用于显示时,系统会使用时区。字符串格式的时间戳可能包含时区,但当 BigQuery 解析字符串时,会采用等效的世界协调时间 (UTC) 存储该时间戳。如果未明确指定时区,则系统会使用默认时区,即世界协调时间 (UTC)。支持时区名称或使用 (-|+)HH:MM 表示相对于世界协调时间 (UTC) 的偏移量,但不支持时区缩写(如 PDT)。 | |
GEOMETRY |
GEOGRAPHY |
支持查询地理空间数据。 |
BigQuery 还具有以下数据类型,这些数据类型没有直接的 Amazon Redshift 模拟:
隐式转换类型
迁移到 BigQuery 时,您需要将大多数 Amazon Redshift 隐式转换转换为 BigQuery 的显式转换,但 BigQuery 隐式转换的以下数据类型除外。
BigQuery 会对以下数据类型执行隐式转换:
从 BigQuery 类型 | 到 BigQuery 类型 |
---|---|
|
|
|
|
|
|
BigQuery 还会对以下字面量执行隐式转换:
从 BigQuery 类型 | 到 BigQuery 类型 |
---|---|
STRING 字面量(例如“2008-12-25”) |
|
STRING 字面量(例如“2008-12-25 15:30:00”) |
|
STRING 字面量(例如“2008-12-25T07:30:00”) |
|
STRING 字面量(例如“15:30:00”) |
|
显式转换类型
您可以使用 BigQuery 的 CAST(expression AS type)
函数或任何 DATE
和 TIMESTAMP
转换函数来转换 BigQuery 不会隐式转换的 Amazon Redshift 数据类型。
迁移查询时,请将 Amazon Redshift CONVERT(type, expression)
函数(或 :: 语法)的任何发生实例更改为 BigQuery 的 CAST(expression AS type)
函数,如 数据类型格式设置函数部分中的表所示。
查询语法
本部分介绍了 Amazon Redshift 和 BigQuery 在查询语法方面的差异。
SELECT
语句
大多数 Amazon Redshift SELECT
语句都与 BigQuery 兼容。下表列出了一些细微差异。
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
BigQuery 还支持 SELECT
语句中的以下表达式,这些表达式没有 Amazon Redshift 等效项:
FROM
子句
查询中的 FROM
子句会列出要从中选择数据的表引用。在 Amazon Redshift 中,可能的表引用包括表、视图和子查询。BigQuery 支持所有这些表引用。
您可以使用以下语句在 FROM
子句中引用 BigQuery 表:
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery 还支持其他表引用:
- 表定义的历史版本和使用
FOR SYSTEM_TIME AS OF
的行。 - 字段路径,或解析为数据类型中的某字段的任何路径(例如
STRUCT
)。 - 展平数组。
JOIN
类型
Amazon Redshift 和 BigQuery 都支持以下联接类型:
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
和等效的隐式逗号交叉联接。
下表列出了一些细微差异。
Amazon Redshift | BigQuery |
---|---|
|
注意:在 BigQuery 中,除非子句是 CROSS
JOIN 或其中一个联接表是数据类型或数组中的某个字段,否则 JOIN 子句需要 JOIN 条件。 |
WITH
子句
BigQuery WITH
子句包含一个或多个已命名的子查询,当后续 SELECT
语句引用这些子查询时,将执行这些子查询。Amazon Redshift WITH
子句的行为与 BigQuery 相同,不同之处在于您可以计算一次子句并重复使用其结果。
集合运算符
Amazon Redshift 集合运算符与 BigQuery 集合运算符之间存在一些细微差异。但是,Amazon Redshift 中可进行的所有集合运算都在 BigQuery 中可复制。
Amazon Redshift | BigQuery |
---|---|
|
注意:BigQuery 和 Amazon Redshift 都支持 |
|
|
|
|
|
|
|
注意:BigQuery 需要使用英文括号来分隔不同的集合运算。如果重复同一集合运算符,则不需要使用英文括号。 |
ORDER BY
子句
Amazon Redshift ORDER BY
子句与 BigQuery ORDER BY
子句之间存在一些细微差异。
Amazon Redshift | BigQuery |
---|---|
在 Amazon Redshift 中,NULL 默认排在最后(升序)。 |
在 BigQuery 中,NULL 默认排在最前(升序)。 |
|
注意:BigQuery 不使用 LIMIT ALL 语法,但默认情况下 ORDER BY 会对所有行进行排序,从而导致行为与 Amazon Redshift 的 LIMIT ALL 子句相同。我们强烈建议您在每个 ORDER BY 子句中添加 LIMIT 字句。对所有结果行进行排序会降低查询执行性能,但这并非必要。 |
|
注意:在 BigQuery 中, OFFSET 必须与 LIMIT count 结合使用。请务必将 count INT64 值设置为所需的已排序行数的下限。对所有结果行进行排序 会不必要地降低查询执行性能。 |
条件
下表展示了 Amazon Redshift 条件或谓词,它们是 Amazon Redshift 所特有的,必须转换为其 BigQuery 等效项。
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
|
注意:BigQuery 不支持自定义转义字符。您必须将两个反斜杠 \\ 用作 BigQuery 的转义字符。 |
|
注意:如果指定了 NOT ,请将上述 IF 表达式封装在 NOT 表达式中,如下所示:
|
|
|
函数
以下部分列出了 Amazon Redshift 函数及其 BigQuery 等效项。
聚合函数
下表展示了常见的 Amazon Redshift 聚合、聚合分析和近似聚合函数与其 BigQuery 等效项之间的映射。
Amazon Redshift | BigQuery |
---|---|
APPROXIMATE
COUNT(DISTINCT expression) |
APPROX_COUNT_DISTINCT(expression) |
APPROXIMATE
PERCENTILE_DISC( |
APPROX_QUANTILES(expression,
100) |
AVG([DISTINCT] expression) |
AVG([DISTINCT] expression) |
COUNT(expression) |
COUNT(expression) |
LISTAGG( |
STRING_AGG( |
MAX(expression) |
MAX(expression) |
MEDIAN(median_expression) |
PERCENTILE_CONT( median_expression, 0.5
) OVER() |
MIN(expression) |
MIN(expression) |
PERCENTILE_CONT( |
PERCENTILE_CONT( 注意:不包含聚合用例。 |
STDDEV([DISTINCT] expression) |
STDDEV([DISTINCT] expression) |
STDDEV_SAMP([DISTINCT] expression) |
STDDEV_SAMP([DISTINCT] expression) |
STDDEV_POP([DISTINCT] expression) |
STDDEV_POP([DISTINCT] expression) |
SUM([DISTINCT] expression) |
SUM([DISTINCT] expression) |
VARIANCE([DISTINCT] expression) |
VARIANCE([DISTINCT] expression) |
VAR_SAMP([DISTINCT] expression) |
VAR_SAMP([DISTINCT] expression) |
VAR_POP([DISTINCT] expression) |
VAR_POP([DISTINCT] expression) |
BigQuery 还提供以下聚合、聚合分析和近似聚合函数,这些函数在 Amazon Redshift 中没有直接模拟:
ANY_VALUE
APPROX_TOP_COUNT
APPROX_TOP_SUM
ARRAY_AGG
ARRAY_CONCAT_AGG
COUNTIF
CORR
COVAR_POP
COVAR_SAMP
按位聚合函数
下表展示了常见的 Amazon Redshift 按位聚合函数与其 BigQuery 等效项之间的映射。
Amazon Redshift | BigQuery |
---|---|
BIT_AND(expression) |
BIT_ADD(expression) |
BIT_OR(expression) |
BIT_OR(expression) |
BOOL_AND>(expression) |
LOGICAL_AND(expression) |
BOOL_OR(expression) |
LOGICAL_OR(expression) |
BigQuery 还提供以下按位聚合函数,该函数在 Amazon Redshift 中没有直接模拟:
窗口函数
下表展示了常见的 Amazon Redshift 窗口函数与其 BigQuery 等效项之间的映射。BigQuery 中的窗口函数包括分析聚合函数、聚合函数、导航函数和编号函数。
Amazon Redshift | BigQuery |
---|---|
AVG(expression) OVER |
AVG(expression) OVER |
COUNT(expression) OVER |
COUNT(expression) OVER |
CUME_DIST() OVER |
CUME_DIST() OVER |
DENSE_RANK() OVER |
DENSE_RANK() OVER |
FIRST_VALUE(expression)
OVER |
FIRST_VALUE(expression)
OVER |
LAST_VALUE(expression) OVER |
LAST_VALUE(expression) OVER |
LAG(value_expr [, offset])
OVER |
LAG(value_expr [, offset])
OVER |
LEAD(value_expr [, offset])
OVER |
LEAD(value_expr [, offset])
OVER |
LISTAGG( |
STRING_AGG( |
MAX(expression) OVER |
MAX(expression) OVER |
MEDIAN(median_expression)
OVER |
PERCENTILE_CONT( |
MIN(expression) OVER |
MIN(expression) OVER |
NTH_VALUE(expression,
offset) OVER (
[PARTITION BY window_partition] [ORDER BY window_ordering
frame_clause]
) |
NTH_VALUE(expression,
offset) OVER |
NTILE(expr) OVER |
NTILE(expr) OVER |
PERCENT_RANK() OVER |
PERCENT_RANK() OVER |
PERCENTILE_CONT(percentile)
|
PERCENTILE_CONT(expr,
percentile) OVER |
PERCENTILE_DISC(percentile)
WITHIN GROUP (ORDER BY expr) OVER |
PERCENTILE_DISC(expr,
percentile) OVER |
RANK() OVER |
RANK() OVER |
RATIO_TO_REPORT(ratio_expression)
OVER |
ratio_expression SUM(ratio_expression) OVER |
ROW_NUMBER() OVER |
ROW_NUMBER() OVER |
STDDEV(expression) OVER |
STDDEV(expression) OVER |
STDDEV_SAMP(expression)
OVER |
STDDEV_SAMP(expression)
OVER |
STDDEV_POP(expression) OVER |
STDDEV_POP(expression) OVER |
SUM(expression) OVER |
SUM(expression) OVER |
VAR_POP(expression) OVER |
VAR_POP(expression) OVER |
VAR_SAMP(expression) OVER |
VAR_SAMP(expression) OVER |
VARIANCE(expression) OVER |
VARIANCE(expression) OVER |
条件表达式
下表展示了常见的 Amazon Redshift 条件表达式与其 BigQuery 等效项之间的映射。
Amazon Redshift | BigQuery |
---|---|
CASEexpression |
CASE expression |
COALESCE(expression1[,
...]) |
COALESCE(expression1[,
...]) |
DECODE( |
CASE expression |
GREATEST(value [,
...]) |
GREATEST(value [,
...]) |
LEAST(value [, ...]) |
LEAST(value [, ...]) |
NVL(expression1[, ...])
|
COALESCE(expression1[,
...]) |
NVL2( |
IF( |
NULLIF(expression1,
expression2) |
NULLIF(expression1,
expression2) |
BigQuery 还提供以下条件表达式,这些条件表达式在 Amazon Redshift 中没有直接模拟:
日期和时间函数
下表展示了常见的 Amazon Redshift 日期和时间函数与其 BigQuery 等效项之间的映射。BigQuery 数据和时间函数包括日期函数、日期时间函数、时间函数和时间戳函数。
请注意,Amazon Redshift 和 BigQuery 中看似相同的函数可能会返回不同的数据类型。
Amazon Redshift | BigQuery |
---|---|
ADD_MONTHS( |
CAST( DATE_ADD( |
timestamptz_or_timestamp AT TIME
ZONE timezone |
PARSE_TIMESTAMP( 注意:在解析时间戳或设置时间戳格式以用于显示时,系统会使用时区。字符串格式的时间戳可能包含时区,但当 BigQuery 解析字符串时,会采用等效的世界协调时间 (UTC) 存储该时间戳。如果未明确指定时区,则系统会使用默认时区,即世界协调时间 (UTC)。支持时区名称或相对于世界协调时间 (UTC) 的偏移量 (-HH:MM),但不支持时区缩写(如 PDT)。 |
CONVERT_TIMEZONE( |
PARSE_TIMESTAMP( 注意:在 BigQuery 中, source_timezone 为世界协调时间 (UTC)。 |
CURRENT_DATE 注意:采用当前会话时区(默认为世界协调时间 (UTC))返回当前事务的开始日期。 |
CURRENT_DATE() 注意:采用世界协调时间 (UTC) 时区返回当前语句的开始日期。 |
DATE_CMP(date1, date2)
|
CASE |
DATE_CMP_TIMESTAMP(date1,
date2) |
CASE |
DATE_CMP_TIMESTAMPTZ(date,
timestamptz) |
CASE |
DATE_PART_YEAR(date) |
EXTRACT(YEAR FROM
date) |
DATEADD(date_part,
interval, date) |
CAST( |
DATEDIFF( |
DATE_DIFF( |
DATE_PART(date_part, date)
|
EXTRACT(date_part FROM
date) |
DATE_TRUNC('date_part',
timestamp) |
TIMESTAMP_TRUNC(timestamp,
date_part) |
EXTRACT(date_part FROM
timestamp) |
EXTRACT(date_part FROM
timestamp) |
GETDATE() |
PARSE_TIMESTAMP( |
INTERVAL_CMP( |
对于 Redshift 中的间隔,一年中有 360 天。在 BigQuery 中,您可以使用以下用户定义的函数 (UDF) 解析 Redshift 间隔并将其转换为秒。CREATE TEMP FUNCTION 如需比较间隔字面量,请执行: IF( |
LAST_DAY(date) |
DATE_SUB( |
MONTHS_BETWEEN( |
DATE_DIFF( |
NEXT_DAY(date, day) |
DATE_ADD( |
SYSDATE 注意:采用当前会话时区(默认为世界协调时间 (UTC))返回当前事务的开始时间戳。 |
CURRENT_TIMESTAMP() 注意:采用世界协调时间 (UTC) 时区返回当前语句的开始时间戳。 |
TIMEOFDAY() |
FORMAT_TIMESTAMP( |
TIMESTAMP_CMP( |
CASE |
TIMESTAMP_CMP_DATE( |
CASE |
TIMESTAMP_CMP_TIMESTAMPTZ(
注意:Redshift 会比较采用用户会话定义的时区的时间戳。默认用户会话时区为世界协调时间 (UTC)。 |
CASE 注意:BigQuery 会比较采用世界协调时间 (UTC) 时区的时间戳。 |
TIMESTAMPTZ_CMP( 注意:Redshift 会比较采用用户会话定义的时区的时间戳。默认用户会话时区为世界协调时间 (UTC)。 |
CASE 注意:BigQuery 会比较采用世界协调时间 (UTC) 时区的时间戳。 |
TIMESTAMPTZ_CMP_DATE( 注意:Redshift 会比较采用用户会话定义的时区的时间戳。默认用户会话时区为世界协调时间 (UTC)。 |
CASE 注意:BigQuery 会比较采用世界协调时间 (UTC) 时区的时间戳。 |
TIMESTAMPTZ_CMP_TIMESTAMP(
注意:Redshift 会比较采用用户会话定义的时区的时间戳。默认用户会话时区为世界协调时间 (UTC)。 |
CASE 注意:BigQuery 会比较采用世界协调时间 (UTC) 时区的时间戳。 |
TIMEZONE( |
PARSE_TIMESTAMP( 注意:在解析时间戳或设置时间戳格式以用于显示时,系统会使用时区。字符串格式的时间戳可能包含时区,但当 BigQuery 解析字符串时,会采用等效的世界协调时间 (UTC) 存储该时间戳。如果未明确指定时区,则系统会使用默认时区,即世界协调时间 (UTC)。支持时区名称或相对于世界协调时间 (UTC) 的偏移量 (-HH:MM),但不支持时区缩写(如 PDT)。 |
TO_TIMESTAMP(timestamp,
format) |
PARSE_TIMESTAMP( 注意:BigQuery 遵循一组不同的格式元素。在解析时间戳或设置时间戳格式以用于显示时,系统会使用时区。字符串格式的时间戳可能包含时区,但当 BigQuery 解析字符串时,会采用等效的世界协调时间 (UTC) 存储该时间戳。如果未明确指定时区,则系统会使用默认时区,即世界协调时间 (UTC)。格式字符串支持时区名称或相对于世界协调时间 (UTC) 的偏移量 (-HH:MM),但不支持时区缩写(如 PDT)。 |
TRUNC(timestamp) |
CAST(timestamp AS
DATE) |
BigQuery 还提供以下日期和时间函数,这些函数在 Amazon Redshift 中没有直接模拟:
EXTRACT
DATE
DATE_SUB
DATE_ADD
(返回DATE
数据类型)DATE_FROM_UNIX_DATE
FORMAT_DATE
PARSE_DATE
UNIX_DATE
DATETIME
DATETIME_ADD
DATETIME_SUB
DATETIME_DIFF
DATETIME_TRUNC
FORMAT_DATETIME
PARSE_DATETIME
CURRENT_TIME
TIME
TIME_ADD
TIME_SUB
TIME_DIFF
TIME_TRUNC
FORMAT_TIME
PARSE_TIME
TIMESTAMP_SECONDS
TIMESTAMP_MILLIS
TIMESTAMP_MICROS
UNIX_SECONDS
UNIX_MILLIS
UNIX_MICROS
数学运算符
下表展示了常见的 Amazon Redshift 数学运算符与其 BigQuery 等效项之间的映射。
Amazon Redshift | BigQuery |
---|---|
|
|
|
|
|
|
注意:如果运算符 执行整数除法(即 X 和 Y 均为整数),则系统会返回整数。如果运算符执行非整数除法,则系统会返回非整数。 |
如果是整数除法:CAST(FLOOR(X / Y) AS INT64)
如果不是整数除法:
注意:BigQuery 中的除法会返回非整数。 为防止除法运算出错(除数为零的错误),请使用 SAFE_DIVIDE(X, Y) 或 IEEE_DIVIDE(X, Y) 。 |
|
注意:为防止除法运算出错(除数为零的错误),请使用 SAFE.MOD(X, Y) 。SAFE.MOD(X, 0) 会导致 0。 |
|
注意:与 Amazon Redshift 不同,BigQuery 中的 ^ 运算符执行按位异或运算。 |
|
注意:为防止平方根运算出错(负输入),请使用 SAFE.SQRT(X) 。SAFE.SQRT(X) 为负输入会导致 NULL 。 |
|
注意:如果 X 是小于 0 的有限值且 Y 是非整数,则 BigQuery 的 POWER(X, Y) 会返回错误。 |
|
|
|
注意:如果第二个操作数 Y 大于或等于第一个操作数 X 的位长度(例如,如果 X 的类型是 INT64,则其位长度是 64),则此运算符会返回 0 或 b'\x00' 字节序列。如果 Y 为负数,则此运算符会抛出错误。 |
|
注意:将第一个操作数 X 向右移位。此运算符不会对带符号的类型执行符号位扩展(它会在左侧的空位上填入 0)。如果第二个操作数 Y 大于或等于第一个操作数 X 的位长度(例如,如果 X 的类型是 INT64,则其位长度是 64),则此运算符返回 0,或者返回 b'\x00' 字节序列。如果 Y 为负,则此运算符引发一个错误。 |
|
|
|
|
|
|
BigQuery 还提供以下数学运算符,该运算符在 Amazon Redshift 中没有直接模拟:
X ^ Y
(按位异或)
数学函数
Amazon Redshift | BigQuery |
---|---|
ABS(number) |
ABS(number) |
ACOS(number) |
ACOS(number) |
ASIN(number) |
ASIN(number) |
ATAN(number) |
ATAN(number) |
ATAN2(number1,
number2) |
ATAN2(number1,
number2) |
CBRT(number) |
POWER(number, 1/3) |
CEIL(number) |
CEIL(number) |
CEILING(number) |
CEILING(number) |
CHECKSUM(expression) |
FARM_FINGERPRINT(expression)
|
COS(number) |
COS(number) |
COT(number) |
1/TAN(number) |
DEGREES(number) |
number *180/ACOS(-1) |
DEXP(number) |
EXP(number) |
DLOG1(number) |
LN(number) |
DLOG10(number) |
LOG10(number) |
EXP(number) |
EXP(number) |
FLOOR(number) |
FLOOR(number) |
LNnumber) |
LN(number) |
LOG(number) |
LOG10(number) |
MOD(number1, number2) |
MOD(number1, number2) |
PI |
ACOS(-1) |
POWER(expression1,
expression2) |
POWER(expression1,
expression2) |
RADIANS(number) |
ACOS(-1)*(number/180) |
RANDOM() |
RAND() |
ROUND(number [,
integer]) |
ROUND(number [,
integer]) |
SIN(number) |
SIN(number) |
SIGN(number) |
SIGN(number) |
SQRT(number) |
SQRT(number) |
TAN(number) |
TAN(number) |
TO_HEX(number) |
FORMAT('%x', number) |
TRUNC(number [,
integer])+-+++ |
TRUNC(number [, integer])
|
字符串函数
Amazon Redshift | BigQuery |
---|---|
string1 || string2 |
CONCAT(string1,
string2) |
BPCHARCMP(string1,
string2) |
CASE |
BTRIM(string [,
matching_string]) |
TRIM(string [,
matching_string]) |
BTTEXT_PATTERN_CMP(string1,
string2) |
CASE |
CHAR_LENGTH(expression) |
CHAR_LENGTH(expression) |
CHARACTER_LENGTH(expression) |
CHARACTER_LENGTH(expression) |
CHARINDEX(substring,
string) |
STRPOS(string, substring)
|
CHR(number) |
CODE_POINTS_TO_STRING([number])
|
CONCAT(string1,
string2) |
CONCAT(string1,
string2) 注意:BigQuery 的 CONCAT (...) 支持串联任意数量的字符串。 |
CRC32 |
自定义用户定义的函数 |
FUNC_SHA1(string) |
SHA1(string) |
INITCAP |
INITCAP |
LEFT(string, integer) |
SUBSTR(string, 0, integer)
|
RIGHT(string, integer)
|
SUBSTR(string,
-integer) |
LEN(expression) |
LENGTH(expression) |
LENGTH(expression) |
LENGTH(expression) |
LOWER(string) |
LOWER(string) |
LPAD(string1, length[,
string2]) |
LPAD(string1, length[,
string2]) |
RPAD(string1, length[,
string2]) |
RPAD(string1, length[,
string2]) |
LTRIM(string,
trim_chars) |
LTRIM(string,
trim_chars) |
MD5(string) |
MD5(string) |
OCTET_LENGTH(expression) |
BYTE_LENGTH(expression) |
POSITION(substring IN
string) |
STRPOS(string,
substring) |
QUOTE_IDENT(string) |
CONCAT('"',string,'"') |
QUOTE_LITERAL(string) |
CONCAT("'",string,"'")
|
REGEXP_COUNT(
source_string, pattern |
ARRAY_LENGTH( REGEXP_EXTRACT_ALL( 如果指定了 position :ARRAY_LENGTH( REGEXP_EXTRACT_ALL( 注意:BigQuery 通过 re2 库提供正则表达式支持;请参阅相关文档了解其正则表达式语法。 |
REGEXP_INSTR( |
IFNULL( STRPOS( 如果指定了 source_string :REGEXP_REPLACE( 如果指定了 position :IFNULL( STRPOS( 如果指定了 occurrence :IFNULL( STRPOS( 注意:BigQuery 通过 re2 库提供正则表达式支持;请参阅相关文档了解其正则表达式语法 。 |
REGEXP_REPLACE(
source_string, |
REGEXP_REPLACE( 如果指定了 source_string :
REGEXP_REPLACE( 如果指定了 position :CASE |
REGEXP_SUBSTR(
source_string, pattern |
REGEXP_EXTRACT( 如果指定了 position :REGEXP_EXTRACT( 如果指定了 occurrence :REGEXP_EXTRACT_ALL( 注意:BigQuery 通过 re2 库提供正则表达式支持;请参阅相关文档了解其正则表达式语法。 |
REPEAT(string,
integer) |
REPEAT(string,
integer) |
REPLACE(string, old_chars,
new_chars) |
REPLACE(string, old_chars,
new_chars) |
REPLICA(string,
integer) |
REPEAT(string,
integer) |
REVERSE(expression) |
REVERSE(expression) |
RTRIM(string,
trim_chars) |
RTRIM(string,
trim_chars) |
SPLIT_PART(string,
delimiter, part) |
SPLIT( |
STRPOS(string,
substring) |
STRPOS(string,
substring) |
STRTOL(string, base) |
|
SUBSTRING( |
SUBSTR( |
TEXTLEN(expression) |
LENGTH(expression) |
TRANSLATE( |
可以使用 UDF 实现:CREATE TEMP FUNCTION |
TRIM([BOTH] string) |
TRIM(string) |
TRIM([BOTH] characters FROM
string) |
TRIM(string, characters)
|
UPPER(string) |
UPPER(string) |
数据类型格式设置函数
Amazon Redshift | BigQuery |
---|---|
CAST(expression AS type) |
CAST(expression AS type) |
expression ::
type |
CAST(expression AS type) |
CONVERT(type, expression) |
CAST(expression AS type) |
TO_CHAR(
|
FORMAT_TIMESTAMP( 注意:BigQuery 和 Amazon Redshift 在为 timestamp_expression 指定格式字符串的方式方面有所不同。 |
TO_CHAR(
|
FORMAT( 注意:BigQuery 和 Amazon Redshift 在为 timestamp_expression 指定格式字符串的方式方面有所不同。 |
TO_DATE(date_string, format) |
PARSE_DATE(date_string, format)
注意:BigQuery 和 Amazon Redshift 在为 date_string 指定格式字符串的方式方面有所不同。 |
TO_NUMBER(string, format) |
CAST( 注意:BigQuery 和 Amazon Redshift 在指定数字格式字符串的方式方面有所不同。 |
BigQuery 还支持 SAFE_CAST
(expression
AS typename)
,如果 BigQuery 无法执行类型转换,则会返回 NULL
;例如,SAFE_CAST
("apple"
AS INT64)
会返回 NULL
。
DML 语法
本部分介绍了 Amazon Redshift 和 BigQuery 在数据管理语言语法方面的差异。
INSERT
语句
Amazon Redshift 为列提供可配置的 DEFAULT
关键字。在 BigQuery 中,可为 null 的列的 DEFAULT
值为 NULL
,且所需列不支持 DEFAULT
。大多数 Amazon Redshift INSERT
语句都与 BigQuery 兼容。下表显示了例外情况。
Amazon Redshift | BigQuery |
---|---|
INSERT INTO table (column1 [, ...]) |
INSERT [INTO] table (column1 [, ...]) |
INSERT INTO table (column1, [,...]) VALUES ( |
INSERT [INTO] table (column1, [,...]) |
BigQuery 还支持使用子查询插入值(其中一个值使用子查询计算得出),Amazon Redshift 不支持此操作。例如:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY
语句
Amazon Redshift 的 COPY
命令会将数据从数据文件或 Amazon DynamoDB 表加载到表中。BigQuery 不使用 SQL COPY
命令加载数据,但您可以使用多种非 SQL 工具和选项的任何一种将数据加载到 BigQuery 表中。您还可以使用 Apache Spark 或 Apache Beam 中提供的数据流水线接收器将数据写入 BigQuery 中。
UPDATE
语句
大多数 Amazon Redshift UPDATE
语句都与 BigQuery 兼容。下表展示了例外情况。
Amazon Redshift | BigQuery |
---|---|
UPDATE table |
UPDATE table 注意:BigQuery 中的所有 UPDATE 语句都需要 WHERE 关键字,后跟一个条件。 |
UPDATE table |
UPDATE table 注意:BigQuery 的 UPDATE 命令不支持 DEFAULT 值。如果 Amazon Redshift UPDATE 语句不包含 WHERE 子句,则 BigQuery UPDATE 语句应具有 WHERE TRUE 条件。 |
DELETE
和 TRUNCATE
语句
DELETE
和 TRUNCATE
语句都是在不影响表架构或索引的情况下从表中移除行的方法。
在 Amazon Redshift 中,建议使用 TRUNCATE
语句而不是非限定的 DELETE
语句,因为前者执行速度更快,并且之后不需要 VACUUM
和 ANALYZE
操作。不过,您可以使用 DELETE
语句达到相同的效果。
在 BigQuery 中,DELETE
语句必须具有 WHERE
子句。 如需详细了解 BigQuery 中的 DELETE
,请参阅 DML 文档中的 BigQuery DELETE
示例。
Amazon Redshift | BigQuery |
---|---|
DELETE
[FROM] table_name TRUNCATE
[TABLE] table_name |
DELETE FROM table_name BigQuery DELETE 语句需要 WHERE 子句。 |
DELETE FROM table_name |
DELETE FROM table_name DELETE FROM table_name 在 Amazon Redshift 中, USING 允许在 WHERE 子句中引用附加表。在 BigQuery 中,可以通过在 WHERE 子句中使用子查询来实现此目的。 |
MERGE
语句
MERGE
语句可以将 INSERT
、UPDATE
和 DELETE
操作合并为一个 upsert 语句,并以原子方式执行这些操作。对应每个目标行,MERGE
操作必须匹配最多一个源行。
Amazon Redshift 不支持单个 MERGE
命令。但是,您可以通过在事务中执行 INSERT
、UPDATE
和 DELETE
操作,在 Amazon Redshift 中执行合并操作。
通过替换现有行来合并操作
在 Amazon Redshift 中,可以先使用 DELETE
语句,再使用 INSERT
语句来执行覆盖目标表中所有列的操作。DELETE
语句会移除应更新的行,然后 INSERT
语句会插入更新后的行。BigQuery 表每天最多只能运行 1000 个 DML 语句,因此您应该将 INSERT
、UPDATE
和 DELETE
语句合并到一个 MERGE
语句中,如下表所示。
Amazon Redshift | BigQuery |
---|---|
请参阅通过替换现有行来执行合并操作CREATE TEMP TABLE temp_table; |
MERGE target 注意:如果更新所有列,则必须列出所有列。 |
请参阅通过指定列列表来执行合并操作。CREATE TEMP TABLE temp_table; |
MERGE target |
DDL 语法
本部分介绍了 Amazon Redshift 和 BigQuery 在数据定义语言语法方面的差异。
SELECT INTO
语句
在 Amazon Redshift 中,SELECT INTO
语句可用于将查询结果插入到新表中,并合并表创建和插入操作。
Amazon Redshift | BigQuery |
---|---|
SELECT expression, ... INTO table |
INSERT table |
WITH subquery_table AS ( SELECT ... |
INSERT table |
SELECT expression |
BigQuery 提供了多种模拟临时表的方法。如需了解详情,请参阅临时表部分。 |
CREATE TABLE
语句
大多数 Amazon Redshift CREATE TABLE
语句都与 BigQuery 兼容,但以下语法元素在 BigQuery 中不使用:
Amazon Redshift | BigQuery |
---|---|
CREATE TABLE table_name ( 注意: UNIQUE 和 PRIMARY KEY 限制条件为参考信息,不受 Amazon Redshift 系统强制执行。 |
CREATE TABLE table_name ( |
CREATE TABLE table_name 注意: UNIQUE 和 PRIMARY KEY 限制条件为参考信息,不受 Amazon Redshift 系统强制执行。 |
CREATE TABLE table_name 注意:BigQuery 不使用 UNIQUE 、PRIMARY KEY 或 FOREIGN KEY 表限制条件。如需实现这些限制条件在查询执行期间提供的类似优化,请对 BigQuery 表进行分区和聚簇。CLUSTER BY 最多支持 4 列。 |
CREATE TABLE table_name |
请参考此示例,了解如何使用 INFORMATION_SCHEMA 表将列名称、数据类型和 NOT NULL 限制条件复制到新表。 |
CREATE TABLE table_name 注意:在 Amazon Redshift 中,指定了 BACKUP
NO 设置以节省处理时间并减少存储空间。 |
不使用或不需要 BACKUP NO 表选项,因为 BigQuery 会自动将所有表的历史版本保留长达 7 天,而不会影响处理时间或付费存储空间。 |
CREATE TABLE table_name |
BigQuery 支持聚簇,从而能够按排列顺序存储键。 |
CREATE TABLE table_name |
CREATE TABLE table_name |
CREATE TABLE IF NOT EXISTS table_name ... |
CREATE TABLE IF NOT EXISTS |
BigQuery 还支持 DDL 语句 CREATE OR REPLACE TABLE
,该语句会覆盖已存在的表。
BigQuery 的 CREATE TABLE
语句还支持以下子句,这些子句没有 Amazon Redshift 等效项:
如需详细了解 BigQuery 中的 CREATE TABLE
,请参阅 DML 文档中的 BigQuery CREATE TABLE
示例。
临时表
Amazon Redshift 支持临时表,这些表仅在当前会话中可见。您可以通过以下几种方式在 BigQuery 中模拟临时表:
- 数据集 TTL:创建一个存留时间较短(例如 1 小时)的数据集,这样在该数据集中创建的所有表实际上都是暂时的,因为它们的持续存在时间不会超过该数据集的存留时间。您可以为此数据集的所有表名称添加 temp 前缀,以明确表示这些表是临时表。
表 TTL:使用如下所示的 DDL 语句,创建一个具有表特定的较短存留时间的表:
CREATE TABLE temp.name (col1, col2, ...) OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));
CREATE VIEW
语句
下表展示了 Amazon Redshift 和 BigQuery 中 CREATE VIEW
语句的等效项。
Amazon Redshift | BigQuery |
---|---|
CREATE VIEW view_name AS SELECT ... code> |
CREATE VIEW view_name AS SELECT
... |
CREATE OR REPLACE VIEW view_name AS SELECT ... |
CREATE OR REPLACE VIEW |
CREATE VIEW view_name |
CREATE VIEW view_name AS SELECT
... |
不受支持。 | CREATE VIEW IF NOT EXISTS c
view_name 仅当指定的数据集中不存在要创建的新视图时才创建此视图。 |
CREATE VIEW view_name 在 Amazon Redshift 中,需要延迟绑定视图才能引用外部表。 |
在 BigQuery 中,如需创建视图,所有引用的对象都必须已存在。 BigQuery 允许您查询外部数据源。 |
用户定义的函数 (UDF)
借助 UDF,您可以为自定义操作创建函数。这些函数接受输入列、执行操作,然后以值的形式返回这些操作的结果。
Amazon Redshift 和 BigQuery 都支持使用 SQL 表达式的 UDF。此外,在 Amazon Redshift 中,您可以创建基于 Python 的 UDF;在 BigQuery 中,您可以创建基于 JavaScript 的 UDF。
如需了解常见的 BigQuery UDF 库,请参阅 Google Cloud BigQuery 实用程序 GitHub 代码库。
CREATE FUNCTION
语法
下表介绍了 Amazon Redshift 和 BigQuery 在 SQL UDF 创建语法方面的差异。
Amazon Redshift | BigQuery |
---|---|
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION 注意:在 BigQuery SQL UDF 中,返回数据类型是可选的。当查询调用函数时,BigQuery 会通过 SQL 函数体推断出函数的结果类型。 |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION 注意:在 BigQuery 中,函数易失性不是可配置参数。所有 BigQuery UDF 易失性等效于 Amazon Redshift 的 IMMUTABLE 易失性(即不执行数据库查找,也不使用非直接存在于其参数列表中的信息)。 |
CREATE [OR
REPLACE] FUNCTION 注意:Amazon Redshift 仅支持 SQL SELECT 子句作为函数定义。此外,SELECT 子句不能包含任何 FROM,
INTO, WHERE, GROUP BY, ORDER BY, 和 LIMIT 子句。 |
CREATE [OR REPLACE] FUNCTION 注意:BigQuery 支持任何 SQL 表达式作为函数定义。但是,不支持引用表、视图或模型。 |
CREATE [OR
REPLACE] FUNCTION |
CREATE [OR REPLACE] FUNCTION
function_name ([sql_arg_name sql_arg_data_type[,..]]) RETURNS
data_type AS sql_function_definition 注意:GoogleSQL UDF 中不需要指定语言字面量。默认情况下,BigQuery 会解释 SQL 表达式。此外,BigQuery 不支持 Amazon Redshift 美元引用 ( $$ )。 |
CREATE [OR
REPLACE] FUNCTION function_name (integer, integer) RETURNS
integer IMMUTABLE AS $$ SELECT $1 + $2 $$ LANGUAGE sql |
CREATE [OR REPLACE] FUNCTION 注意:BigQuery UDF 要求指定所有输入参数。BigQuery 不支持 Amazon Redshift 参数变量( $1 、$2 等)。 |
CREATE [OR
REPLACE] FUNCTION 注意:Amazon Redshift 在 SQL UDF 中不支持 ANY TYPE 。但是,它支持在基于 Python 的 UDF 中使用 ANYELEMENT 数据类型。 |
CREATE [OR REPLACE] FUNCTION 注意:BigQuery 支持使用 ANY TYPE 作为参数类型。此函数接受此参数的任何类型的输入。如需了解详情,请参阅 BigQuery 中的模板化参数。 |
BigQuery 还支持 CREATE FUNCTION IF NOT EXISTS
语句,该语句将查询视为成功,如果已存在同名函数,则不会执行任何操作。
BigQuery 的 CREATE FUNCTION
语句还支持创建 TEMPORARY
或 TEMP
函数,这些函数没有 Amazon Redshift 等效项。
如需详细了解如何执行 BigQuery 永久性 UDF,请参阅调用 UDF。
DROP FUNCTION
语法
下表介绍了 Amazon Redshift 和 BigQuery 在 DROP FUNCTION
语法方面的差异。
Amazon Redshift | BigQuery |
---|---|
DROP
FUNCTION |
DROP FUNCTION 注意:BigQuery 不要求使用函数签名来删除函数。此外,BigQuery 不支持移除函数依赖项。 |
BigQuery 还支持 DROP FUNCTION IF EXISTS
语句,该语句仅当指定数据集中存在该函数时才会将其删除。
如果该函数不在当前项目中,则 BigQuery 要求您指定 project_name。
UDF 组件
本部分重点介绍了 Amazon Redshift 和 BigQuery 在 UDF 组件方面的异同。
组件 | Amazon Redshift | BigQuery |
---|---|---|
名称 | Amazon Redshift 建议为函数名称使用前缀 _f ,以避免与现有或未来的内置 SQL 函数名称发生冲突。 |
在 BigQuery 中,您可以使用任何自定义函数名称。 |
参数 | 参数是可选的。您可以在 Python UDF 参数中使用名称和数据类型,而在 SQL UDF 参数中只能使用数据类型。在 SQL UDF 中,您必须使用 $1 和 $2 等来引用参数。Amazon Redshift 还会将参数数量限制为 32。 |
参数是可选的,但如果您指定参数,它们必须同时将名称和数据类型用于 JavaScript UDF 和 SQL UDF。永久性 UDF 的参数数量上限为 256。 |
数据类型 | Amazon Redshift 对 SQL 和 Python UDF 支持一组不同的数据类型。 对于 Python UDF,数据类型也可以是 ANYELEMENT 。您必须为 SQL 和 Python UDF 指定 RETURN 数据类型。请参阅本文档中的数据类型,了解 Amazon Redshift 和 BigQuery 中数据类型的等效项。 |
BigQuery 对 SQL 和 JavaScript UDF 支持一组不同的数据类型。 对于 SQL UDF,数据类型也可以是 ANY TYPE 。如需了解详情,请参阅 BigQuery 中的模板化参数。RETURN 数据类型对于 SQL UDF 是可选的。如需了解 BigQuery 数据类型如何映射到 JavaScript 数据类型,请参阅 JavaScript 中的 SQL 类型编码。 |
定义 | 对于 SQL 和 Python UDF,您必须使用美元引用括起函数定义,如一对美元符号 ($$ ) 所示,以表示函数语句的开始和结束。对于 SQL UDF,Amazon Redshift 仅支持 SQL SELECT 子句作为函数定义。此外,SELECT 子句不能包含任何 FROM 、INTO 、WHERE 、GROUP BY 、ORDER BY 和 LIMIT
子句。对于 Python UDF,您可以使用 Python 2.7 标准库编写 Python 程序,或者使用 CREATE
LIBRARY 命令创建一个自定义模块来导入该自定义模块。 |
在 BigQuery 中,您需要将 JavaScript 代码用引号引起来。请参阅引用规则了解详情。 对于 SQL UDF,您可以使用任何 SQL 表达式作为函数定义。但是,BigQuery 不支持引用表、视图或模型。 对于 JavaScript UDF,您可以直接使用 OPTIONS 部分加入外部代码库。您还可以使用 BigQuery UDF 测试工具测试您的函数。 |
语言 | 您必须使用 LANGUAGE 字面量针对 SQL UDF 将语言指定为 sql 或针对 Python UDF 将语言指定为 plpythonu
。 |
您无需为 SQL UDF 指定 LANGUAGE ,但必须针对 JavaScript UDF 将语言指定为 js 。 |
状态 | Amazon Redshift 不支持创建临时性 UDF。 Amazon Redshift 提供了一个选项,可使用 VOLATILE 、STABLE 或 IMMUTABLE 字面量定义函数的波动性。它由查询优化器用于进行优化。 |
BigQuery 同时支持永久性 UDF 和临时性 UDF。您可以在多个查询中重复使用永久性 UDF,但只能在单个查询中使用临时性 UDF。 在 BigQuery 中,函数易失性不是可配置参数。所有 BigQuery UDF 易失性等效于 Amazon Redshift 的 IMMUTABLE
易失性。 |
安全性和特权 | 要创建 UDF,您必须拥有 SQL 或 plpythonu (Python) 的语言使用权限。默认情况下,USAGE ON LANGUAGE SQL 会授予 PUBLIC ,但您必须将 USAGE ON LANGUAGE PLPYTHONU
明确授予特定用户或群组。此外,您必须是超级用户才能替换 UDF。 |
在 BigQuery 中无需授予创建或删除任何类型的 UDF 的明确权限。分配了 BigQuery Data Editor 角色(其中一项权限是 bigquery.routines.* )的任何用户都可以为指定的数据集创建或删除函数。BigQuery 还支持创建自定义角色。这可以使用 Cloud IAM 进行管理。 |
限制 | 请参阅 Python UDF 限制。 | 请参阅 UDF 限制。 |
元数据和事务 SQL 语句
Amazon Redshift | BigQuery |
---|---|
SELECT * FROM STL_ANALYZE WHERE name |
在 BigQuery 中不使用。您无需收集统计信息即可提高查询性能。如需获取有关数据分布的信息,您可以使用近似聚合函数。 |
ANALYZE
[[ table_name[(column_name |
在 BigQuery 中不使用。 |
LOCK
TABLE table_name; |
在 BigQuery 中不使用。 |
BEGIN
TRANSACTION; SELECT ... |
BigQuery 使用快照隔离。如需了解详情,请参阅一致性保证。 |
EXPLAIN
... |
在 BigQuery 中不使用。 类似的功能是 BigQuery Google Cloud 控制台和 Cloud Monitoring 的审核日志记录中的查询计划说明。 |
SELECT * FROM SVV_TABLE_INFO WHERE |
SELECT * EXCEPT(is_typed) FROM 如需了解详情,请参阅 BigQuery INFORMATION_SCHEMA 简介。 |
VACUUM
[table_name] |
在 BigQuery 中不使用。BigQuery 聚簇表会自动排序。 |
多语句和多行 SQL 语句
Amazon Redshift 和 BigQuery 都支持事务(会话),因此支持用分号分隔并始终一起执行的语句。如需了解详情,请参阅多语句事务。
过程 SQL 语句
CREATE PROCEDURE
语句
Amazon Redshift | BigQuery |
---|---|
CREATE or
REPLACE PROCEDURE |
CREATE PROCEDURE (如果名称是必需的)。否则,请将内嵌与 BEGIN 结合使用或在具有 CREATE TEMP FUNCTION 的单行中使用内嵌。 |
CALL |
CALL |
变量声明和赋值
Amazon Redshift | BigQuery |
---|---|
DECLARE |
DECLARE 声明指定类型的变量。 |
SET |
SET 将变量设置为具有提供的表达式的值,或根据多个表达式的结果同时设置多个变量。 |
错误情况处理程序
在 Amazon Redshift 中,如果在存储过程执行期间遇到错误,则会结束执行流、结束事务并回滚事务。出现这些结果是因为不支持子事务。在 Amazon Redshift 存储过程中,唯一支持的 handler_statement
是 RAISE
。在 BigQuery 中,错误处理是主控制流的核心功能,类似于其他语言通过 TRY ... CATCH
块提供的功能。
Amazon Redshift | BigQuery |
---|---|
BEGIN ...
EXCEPTION WHEN OTHERS THEN |
BEGIN ... EXCEPTION WHEN ERROR
THEN |
RAISE |
RAISE |
[ <<label>> ] [ DECLARE declarations ] |
BEGIN |
游标声明和操作
由于 BigQuery 不支持游标或会话,因此 BigQuery 中不会使用以下语句:
DECLARE
cursor_name
CURSOR
[FOR] ...
PREPARE
plan_name [ (datatype [, ...] ) ] AS statement
OPEN
cursor_name FOR SELECT ...
FETCH
[ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor_name
CLOSE
cursor_name;
如果您使用游标返回结果集,则可以使用 BigQuery 中的临时表来实现类似行为。
动态 SQL 语句
BigQuery 中的脚本功能支持下表所示的动态 SQL 语句。
Amazon Redshift | BigQuery |
---|---|
EXECUTE |
EXECUTE IMMEDIATE |
控制流语句
Amazon Redshift | BigQuery |
---|---|
IF..THEN..ELSIF..THEN..ELSE..END
IF |
IF condition |
name CURSOR
[ ( arguments ) ] FOR query |
BigQuery 中不使用光标或会话。 |
[< |
LOOP |
WHILE
condition LOOP stmts END LOOP |
WHILE condition |
EXIT |
BREAK |
一致性保证和事务隔离
Amazon Redshift 和 BigQuery 都具有原子性,也就是说,在多行的每个变更级别都符合 ACID。
事务
默认情况下,Amazon Redshift 支持对事务进行可序列化隔离。Amazon Redshift 可让您指定四个 SQL 标准事务隔离级别中的任何一个,但会将所有隔离级别处理为可序列化。
BigQuery 还支持事务。BigQuery 使用快照隔离帮助确保乐观并发控制(首先提交优先),其中查询在查询开始之前读取最后提交的数据。此方法可保证每行的每个变更和同一 DML 语句中的各行具有相同的一致性级别,同时避免死锁。如果对同一个表进行了多个 DML 更新,BigQuery 会切换为悲观并发控制。加载作业可以完全独立运行并附加到表。
回滚
如果 Amazon Redshift 在运行存储过程时遇到任何错误,则会回滚事务中进行的所有更改。此外,您还可以在存储过程中使用 ROLLBACK
事务控制语句来舍弃所有更改。
在 BigQuery 中,您可以使用 ROLLBACK TRANSACTION
语句。
数据库限制
请查看 BigQuery 公开文档,了解最新的配额和限制。可通过联系 Cloud 支持团队来增加大量用户的许多配额。下表展示了 Amazon Redshift 和 BigQuery 数据库限制的比较。
限额 | Amazon Redshift | BigQuery |
---|---|---|
每个数据库中适用于大型和超大型集群节点类型的表 | 9900 | 无限制 |
每个数据库中适用于 8xlarge 集群节点类型的表 | 20000 | 无限制 |
您可以为每个集群创建的用户定义数据库 | 60 | 无限制 |
行大小上限 | 4 MB | 100 MB |