टेबल बनाना

टेम्पररी टेबल और परसिस्टेंट टेबल की मदद से, क्वेरी को आसानी से समझा और मैनेज किया जा सकता है. क्वेरी को एक्ज़ीक्यूट करने के लिए ज़रूरी संसाधनों को कम किया जा सकता है. इसके लिए, ऐसे इंटरमीडिएट नतीजे बनाएं जिनका दोबारा इस्तेमाल किया जा सके. साथ ही, आपको कुछ समय के लिए उपलब्ध डेटा को इकट्ठा न करने का विकल्प भी मिलता है. इससे परफ़ॉर्मेंस बेहतर होती है.

बनाई गई टेबल पर, स्टैटिक निजता जांच, अनुमति वाले फ़ंक्शन, और फ़ील्ड जॉइन करने की सीमाएं लागू होती हैं. ये सीमाएं, Ads Data Hub में हर जगह लागू होती हैं. BigQuery में फ़ाइनल SELECT स्टेटमेंट से डेटा आउटपुट करते समय, निजता की सामान्य जांच लागू होती हैं.

टेबल बनाने के लिए, 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, एसक्यूएल सिंटैक्स का भी इस्तेमाल करता है. इससे, निजता से जुड़ी जांच के दायरे में आने वाली इंटरमीडिएट नतीजे वाली टेबल बनाई जा सकती हैं.

निजता जांच के दायरे में आने वाली टेबल बनाने के लिए, अपनी क्वेरी में 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 में लागू होने वाली निजता जांच लागू होती है.

किसी टेबल को मुख्य एसक्यूएल एक्सप्रेशन के साथ एक्सपोर्ट करने का सिंटैक्स यह है:

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 कॉलम हैं.
  • दूसरी टेबल, नौकरी के तर्कों के डेस्टिनेशन टेबल फ़ील्ड में दी गई जगह पर बनाई जाती है. इसमें ct कॉलम होता है.

फ़िल्टर की गई लाइन की खास जानकारी जोड़ना

इन टेबल में, फ़िल्टर की गई लाइन की खास जानकारी भी जोड़ी जा सकती है. फ़िल्टर की गई लाइन की खास जानकारी के बारे में पढ़ें.

रनटाइम के दौरान कई टेबल के नाम देना

क्वेरी में एक से ज़्यादा टेबल बनाते समय, उन्हें नाम देने के दो तरीके हैं:

  • एसक्यूएल में टेबल के नाम साफ़ तौर पर बताएं. इसके लिए, इस फ़ॉर्मैट का इस्तेमाल करें: PROJECT_NAME.DATASET.TABLE_NAME.
  • एसक्यूएल में पैरामीटर को प्लेसहोल्डर के तौर पर इस्तेमाल करें. इसके बाद, रनटाइम में टेबल के नाम डालें.

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 स्टेटमेंट, टेबल स्कीमा में बदलाव करने की सुविधा के साथ काम नहीं करते हैं. अगर आपको किसी मौजूदा रिपोर्ट टेबल में कॉलम जोड़ने या बदलने हैं, तो Ads Data Hub में कोई जॉब चलाने से पहले, BigQuery में टेबल स्कीमा अपडेट करें. इसके अलावा, 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;