允许使用的 SQL 函数

出于隐私保护方面的考虑,我们会限制可在广告数据中心内使用的 SQL 函数。

标量函数

允许使用除以下函数之外的所有标量函数:

  • ERROR
  • ST_AREA
  • ST_ASBINARY
  • ST_ASGEOJSON
  • ST_ASTEXT
  • ST_BOUNDARY
  • ST_CENTROID
  • ST_CENTROID_AGG
  • ST_CLOSESTPOINT
  • ST_CLUSTERDBSCAN
  • ST_CONTAINS
  • ST_CONVEXHULL
  • ST_COVEREDBY
  • ST_COVERS
  • ST_DIFFERENCE
  • ST_DIMENSION
  • ST_DISJOINT
  • ST_DISTANCE
  • ST_DUMP
  • ST_DWITHIN
  • ST_EQUALS
  • ST_GEOGFROMGEOJSON
  • ST_GEOGFROMTEXT
  • ST_GEOGFROMWKB
  • ST_GEOGPOINT
  • ST_GEOGPOINTFROMGEOHASH
  • ST_GEOHASH
  • ST_INTERSECTION
  • ST_INTERSECTS
  • ST_INTERSECTSBOX
  • ST_ISCOLLECTION
  • ST_ISEMPTY
  • ST_LENGTH
  • ST_MAKELINE
  • ST_MAKEPOLYGON
  • ST_MAKEPOLYGONORIENTED
  • ST_MAXDISTANCE
  • ST_NPOINTS
  • ST_NUMPOINTS
  • ST_PERIMETER
  • ST_SIMPLIFY
  • ST_SNAPTOGRID
  • ST_TOUCHES
  • ST_UNION
  • ST_UNION_AGG
  • ST_WITHIN
  • ST_X
  • ST_Y

分析查询

对于汇总分析查询,我们会限制使用用于合并多用户数据的函数。如果只是处理单个用户的数据,则允许使用所有汇总和分析函数。有关详情,请参阅下文的用户级汇总

汇总函数

函数 是否支持?
ANY_VALUE 支持
APPROX_QUANTILES 不具备
APPROX_TOP_COUNT 不具备
APPROX_TOP_SUM 不具备
ARRAY_AGG 不具备
ARRAY_CONCAT_AGG 不支持
AVG 具备
BIT_AND 不具备
BIT_OR 不具备
BIT_XOR 不支持
COUNT 支持
COUNTIF 具备
LOGICAL_AND 具备
LOGICAL_OR 具备
MAX 具备
MIN 具备
SUM 具备
CORR 具备
COVAR_POP 具备
COVAR_SAMP 具备
STDDEV_POP 具备
STDDEV_SAMP 具备
STDDEV 支持
STRING_AGG 不支持
VAR_POP 支持
VAR_SAMP 具备
VARIANCE 具备
APPROX_COUNT_DISTINCT 支持

分析函数

限制使用所有分析函数

HyperLogLog++ 函数

广告数据中心支持 HyperLogLog++ (HLL++) 函数。不过,这类函数使用的专门数据类型有更多限制。

支持的类型

类型 说明
ADH.USER_HLL ADH.USER_ID 类型的值汇总而成的草图
ADH.BYTE_HLL 由任何非 ID 类型的值汇总而成的草图

这些类型支持合并和提取基数估算值,但不支持直接转换为任何其他类型。它们无法从广告数据中心直接导出,因此必须使用 HLL_COUNT.EXTRACTHLL_COUNT.MERGE 才能得出查询输出结果。

HLL 草图可跨多个汇总层进行基数估算,但请注意,在广告数据中心,与单层中的 COUNT(DISTINCT) 相比,这类草图并没有带来实质性的性能改进。

支持的函数

函数名称 支持的类型 返回值类型
HLL_COUNT.EXTRACT ADH.USER_HLLADH.BYTE_HLL INT64
HLL_COUNT.INIT 所有标准支持类型ADH.USER_ID ADH.USER_ID 输出类型为 ADH.USER_HLL,其他为 ADH.BYTE_HLL
HLL_COUNT.INITNT.MERGE ADH.USER_HLLADH.BYTE_HLL INT64
HLL_COUNT.MERGE_PARTIAL ADH.USER_HLLADH.BYTE_HLL 与输入类型相同

限制

噪音注入:使用噪音注入运行查询时,不支持 HLL++ 函数。

用户级汇总

我们允许在按 user_id 进行分组或划分的 SELECT 语句中使用所有汇总函数和分析函数。为此,该语句前面的所有联接都必须以 user_id 为联接条件,从而清楚表明是在用户级别保留数据,如下例中所示:

CREATE TABLE paths AS (
SELECT ARRAY_AGG(campaign_id ORDER BY query_id.time_usec) AS path
FROM
  adh.google_ads_impressions
  LEFT JOIN adh.google_ads_clicks
    USING(query_id, user_id)
GROUP BY user_id)

用户名单查询

用户名单查询允许使用汇总函数,不支持使用分析函数。