优化的 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
  • INNERLEFTRIGHT 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_INPUTFULL_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 功能,但是有一种解决方法:

  1. 在 BigQuery 中编写查询。
  2. 将查询结果保存到表中。
  3. 安排您的查询以定期更新表。每小时或每天刷新率最有效,因为每分钟刷新一次会使 BI Engine 缓存更频繁地失效。
  4. 在性能关键查询中引用此表格。