יצירת טבלאות

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

הטבלאות שנוצרות כפופות לאותן בדיקות פרטיות סטטיות, פונקציות מותרות ומגבלות על צירוף שדות שנאכפות בכל מערכת Ads Data Hub. במהלך הפלט של הנתונים מהדוח הסופי של SELECT אל BigQuery, מתבצעות בדיקות פרטיות רגילות.

כדי ליצור טבלאות, פועלים לפי התחביר של BigQuery:

CREATE [OR REPLACE] [TEMP | TEMPORARY] TABLE TABLE_NAME
 [OPTIONS(privacy_checked_export=<true | false>)] AS query_statement;

אין תמיכה בסעיפים הבאים:

  • IF NOT EXISTS
  • PARTITION BY
  • CLUSTER BY

טבלאות זמניות

טבלאות זמניות (או temp) משפרות את הקריאות של השאילתות ומאפשרות ליצור תוצאות ביניים שעשויות לכלול נתונים לא מצטברים.

טבלאות זמניות:

  • קיימים רק ברמת הסשן, ותוקפם פג אחרי ביצוע השאילתה
  • אפשר להשתמש בהן רק בתוך השאילתה שבה הן נוצרו
  • יכול להיות שהמערכת תאחסן נתונים לא מצטברים שעוד לא עברו בדיקות פרטיות
  • מופנים לפי שם ללא מרחב שמות נדרש

כדי ליצור טבלת זמנית, משתמשים בהצהרת CREATE TEMP TABLE. בדוגמה הזו נוצרת טבלה זמנית לאחסון התוצאות של שאילתה, ואז נעשה שימוש בטבלה הזמנית בשאילתת משנה:

-- Get a list of creative IDs and store in a temporary table called creative_list:
CREATE TEMP TABLE creative_list AS (
  SELECT
    adgroup_id,
    advertiser_id,
    creative_id
  FROM
    adh.dv360_youtube_impressions
);
-- Return creatives with a count of impressions greater than 100
SELECT
  creative_id,
  COUNT(*) AS imps
FROM
  creative_list
WHERE
  imps > 100
GROUP BY
  creative_id;

טבלאות לשימוש חוזר

אם אתם צריכים ליצור טבלת ביניים לשימוש בשאילתות אחרות, אתם יכולים ליצור טבלה קבועה. התחביר זהה לזה של טבלאות זמניות, בלי סעיף TEMP. הטבלאות האלה תקפות למשך 72 שעות. אם כבר קיימת טבלה עם השם שנבחר, היא תידרס.

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

טבלאות לשימוש חוזר:

  • התוקף יפוג אחרי 72 שעות
  • אפשר להשתמש בו מחוץ לשאילתה שיצרה אותו
  • יכול להיות שהמערכת תאחסן נתונים לא מצטברים שעוד לא עברו בדיקות פרטיות
  • ההפניה אליהם מתבצעת דרך מרחב השמות tmp, אבל אפשר גם להפנות אליהם לפי שם באותה שאילתה

כדי ליצור טבלה קבועה, משתמשים בהצהרה CREATE TABLE. בדוגמה הזו נוצרת טבלה קבועה לאחסון התוצאות של שאילתה, ואז נעשה שימוש בטבלה הקבועה בשאילתה מאוחרת יותר:

שאילתה 1

-- Get a list of creative IDs and store in a persistent table called creative_list:
CREATE TABLE creative_list AS (
  SELECT
    adgroup_id,
    advertiser_id,
    creative_id
  FROM
    adh.dv360_youtube_impressions
);

-- Return the total count of impressions in the table
SELECT
  COUNT(*) AS imps
FROM
  tmp.creative_list -- Alternative: creative_list

שאילתה 2

-- Return creatives which had more than 100 impressions
SELECT
  creative_id,
  COUNT(*) AS imps
FROM
  tmp.creative_list
WHERE
  imps > 100
GROUP BY
  creative_id;

הפעלת בדיקות פרטיות

בנוסף, מערכת Ads Data Hub תומכת בתחביר SQL ליצירת טבלאות של תוצאות ביניים שחלות עליהן בדיקות פרטיות.

כדי ליצור טבלה שחלות עליה בדיקות פרטיות, מוסיפים את הסעיף OPTIONS לשאילתה:

OPTIONS(privacy_checked_export=true)

בדוגמה הזו נוצרת טבלה זמנית ברמת הסשן ומבוצעות בדיקות לאימות הפרטיות:

-- Get a list of creative IDs and store in a temporary table called creative_list:
CREATE TEMP TABLE creative_list OPTIONS(privacy_checked_export=true) AS (
  SELECT
    adgroup_id,
    advertiser_id,
    creative_id
  FROM
    adh.dv360_youtube_impressions
);

בדוגמה הזו נוצר טבלה קבועה, מוחלים עליה בדיקות פרטיות והיא מיוצאת לפרויקט שלכם ב-Google Cloud:

