优化的 SQL 函数和运算符
在使用自定义查询或视图将商业智能 (BI) 工具连接到 BigQuery 时,BigQuery BI Engine 会优化以下 GoogleSQL 函数和运算符。使用此列表中未列出的函数和运算符的查询的运行速度可能更缓慢。
要查看不支持的 SQL 功能的列表,请参阅不支持的功能部分。
如需详细了解如何在 Looker 数据洞察中使用自定义查询和视图,请参阅连接到 BigQuery。如需详细了解如何将其他 BI 工具连接到 BigQuery,请参阅 BigQuery BI Engine SQL 接口概览。
如需查看所有 GoogleSQL 运算符和函数的列表,请参阅 GoogleSQL 函数和运算符。
优化的运算符
ORDER BY
LIMIT
count [OFFSET
skip_rows]UNION ALL
HAVING
GROUP BY
WHERE
INNER
、LEFT
和RIGHT JOIN
(大小限制较小)
优化的函数
比较
=
<>
<
<=
>
>=
BETWEEN
IN
LEAST
GREATEST
CASE
COALESCE
IF
ISNULL
IS [NOT] NULL
IS [NOT] TRUE
IS [NOT] FALSE
IFNULL
NULLIF
逻辑
NOT
AND
OR
数学
-
(一元取反)+
-
(二元取反)*
/
IEEE_DIVIDE
DIV
MOD
ROUND
TRUNC
FLOOR
CEIL
ABS
SIGN
SQRT
EXP
POW
IS_INF
IS_NAN
SIN
SINH
ASIN
ASINH
COS
COSH
ACOS
ACOSH
TAN
TANH
ATAN
ATAN2
ATANH
LOG
LN
LOG10
按位
BIT_COUNT
~
(按位NOT
)&
(按位AND
)|
(按位OR
)^
(按位XOR
)<<
(按位左移)>>
(按位右移)
字符串和字节
ASCII
BYTE_LENGTH
CHAR_LENGTH
CHR
CODE_POINTS_TO_BYTES
CODE_POINTS_TO_STRING
CONCAT
ENDS_WITH
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
INITCAP
INSTR
JSON_EXTRACT_SCALAR
JSON_EXTRACT
LEFT
LENGTH
LOWER
LPAD
LTRIM
NORMALIZE
NORMALIZE_AND_CASEFOLD
REGEXP_CONTAINS
REGEXP_EXTRACT
REGEXP_INSTR
REGEXP_REPLACE
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SAFE_CONVERT_BYTES_TO_STRING
SOUNDEX
STARTS_WITH
STRING_LIKE
STRPOS
SUBSTR
TO_BASE32
TO_BASE64
TO_HEX
TRANSLATE
TRIM
UNICODE
UPPER
时间戳、日期和时间
- 时间戳函数
TIMESTAMP_MICROS
TIMESTAMP_MILLIS
TIMESTAMP_SECONDS
TIMESTAMP
STRING
(timestamp_expression,[timezone])UNIX_SECONDS
UNIX_MILLIS
UNIX_MICROS
FORMAT_TIMESTAMP
PARSE_TIMESTAMP
TIMESTAMP_ADD
TIMESTAMP_SUB
TIMESTAMP_DIFF
EXTRACT
DATE
TIME
DATETIME
TIMESTAMP_TRUNC
- 日期函数
DATE
(year, month, day)DATE_FROM_UNIX_DATE
UNIX_DATE
FORMAT_DATE
PARSE_DATE
DATE_ADD
DATE_SUB
DATE_DIFF
EXTRACT
(原类型DATE
)DATE_TRUNC
CURRENT_TIMESTAMP
- 时间函数
EXTRACT
FORMAT_TIME
PARSE_TIME
TIME_ADD
TIME_SUB
TIME_DIFF
TIME_TRUNC
CURRENT_TIME
- 日期时间函数
DATETIME
EXTRACT
FORMAT_DATETIME
PARSE_DATETIME
DATETIME_ADD
DATETIME_SUB
DATETIME_DIFF
DATETIME_TRUNC
CURRENT_DATETIME
哈希技术
FARM_FINGERPRINT
MD5
SHA1
SHA256
SHA512
网络
NET_IP_IN_NET
NET_MAKE_NET
NET.HOST
NET.REG_DOMAIN
NET.PUBLIC_SUFFIX
NET.IP_FROM_STRING
NET.IP_TO_STRING
NET.IP_NET_MASK
NET.IP_TRUNC
NET.IPV4_FROM_INT64
NET.IPV4_TO_INT64
地理位置
- 构造函数
ST_GEOGPOINT
ST_MAKELINE
ST_MAKEPOLYGON
ST_MAKEPOLYGONORIENTED
- 解析器
ST_GEOGFROMGEOJSON
ST_GEOGFROMTEXT
ST_GEOGFROMWKB
ST_GEOGFROMWKB
ST_GEOGPOINTFROMGEOHASH
- 格式设置函数
ST_ASBINARY
ST_ASGEOJSON
ST_ASKML
ST_GEOHASH
- 转换
ST_BOUNDARY
ST_CENTROID
ST_CLOSESTPOINT
ST_CONVEXHULL
ST_DIFFERENCE
ST_EXTERIORRING
ST_INTERSECTION
ST_SIMPLIFY
ST_SNAPTOGRID
- 访问函数
ST_DIMENSION
ST_ENDPOINT
ST_GEOMETRYTYPE
ST_ISCOLLECTION
ST_ISEMPTY
ST_NPOINTS
ST_NUMGEOMETRIES
ST_NUMPOINTS
ST_POINTN
ST_STARTPOINT
ST_X
ST_Y
- 谓词
ST_CONTAINS
ST_COVEREDBY
ST_COVERS
ST_DISJOINT
ST_DWITHIN
ST_EQUALS
ST_INTERSECTS
ST_INTERSECTSBOX
ST_TOUCHES
ST_WITHIN
- 量度
ST_ANGLE
ST_AREA
ST_AZIMUTH
ST_DISTANCE
ST_LENGTH
ST_MAXDISTANCE
ST_PERIMETER
SAFE 函数
- 数学
MOD
ROUND
ABS
SQRT
POW
SINH
ASIN
COSH
ACOS
ACOSH
ATANH
LN
LOG
LOG10
FLOOR
CEIL
DIV
EXP
ROUND
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
SAFE_MULTIPLY
SAFE_DIVIDE
- 字符串
REGEXP_CONTAINS
REGEXP_EXTRACT
REGEXP_REPLACE
FORMAT
SUBSTR
ASCII
SAFE_CONVERT_BYTES_TO_STRING
INSTR
LEFT
RIGHT
TRANSLATE
INITCAP
- 时间戳、日期和时间
DATE_FROM_UNIX_DATE
PARSE_DATE
PARSE_DATETIME
PARSE_TIME
PARSE_TIMESTAMP
FORMAT_TIMESTAMP
TIMESTAMP_SECONDS
TIMESTAMP_MILLIS
TIMESTAMP_MICROS
- 网络
NET.SAFE_IP_FROM_STRING
- 其他
SAFE_CAST
聚合函数
SUM
COUNT
COUNTIF
ANY_VALUE
AVG
MAX
MIN
HLL_COUNT.INIT
HLL_COUNT.MERGE
HLL_COUNT.MERGE_PARTIAL
GROUP BY
子句BIT_AND
BIT_OR
BIT_XOR
LOGICAL_AND
LOGICAL_OR
DISJUNCTION_AGG
STRING_AGG
CORR
COVAR_POP
COVAR_SAMP
STDDEV_POP
STDDEV_SAMP
STDDEV
VAR_POP
VAR_SAMP
VARIANCE
APPROX_COUNT_DISTINCT
窗口函数
窗口函数(也称为分析函数)通过 BigQuery BI Engine 加速时存在以下限制:
- 如果输入阶段不包含窗口函数,BigQuery BI Engine 会对其进行加速。在这种情况下,
INFORMATION_SCHEMA.JOBS
视图会将bi_engine_statistics
.acceleration_mode
报告为FULL_INPUT
。 - BI Engine 会加速输入阶段中包含窗口函数的查询的输入阶段,但这些阶段不能存在“BI Engine 窗口函数限制”部分中所述的限制。在这种情况下,输入阶段或完整查询会在 BI Engine 中执行。在这种情况下,
INFORMATION_SCHEMA.JOBS
视图会将bi_engine_statistics
.acceleration_mode
报告为FULL_INPUT
或FULL_QUERY
。
如需详细了解 BiEngineStatistics
字段,请参阅作业参考。
BI Engine 窗口函数限制
只有满足以下所有条件时,BI Engine 中才会执行包含窗口函数的查询:
- 查询仅扫描一个表。
- 该表未进行分区。
- 表中的行数少于 500 万。
- 该查询不包含任何
JOIN
运算符。 - 所扫描表的大小乘以窗口函数运算符的个数所得的结果不超过 300 MB。具有相同
OVER
子句和相同直接输入的两个窗口函数可以共用同一窗口函数运算符。例如:- 查询
SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (ORDER BY x) FROM my_table
只有一个窗口函数运算符。 - 查询
SELECT ROW_NUMBER() OVER (ORDER BY x), SUM(x) OVER (PARTITION BY y ORDER BY x) FROM my_table
有两个窗口函数运算符,因为这两个函数没有相同的OVER
子句。 - 查询
SELECT ROW_NUMBER() OVER (ORDER BY x) FROM (SELECT SUM(x) OVER (ORDER BY x) AS x FROM my_table)
有两个窗口函数运算符,因为这两个函数具有不同的直接输入,即使它们的OVER
子句看起来相同。
- 查询
- 所引用窗口函数包含在下面的受支持函数列表中。
支持的窗口函数列表:
ANY_VALUE
AVG
BIT_AND
BIT_OR
BIT_XOR
CORR
COUNT
COUNTIF
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST_VALUE
LAG
LAST_VALUE
LEAD
LOGICAL_AND
LOGICAL_OR
MAX
MIN
NTH_VALUE
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
ROW_NUMBER
ST_CLUSTERDBSCAN
STDDEV_POP
STDDEV_SAMP
STDDEV
STRING_AGG
SUM
VAR_POP
VAR_SAMP
VARIANCE
如果不支持窗口函数,您可能会看到以下错误:
分析函数与其他运算符不兼容或其输入过大
其他函数
CAST
HLL_COUNT.EXTRACT
STRUCT
字段的点运算符ARRAY_LENGTH
限制
以下局限性和限制适用于 BI Engine SQL 函数和运算符支持。
BI Engine 不支持的功能
以下功能不具有 BI Engine 加速的特点:
- JavaScript UDF
- 外部表
- 查询原生 JSON 数据 - 错误消息:JSON 原生类型不受支持
- 将结果写入永久 BigQuery 表
- 包含借助 BigQuery 变更数据捕获获取的更新/插入操作的表
- 事务
- 返回 1 GB 以上的数据的查询。对于对延迟敏感的应用,建议的响应大小小于 1 MB。
有限的 Looker Studio 支持
Looker Studio 中的以下功能提供有限支持:
- SQL UDF
- 查询
ARRAY
列
针对不支持的功能的解决方法
虽然 BigQuery BI Engine 不支持某些 SQL 功能,但是有一种解决方法:
- 在 BigQuery 中编写查询。
- 将查询结果保存到表中。
- 安排您的查询以定期更新表。每小时或每天刷新率最有效,因为每分钟刷新一次会使 BI Engine 缓存更频繁地失效。
- 在性能关键查询中引用此表格。