פונקציות SQL מותרות

מטעמי פרטיות, אנחנו מגבילים את פונקציות ה-SQL שבהן אפשר להשתמש ב-ADH.

פונקציות סקלר

כל הפונקציות הסקלריות מותרות, למעט הפעולות הבאות:

  • 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++

ב-Ads Data Hub יש תמיכה בפונקציות HyperLogLog++ (HLL++). עם זאת, הם משתמשים בסוגי נתונים מיוחדים עם מגבלות רבות יותר.

סוגים נתמכים

סוג תיאור
ADH.USER_HLL רישום שנצבר מערכים מסוג ADH.USER_ID
ADH.BYTE_HLL סקיצה שנצברה מערכים מכל סוג שהוא שאינו מזהה

הסוגים האלה תומכים במיזוג ובחילוץ לאומדני עוצמה (cardinality), ולא תומכים בהמרה ישירה מכל סוג אחר. אי אפשר לייצא אותם ישירות מ-Ads Data Hub, ולכן צריך להשתמש ב-HLL_COUNT.EXTRACT או ב-HLL_COUNT.MERGE לפני שהם מגיעים לפלט השאילתה.

סקיצות HLL מאפשרות לבצע הערכה של עוצמה (cardinality) בשכבות צבירה מרובות, אבל חשוב לזכור שב-Ads Data Hub הם לא מספקים שיפור משמעותי בביצועים בהשוואה ל-COUNT(DISTINCT) בשכבה אחת.

פונקציות נתמכות

שם פונקציה סוגים נתמכים סוג הערך שמוחזר
HLL_COUNT.EXTRACT ADH.USER_HLL, ADH.BYTE_HLL INT64
HLL_COUNT.INIT כל הסוגים הרגילים שנתמכים, ADH.USER_ID ADH.USER_HLL עבור קלט ADH.USER_ID, אחרת, 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++ כשמריצים שאילתה באמצעות החדרת רעש.

צבירת נתונים ברמת המשתמש

אנחנו מתירים את כל הפונקציות המצטברות והניתוחיות בהצהרות SELECT, שמקבצות או מחיצות לפי user_id. כדי שהרכיב הזה יפעל, כל איחוד קודם צריך להבהיר שהנתונים נשמרים ברמת המשתמש על ידי הצטרפות אל 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)

שאילתות לגבי רשימת משתמשים

בשאילתות של רשימת משתמשים, מותר להשתמש בפונקציות צבירה, ואין תמיכה בפונקציות אנליטיות.