Fonctions SQL autorisées

Pour des raisons de confidentialité, nous limitons les fonctions SQL que vous pouvez utiliser dans ADH.

Fonctions scalaires

Toutes les fonctions scalaires, à l'exception des suivantes, sont autorisées:

  • 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

Requêtes d'analyse

Pour les requêtes d'analyse agrégées, nous limitons les fonctions combinant des données provenant de plusieurs utilisateurs. Toutes les fonctions d'agrégation et d'analyse sont autorisées lors du traitement des données d'un seul utilisateur. Pour en savoir plus, consultez la section Agrégations au niveau de l'utilisateur ci-dessous.

Fonctions d'agrégation

Function Autorisé ?
ANY_VALUE Yes
APPROX_QUANTILES Non
APPROX_TOP_COUNT Non
APPROX_TOP_SUM Non
ARRAY_AGG Non
ARRAY_CONCAT_AGG Non
AVG Yes
BIT_AND Non
BIT_OR Non
BIT_XOR Non
COUNT Yes
COUNTIF Yes
LOGICAL_AND Yes
LOGICAL_OR Yes
MAX Yes
MIN Yes
SUM Yes
CORR Yes
COVAR_POP Yes
COVAR_SAMP Yes
STDDEV_POP Yes
STDDEV_SAMP Yes
STDDEV Yes
STRING_AGG Non
VAR_POP Yes
VAR_SAMP Yes
VARIANCE Yes
APPROX_COUNT_DISTINCT Yes

Fonctions analytiques

Toutes les fonctions analytiques sont limitées.

Agrégations au niveau de l'utilisateur

Nous autorisons toutes les fonctions d'agrégation et d'analyse dans les instructions SELECT qui regroupent ou partitionnent par user_id. Pour que cela fonctionne, les jointures précédentes doivent indiquer clairement que les données sont conservées au niveau de l'utilisateur en effectuant une jointure sur user_id, comme dans cet exemple:

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

Si cela n'est pas possible, car les ID sont distincts et ne sont pas joints, la requête doit regrouper ou partitionner tous les ID indépendants, comme dans cet exemple:

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

Requêtes de liste d'utilisateurs

Dans les requêtes de liste d'utilisateurs, les fonctions d'agrégation sont autorisées, et les fonctions analytiques ne sont pas acceptées.