PQL 語法和使用方式
PQL 是類似 SQL 的語言,用於查詢物件。PQL 語法為 與 SQL 類似,只是這裡說明的幾項差異這個區段 說明瞭 PQL 語法,以及如何使用此語法篩選各種物件類型。
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 詞組 。執行查詢""
(空白) string) 會傳回所有項目。示例:
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
- 加入多項條件,且必須符合所有條件 來自訂關係範例:
WHERE type = 'AGENCY' AND name IN ('CompanyNameA', 'CompanyNameB')
ORDER BY
- 依任一屬性排序傳回的結果 遞增 (「A」第一是ASC
) 或遞減 (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>
- 向 Deployment 中 物件。每個物件都會顯示不同的屬性,您可以依據 使用 PQL;您通常無法篩選 Search Ads 360 支援的所有屬性 物件,所以請查看下方清單,瞭解哪些屬性支援 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
父項 ID。範例:
WHERE parentId IS NULL
<bind variable>
- 您可以使用Value
物件來取代硬式編碼的 <value>值。繫結 在 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」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 PQL 資料表。
# 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)
彙整報表資料與委刊項資料
本範例使用 pandas 程式庫,因為這樣可以更輕鬆地處理表格資料。在這裡, 彙整報表資料與 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)