PQL सिंटैक्स और इस्तेमाल
ऑब्जेक्ट की क्वेरी करने के लिए, PQL एक SQL-जैसी भाषा है. PQL सिंटैक्स यह है यह SQL की तरह है, जिसमें कुछ अंतर यहां बताए गए हैं. इस सेक्शन पर इसमें PQL सिंटैक्स के बारे में बताया जाता है. साथ ही, यह भी बताया जाता है कि अलग-अलग ऑब्जेक्ट टाइप को फ़िल्टर करने के लिए, इसका इस्तेमाल कैसे किया जाता है.
पीक्यूएल सिंटैक्स की खास जानकारी इस तरह से दी जा सकती है:
[WHERE <condition> {[AND | OR] <condition> ...}]
[ORDER BY <property> [ASC | DESC]]
[LIMIT {[<offset>,] <count>} | {<count> OFFSET <offset>}]
<condition> := <property> { = | != } <value>
<condition> := <property> { = | != } <bind variable>
<condition> := <property> IN <list>
<condition> := NOT <property> IN <list>
<condition> := <property> LIKE <wildcard%match>
<condition> := <property> IS NULL
<bind variable> := :<name>
नोट
- PQL कीवर्ड केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) नहीं होते हैं.
- बाइंड पैरामीटर में इस्तेमाल किए जाने पर, स्ट्रिंग अपने-आप एस्केप हो जाती हैं. अगर ऐसा नहीं है, तो:
सिंगल कोट (अपॉस्ट्रॉफ़ी) के बीच की स्ट्रिंग के लिए, इनमें से किसी का भी इस्तेमाल न करें अतिरिक्त अपॉस्ट्रॉफ़ी को एकल उद्धरणों के रूप में लिखें.
उदाहरण:"WHERE name = 'Company''s name'"
कीवर्ड (केस-इनसेंसिटिव)
WHERE
- शून्य या उससे ज़्यादा शर्तों के सेट को दिखाता है, AND या OR वाक्यांशों का इस्तेमाल करके वैकल्पिक रूप से शामिल किया गया. आपके पास AND या OR वाक्यांशों को बंडल करने का विकल्प है ब्रैकेट के साथ.""
क्वेरी को एक्ज़ीक्यूट किया जा रहा है (खाली है स्ट्रिंग) सब कुछ लौटाता है.उदाहरण:
WHERE width = 728
WHERE width = 728 AND height = 90
WHERE (width = 728 AND height = 90) OR id IN (5008, 8745, 3487)
OR
- कई शर्तों को जोड़ता है, जिनमें से सिर्फ़ एक शर्त पूरी करनी होगी सही हो. अगर आपको किसी एक कॉलम के लिए कई वैल्यू में से किसी एक की जांच करनी है प्रॉपर्टी के लिए,IN
क्लॉज़ इस्तेमाल करें.उदाहरण:
WHERE width = 728 OR height = 90
AND
- ऐसी कई शर्तों को जोड़ता है जो सभी AND क्लॉज़ का इस्तेमाल करके संतुष्ट हैं.उदाहरण:
WHERE type = 'AGENCY' AND name IN ('CompanyNameA', 'CompanyNameB')
ORDER BY
- दिए गए नतीजों को इनमें से किसी एक क्रम में दिखाता है बढ़ते क्रम में (ASC
जहां 'A' पहले है) या घटते क्रम में (DESC
जहां 'A' आखिरी है) ऑर्डर. अगर दिशा नहीं है बताई गई है, तो यह डिफ़ॉल्ट रूप सेASC
पर सेट होती है. अगर यह क्लॉज़ शामिल नहीं है पहली फ़ील्ड में डिफ़ॉल्ट वैल्यूASC
है.उदाहरण:
WHERE id IN (5008, 8745, 3487) ORDER BY id
LIMIT
- वापस दिए जाने वाले नतीजों की संख्या. कॉन्टेंट बनानेLIMIT
में एक<offset>
भी शामिल हो सकता है, जो आपके नतीजे के सेट को ऑफ़सेट करने के लिए शुरुआत से कितनी पंक्तियां हैं.उदाहरण (दोनों उदाहरण एक जैसे नतीजे का सेट दिखाते हैं):
WHERE type = 'AGENCY' LIMIT 50 OFFSET 50
WHERE type = 'AGENCY' LIMIT 50,50
OFFSET
- नतीजे में ऑफ़सेट को शुरू करने के लिए सेट किया गया दिए गए मान. नतीजों को समझने के लिए इसका इस्तेमाल करें.उदाहरण (51-100 तक के नतीजे दिखाता है):
WHERE type = 'AGENCY' LIMIT 50 OFFSET 50
.<property>
- ऐसी प्रॉपर्टी जिनके बारे में यहां बताया गया है ऑब्जेक्ट है. हर ऑब्जेक्ट अलग-अलग प्रॉपर्टी दिखाता है, जिनके हिसाब से फ़िल्टर किया जा सकता है, PQL का इस्तेमाल कर रहे हैं; आप आम तौर पर उन सभी प्रॉपर्टी को फ़िल्टर नहीं कर सकते जिनका इस्तेमाल करके, ऑब्जेक्ट है, इसलिए नीचे दी गई सूची देखकर पता करें कि कौनसी प्रॉपर्टी PQL क्वेरी के साथ काम करती हैं. उदाहरण के लिए, जिन क्रिएटिव प्रॉपर्टी के हिसाब से फ़िल्टर किया जा सकता है उनमेंid
,name
,width
, औरheight
.<value>
- स्ट्रिंग की वैल्यू को इनसे कोट किया जाना चाहिए सिंगल (') कोटेशन का निशान होना चाहिए. नंबर की वैल्यू को कोट किया जा सकता है या कोट नहीं किया जा सकता. वाइल्डकार्ड समर्थित नहीं हैं.IN
- प्रॉपर्टी की वैल्यू की तुलना, सूची; अगर कोई मैच करता है, तो वह एक पॉज़िटिव मैच होता है.IN
ऑपरेटर कई=
क्वेरी के बराबर होता है. हर वैल्यू के लिए एक वैल्यू होती है, जिन्हें एक साथ OR किया जाता है. ये मान, कॉमा लगाकर अलग की गई सूची के तौर पर दिए गए हैं. ब्रैकेट में लिखी गई वैल्यू: (a, b, c). सूची में मौजूद सभी वैल्यू मूल्यांकन किया गया.उदाहरण:
WHERE name IN ('CompanyNameA', 'CompanyNameB')
NOT IN
- यह फ़ंक्शन हर आइटम के साथ प्रॉपर्टी की वैल्यू की तुलना करता है सूची में मौजूद हो; अगर कोई मिलान नहीं होता है, तो यह एक सकारात्मक मिलान है.NOT IN
ऑपरेटर कई!=
क्वेरी के बराबर होता है. हर वैल्यू के लिए एक वैल्यू होती है, जिन्हें एक साथ OR किया जाता है. ये मान, कॉमा लगाकर अलग की गई सूची के तौर पर दिए गए हैं. ब्रैकेट में लिखी गई वैल्यू: (a, b, c). सूची में मौजूद सभी वैल्यू मूल्यांकन किया गया.उदाहरण:
WHERE NOT name IN ('CompanyNameA', 'CompanyNameB')
LIKE
- इससे आपको वाइल्डकार्ड का इस्तेमाल करके ऑब्जेक्ट के लिए क्वेरी करने की सुविधा मिलती है स्ट्रिंग मैचिंग. प्रतिशत का चिह्न (%
) शून्य, एक या एक से ज़्यादा वर्ण इस्तेमाल करें. मेल खाने वाली खोज स्ट्रिंग को बंद करने के लिए पेयर का इस्तेमाल करें.उदाहरण:
WHERE name LIKE 'foo %searchString% bar'
WHERE name LIKE 'Aus%'
IS NULL
- आपको किसी तय नहीं की गई प्रॉपर्टी की वैल्यू. इसका क्लासिक उदाहरण है कि शून्य वालेAdUnit
के लिए क्वेरी करकेAdUnit
रूट करें पैरंट आईडी.उदाहरण:
WHERE parentId IS NULL
.<bind variable>
- आपValue
का इस्तेमाल कर सकते हैं हार्ड कोड किए गए <value> के बजाय ऑब्जेक्ट आपकी PQL क्वेरी में मौजूद वैल्यू. बाइंड चर को PQL में बिना रिक्ति वाले स्ट्रिंग नाम का इस्तेमाल करके, शुरू किया जाता है जिसके साथ : (कोलन) हो.उदाहरण (क्वेरी बनाता है और उसकी जगह दो वैरिएबल डालता है हार्ड कोड की गई
id
औरstatus
प्रॉपर्टी वैल्यू):// Create two mapped parameters: id and status
String_ValueMapEntry[] values = new String_ValueMapEntry[2];
values[0] = new String_ValueMapEntry("id", new NumberValue(null, "123"));
values[1] = new String_ValueMapEntry("status", new TextValue(null, "APPROVED"));
// Create our statement and map our bind variables
Statement statement = new Statement();
statement.setQuery("WHERE id = :id AND status = :status LIMIT 500");
statement.setValues(values);DateTime
फ़ील्ड - आप तारीख और समय के हिसाब से फ़िल्टर कर सकते हैं बाइंड वैरिएबल कोDateTime
वैल्यू असाइन करना या स्ट्रिंग को ISO 8601 के हिसाब से फ़ॉर्मैट किया गया हो.// Create a bind variable: startDateTime
String_ValueMapEntry[] values = new String_ValueMapEntry[1];
values[0] = new String_ValueMapEntry("startDateTime", new DateTimeValue(null, dateTime));
// Create our statement and map our bind variables
Statement statement = new Statement();
statement.setQuery("WHERE endDateTime < '2019-01-01T00:00:00' AND startDateTime > :startDateTime LIMIT 500");
statement.setValues(values);
PQL के साथ मैच टेबल फ़ेच की जा रही हैं
मैच टेबल में मौजूद रॉ वैल्यू को देखने का तरीका मिलता है ऐसी डेटा ट्रांसफ़र फ़ाइलें जिनकी मदद से, विज्ञापन दिखाने से जुड़ी जानकारी (जैसे, विज्ञापन, इकाई या लाइन आइटम) का इस्तेमाल किया जाता है.
अगर आप ReportService के ज़रिए रिपोर्ट चला रहे हैं या डेटा ट्रांसफ़र की सुविधा की मदद से डेटा ट्रांसफ़र करें रिपोर्ट होती हैं, तो हो सकता है कि आप अपनी रिपोर्ट के डेटा को अतिरिक्त फ़ील्ड. उदाहरण के लिए, LINE_ITEM_ID डाइमेंशन वाली रिपोर्ट में इसके अलावा, ऐसा डेटा ट्रांसफ़र इवेंट भी किया जा सकता है जिसमें LineItemId फ़ील्ड हो, तो एक मैच टेबल बनाई जा सकती है, जिसमें हर लाइन आइटम के शुरू होने की तारीख शामिल हो, खत्म होने की तारीख, टाइप, स्थिति, और काम के दूसरे एट्रिब्यूट.
मिलान की इस सुविधा को पूरा करने के कई तरीके हैं:
- पहले से बनी मैच टेबल का इस्तेमाल करना BigQuery डेटा ट्रांसफ़र सेवा. ध्यान दें कि इन मैच टेबल में, सभी इकाइयों का फ़ील्ड शामिल नहीं होता है.
- एक कारगर तरीका यह है कि आप किसी भी उपलब्ध PublisherQueryLanguageService' का इस्तेमाल करें टेबल चुनें.
- अगर इकाई के लिए कोई BigQuery या PQL टेबल नहीं है या टेबल में आपके काम के फ़ील्ड मौजूद नहीं हैं, तो इकाई की सेवा सीधे तौर पर ऐक्सेस की जा सकती है, जैसे कि OrderService.
रिपोर्ट क्वेरी सेट अप करना
सबसे पहले कोई रिपोर्ट जॉब बनाएं और रिपोर्ट पैरामीटर, जैसे कि डाइमेंशन, कॉलम, और तारीख की सीमा चुनें.
# Set the start and end dates of the report to run (past 8 days).
end_date = date.today()
start_date = end_date - timedelta(days=8)
# Create report job.
report_job = {
'reportQuery': {
'dimensions': ['LINE_ITEM_ID', 'LINE_ITEM_NAME'],
'columns': ['AD_SERVER_IMPRESSIONS', 'AD_SERVER_CLICKS',
'AD_SERVER_CTR', 'AD_SERVER_CPM_AND_CPC_REVENUE',
'AD_SERVER_WITHOUT_CPD_AVERAGE_ECPM'],
'dateRangeType': 'CUSTOM_DATE',
'startDate': start_date,
'endDate': end_date
}
}
रिपोर्ट डाउनलोड करना
# Initialize a DataDownloader.
report_downloader = client.GetDataDownloader(version='v202408')
try:
# Run the report and wait for it to finish.
report_job_id = report_downloader.WaitForReport(report_job)
except errors.AdManagerReportError as e:
print('Failed to generate report. Error was: %s' % e)
with tempfile.NamedTemporaryFile(
suffix='.csv.gz', mode='wb', delete=False) as report_file:
# Download report data.
report_downloader.DownloadReportToFile(
report_job_id, 'CSV_DUMP', report_file)
Line_Item PQL टेबल से डेटा डाउनलोड करें
अपनी रिपोर्ट को अन्य लाइन आइटम डेटा से मैच करने के लिए, Line_Item का इस्तेमाल करें पीक्यूएल टेबल.
# Create a PQL query to fetch the line item data
line_items_pql_query = ('SELECT Id, LineItemType, Status FROM LineItem')
# Download the response from PQL select statement
line_items = report_downloader.DownloadPqlResultToList(line_items_pql_query)
लाइन आइटम डेटा के साथ रिपोर्ट डेटा को जोड़ना
इस उदाहरण में पांडा का इस्तेमाल किया गया है क्योंकि यह टेबल में उपलब्ध डेटा के साथ काम करना ज़्यादा आसान बनाता है. यहां, इसका इस्तेमाल किया गया है मैच टेबल बनाने के लिए, PQL डेटा के साथ रिपोर्ट डेटा को जोड़ा जा सकता है.
# Use pandas to join the two csv files into a match table
report = pandas.read_csv(report_file.name)
line_items = pandas.DataFrame(data=line_items[1:], columns=line_items[0])
merged_result = pandas.merge(report, line_items,
left_on='Dimension.LINE_ITEM_ID', right_on='id')
merged_result.to_csv('~/complete_line_items_report.csv', index=False)