出于隐私保护方面的考虑,我们会限制可在广告数据中心内使用的 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.EXTRACT
或 HLL_COUNT.MERGE
才能得出查询输出结果。
HLL 草图可跨多个汇总层进行基数估算,但请注意,在广告数据中心,与单层中的 COUNT(DISTINCT)
相比,这类草图并没有带来实质性的性能改进。
支持的函数
函数名称 | 支持的类型 | 返回值类型 |
---|---|---|
HLL_COUNT.EXTRACT
|
ADH.USER_HLL 、ADH.BYTE_HLL |
INT64
|
HLL_COUNT.INIT
|
所有标准支持类型、ADH.USER_ID |
ADH.USER_ID 输出类型为 ADH.USER_HLL ,其他为 ADH.BYTE_HLL |
HLL_COUNT.INITNT.MERGE
|
ADH.USER_HLL 、ADH.BYTE_HLL |
INT64
|
HLL_COUNT.MERGE_PARTIAL
|
ADH.USER_HLL 、ADH.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)
用户名单查询
用户名单查询允许使用汇总函数,不支持使用分析函数。