-- Get a list of creative IDs and store in a persistent table called creative_list:
CREATE TABLE project_name.dataset_name.creative_list` OPTIONS(privacy_checked_export=true) AS (
  SELECT
    adgroup_id,
    advertiser_id,
    creative_id
  FROM
    adh.dv360_youtube_impressions
);

ייצוא של כמה טבלאות באמצעות שאילתה אחת

ב-Ads Data Hub יש תמיכה בתחביר SQL גמיש לייצוא של טבלאות תוצאות שניתן לראות במקרים שבהם טבלה אחת לכל שאילתה לא מספיקה. הטבלאות האלה כפופות לאותן בדיקות פרטיות שנאכפות בכל מערכת Ads Data Hub.

התחביר לייצוא טבלה לצד ביטוי ה-SQL הראשי הוא:

CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
  OPTIONS(privacy_checked_export=true) AS query_statement;

לדוגמה, כדי לייצא טבלה ליעד BigQuery‏ PROJECT_NAME.DATASET.TABLE_NAME שמכילה ספירה של שורות לכל מזהה קמפיין מהטבלה adh.google_ads_impressions:

CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
  OPTIONS(privacy_checked_export=true) AS
  SELECT campaign_id, COUNT(*) AS ct
  FROM adh.google_ads_impressions
  GROUP BY campaign_id;

בדוגמה הבאה מוסבר איך להשתמש באותה שאילתה כדי לייצא שתי טבלאות ל-BigQuery:

CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
  OPTIONS(privacy_checked_export=true) AS
  SELECT campaign_id, COUNT(*) AS ct
  FROM adh.google_ads_impressions
  GROUP BY campaign_id;

CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME_2
  OPTIONS(privacy_checked_export=true) AS
  SELECT advertiser_id, COUNT(*) AS ct
  FROM adh.google_ads_impressions
  GROUP BY advertiser_id;

אפשר גם להפנות לטבלאות באותה שאילתה שבה הן נוצרו. לדוגמה, השאילתה הבאה יוצרת פלט של שתי טבלאות:

CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
  OPTIONS(privacy_checked_export=true) AS
  SELECT campaign_id, COUNT(*) AS ct
  FROM adh.google_ads_impressions
  GROUP BY campaign_id;

SELECT ct FROM PROJECT_NAME.DATASET.TABLE_NAME;
  • הטבלה הראשונה נוצרת ב-PROJECT_NAME.DATASET.TABLE_NAME,עם העמודות campaign_id ו-ct.
  • הטבלה השנייה נוצרת במיקום שצוין בשדה Destination table של ארגומנטי העבודה, עם העמודה ct.

הוספת סיכום של שורות שסוננו

אפשר גם להוסיף לטבלאות האלה סיכום של השורות שסוננו. מידע נוסף על סיכומי שורות מסוננים

מתן שמות לכמה טבלאות בזמן ריצה

כשיוצרים כמה טבלאות בשאילתה, יש שתי דרכים לתת להן שמות:

  • צריך לציין את שמות הטבלאות ב-SQL באופן מפורש באמצעות הפורמט הבא: PROJECT_NAME.DATASET.TABLE_NAME.
  • משתמשים בפרמטרים כ-placeholder ב-SQL, ואז נותנים שמות לטבלאות בזמן הריצה.

יצירה ועדכון של טבלאות ב-BigQuery

ב-Ads Data Hub אפשר להשתמש ישירות בהצהרות מסוימות של BigQuery בסקריפטים, וכך להוסיף שורות לטבלת תוצאות קיימת במקום ליצור טבלה חדשה לכל משימה. ההצהרות האלה צריכות להפנות לנתיב ישיר של טבלה בפרויקט BigQuery, ולא יכולות לגשת ישירות לטבלאות או לאפשרויות של Ads Data Hub (כמו privacy_checked_export).

הצהרות נתמכות:

שאילתה לדוגמה:

-- Compute new data for the current job. This table can be used with MERGE.
CREATE TEMP TABLE new_data OPTIONS(privacy_checked_export=TRUE) AS
SELECT
  DATE(event_time, @time_zone) AS event_date,
  <more grouping keys>,
  COUNT(*) AS impressions,
  <more metrics>
FROM ...
GROUP BY ALL;

-- Initialize a result table on the first run of the query, which may include
-- date partitioning and/or clustering for efficiency.
CREATE TABLE IF NOT EXISTS PROJECT_NAME.DATASET.TABLE_NAME (<columns>)
PARTITION BY event_date CLUSTER BY ...
OPTIONS(partition_expiration_days=365);

-- Atomically insert new results or update existing ones.
MERGE PROJECT_NAME.DATASET.TABLE_NAME a
USING new_data b ON a.data_date = b.data_date AND <more grouping keys>
WHEN MATCHED THEN
  UPDATE SET a.impressions = b.impressions, <more metrics>
WHEN NOT MATCHED THEN
  INSERT (<all columns>) VALUES(<all columns>);

שימו לב: אי אפשר לשנות את סכימת הטבלה באמצעות הצהרות MERGE. אם אתם צריכים להוסיף או לשנות עמודות בטבלת דוחות קיימת, אתם יכולים לעדכן את סכימת הטבלה ב-BigQuery לפני הפעלת משימה ב-Ads Data Hub, או להפעיל משימה ב-Ads Data Hub כדי להעתיק את הטבלה עם סכימה ואפשרויות מעודכנות. לדוגמה:

CREATE OR REPLACE TABLE PROJECT_NAME.DATASET.TABLE_NAME
PARTITION BY event_date CLUSTER BY ... OPTIONS(...) AS
SELECT
  <new columns>
FROM PROJECT_NAME.DATASET.TABLE_NAME;