В целях обеспечения конфиденциальности мы запрещаем использовать в ADH некоторые функции 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 |
Да |
Аналитические функции
Все аналитические функции запрещены.
Агрегирование на уровне пользователя
Разрешено использовать все функции агрегирования и аналитические функции в инструкциях SQL SELECT
, которые выполняют группирование или разделение по user_id
. Для этого по предшествующим объединениям должно быть очевидно, что данные остаются на уровне пользователя. Для этого следует использовать объединение по user_id
, например:
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
Если это невозможно из-за наличия отдельных идентификаторов, которые не объединяются, в запросе следует выполнять группирование или разделение по независимым идентификаторам, например:
SELECT
a.user_id AS user_a,
b.user_id AS user_b,
ARRAY_AGG(DISTINCT campaign_id) campaigns
FROM
adh.google_ads_impressions a
JOIN adh.google_ads_impressions b USING (campaign_id)
GROUP BY 1, 2
Запросы по списку пользователей
В запросах по списку пользователей функции агрегирования разрешены, а аналитические функции не поддерживаются.