Składnia i zastosowanie PQL
PQL to język podobny do SQL służący do wysyłania zapytań do obiektów. Składnia PQL jest podobna do składni SQL, ale występują pewne różnice, które opisaliśmy poniżej. Ta sekcja opisuje składnię PQL i opisuje, jak używać jej do filtrowania różnych typów obiektów.
Składnię PQL można podsumować w ten sposób:
[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>
Uwagi
- W słowach kluczowych PQL wielkość liter nie ma znaczenia.
- Ciągi znaków są automatycznie ujęte w znaki ucieczki, gdy są używane w parametrach bind. W innym przypadku:
W przypadku ciągu znaków w pojedynczych cudzysłowach (apostrofów) zmień znaczenie dowolnego ciągu jako dodatkowy apostrof, zapisując go jako parę pojedynczych cudzysłowów.
Przykład:"WHERE name = 'Company''s name'"
.
Słowa kluczowe (wielkość liter nie jest rozróżniana)
WHERE
– wyraża zbiór zero lub więcej warunków, opcjonalnie połączone za pomocą wyrażeń AND i OR. Wyrażenia I i LUB są łączone w grupy, w nawiasach. Wykonywanie zapytania""
(pusty ciąg znaków) zwraca wszystko.Przykłady:
WHERE width = 728
WHERE width = 728 AND height = 90
WHERE (width = 728 AND height = 90) OR id IN (5008, 8745, 3487)
OR
– łączy wiele warunków, z których tylko jeden musi być prawdziwy. Jeśli chcesz sprawdzić, czy dana właściwość ma dowolną z kilku wartości, użyj klauzuliIN
.Przykład:
WHERE width = 728 OR height = 90
.AND
– łączy wiele warunków, które muszą być spełnione, za pomocą klauzuli AND.Przykład:
WHERE type = 'AGENCY' AND name IN ('CompanyNameA', 'CompanyNameB')
.ORDER BY
– sortuje wyniki w jednej z tych rosnąco (ASC
, gdzie „A” jest pierwsze) lub malejąco (DESC
, gdzie „A” to ostatnie). Jeśli nie podasz kierunku, zostanie użyta wartość domyślnaASC
. Jeśli ta klauzula nie jest uwzględniona, domyślną wartością pierwszego pola jestASC
.Przykład:
WHERE id IN (5008, 8745, 3487) ORDER BY id
.LIMIT
– liczba wyników do zwrócenia.LIMIT
może też zawierać<offset>
, czyli liczbę wierszy od początku zbioru wyników.Przykłady (oba przykłady zwracają ten sam zbiór wyników):
WHERE type = 'AGENCY' LIMIT 50 OFFSET 50
WHERE type = 'AGENCY' LIMIT 50,50
OFFSET
– przesunięcie w zbiorze wyników, od którego mają się zaczynać zwracane wartości. Służy do przeglądania wyników.Przykład (zwraca wyniki 51–100):
WHERE type = 'AGENCY' LIMIT 50 OFFSET 50
.<property>
– jedna z właściwości udostępnianych przez tag obiektu. Każdy obiekt ujawnia różne właściwości, według których można filtrować, używając PQL; z reguły nie można filtrować według wszystkich właściwości obsługiwanych przez obiektu. Sprawdź na liście poniżej, które właściwości obsługują zapytania PQL. Na przykład właściwości kreacji, według których możesz filtrować, zawierająid
,name
,width
iheight
.<value>
– ciągi znaków powinny być ujęte w cudzysłów pojedynczy cudzysłów ('). Wartości liczbowe mogą być w cudzysłowie lub bez cudzysłowów. Symbole wieloznaczne nie są obsługiwane.IN
– porównuje wartość właściwości z każdym elementem w kolumnie list; jeśli któraś z nich jest zgodna, jest to dopasowanie dodatnie. OperatorIN
jest równoważny wielu zapytaniom=
, po jednym dla każdej wartości, które są połączone operatorem LUB. Wartości są podawane jako lista wartości rozdzielonych przecinkami, zamknięta w nawiasach: (a, b, c). Wszystkie wartości na liście są oceniono.Przykład:
WHERE name IN ('CompanyNameA', 'CompanyNameB')
.NOT IN
– porównuje wartość właściwości z poszczególnymi elementami. na liście; jeśli żadna z nich nie pasuje, jest zgodna z dodatnią.NOT IN
jest odpowiednikiem wielu zapytań!=
, po jednym dla każdej wartości, połączonych operatorem LUB. Wartości są podawane jako lista wartości rozdzielonych przecinkami, zamknięta w nawiasach: (a, b, c). Wszystkie wartości na liście są oceniono.Przykład:
WHERE NOT name IN ('CompanyNameA', 'CompanyNameB')
.LIKE
– umożliwia wysyłanie zapytań dotyczących obiektów przy użyciu symboli wieloznacznych. dopasowania ciągu. Znak procenta (%
) oznacza 0, 1 lub wiele znaków. Użyj pary do ujmowania dopasowanego ciągu wyszukiwania.Przykłady:
WHERE name LIKE 'foo %searchString% bar'
WHERE name LIKE 'Aus%'
IS NULL
– umożliwia wysyłanie zapytań dotyczących obiektów z atrybutem niezdefiniowanej wartości właściwości. Klasycznym przykładem jest wysyłanie zapytań o parametr pierwiastekAdUnit
, wysyłając zapytanie oAdUnit
o wartości null identyfikator nadrzędny.Przykład:
WHERE parentId IS NULL
.<bind variable>
– możesz użyć usługiValue
obiektów zamiast wpisanego na stałe elementu <value> w zapytaniu PQL. Powiązanie jest wskazywana w PQL za pomocą nazwy ciągu znaków bez spacji, zaczynając dwukropkiem.Przykład (tworzy zapytanie i wprowadza 2 zmienne w miejsce zakodowana na stałe właściwość
id
istatus
wartości):// 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);
- pola
DateTime
– możesz filtrować według daty i godziny, przypisując wartośćDateTime
zmiennej bind lub używając ciągu tekstowego sformatowanego zgodnie z 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);
Pobieram tabele odpowiedników z PQL
Tabele odpowiedników zapewniają mechanizm wyszukiwania nieprzetworzonych wartości zawartych w plikach przesyłania danych, co umożliwia dopasowywanie informacji o wyświetlaniu reklam (np. jednostki reklamowej lub elementu zamówienia) do wstępnie przypisanych wartości przechowywanych w bazie danych.
Jeśli raporty są generowane za pomocą usługi ReportService lub raportów usługi Przenoszenie danych, możesz uzupełnić dane raportu o dodatkowe pola. Na przykład w raporcie z wymiarem LINE_ITEM_ID. lub ze zdarzeniem przenoszenia danych, które ma pole LineItemId, możesz utworzyć tabelę odpowiedników, która zawiera datę rozpoczęcia każdego elementu zamówienia, datę zakończenia, typ, stan i inne przydatne atrybuty.
Istnieje kilka sposobów realizacji tej funkcji dopasowania:
- Użyj przygotowanych przez nas tabel odpowiedników BigQuery Data Transfer Service. Pamiętaj, że te tabele dopasowania nie zawierają wszystkich pól elementów.
- Skuteczną metodą jest użycie dowolnej z dostępnych w języku angielskim usługi PublisherQueryLanguageService .
- Jeśli dla elementu nie ma tabeli BigQuery ani PQL albo w tabeli brakuje wymaganych pól, możesz to zrobić bezpośrednio z usługi encji, na przykład OrderService.
Python
Konfigurowanie zapytania o raport
Zacznij od utworzenia zadania raportu i określ parametry raportu, takie jak wymiarów, kolumn i zakresu dat.
# 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 } }
Pobieranie raportu
# Initialize a DataDownloader. report_downloader = client.GetDataDownloader(version='v202508') 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)
Pobieranie danych z tabeli PQL Line_Item
Aby dopasować raport do dodatkowych danych elementów zamówienia, możesz użyć parametru Line_Item Tabela 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)
Łączenie danych raportu z danymi elementu zamówienia
W tym przykładzie użyto parametru pandas ponieważ znacznie ułatwia pracę z danymi w postaci tabeli. W tym przypadku służy do złączania danych raportu z danymi PQL w celu utworzenia tabeli dopasowania.
# 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)