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 키워드는 대소문자를 구분하지 않습니다.
- 문자열은 바인드 매개변수에 사용될 때 자동으로 이스케이프됩니다. 그렇지 않은 경우 다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
작은따옴표 (아포스트로피)로 묶인 문자열의 경우 모두 이스케이프 처리합니다. 작은따옴표 쌍으로 작성하여 추가 아포스트로피를 줄 수 있습니다.
예:"WHERE name = 'Company''s name'"
키워드 (대소문자를 구분하지 않음)
WHERE
- 0개 이상의 조건 집합을 표현합니다. 선택사항으로 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
- 여러 조건을 조인합니다. 둘 중 하나만 충족해야 합니다. true여야 합니다. 단일 속성에 대해 여러 값 중 하나라도 확인하려면 속성을 사용하려면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>
- 객체를 지정합니다. 각 객체는 다양한 속성을 노출하는 데 PQL을 사용하여 일반적으로 지원되는 모든 속성을 필터링할 수는 없으며 객체가 있으므로, 아래 목록을 확인하여 PQL 쿼리를 지원하는 속성을 확인하세요. 예를 들어 필터링할 수 있는 광고 소재 속성은id
,name
,width
,height
<value>
- 문자열 값은 사용합니다. 숫자 값은 따옴표로 묶거나 묶지 않을 수 있습니다. 와일드 카드 지원되지 않습니다.IN
- 속성의 값을 다음의 각 항목과 비교합니다. list; 하나라도 일치하면 양의 일치입니다.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
- 와일드 카드를 사용하여 객체를 쿼리할 수 있습니다. 문자열 일치입니다. 퍼센트 기호 (%
)는 0, 1 또는 여러 문자가 있을 수 있습니다. 쌍을 사용하여 일치시킬 검색 문자열을 묶습니다.예:
WHERE name LIKE 'foo %searchString% bar'
WHERE name LIKE 'Aus%'
IS NULL
- 정의되지 않은 속성 값입니다. 대표적인 예로 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인 보고서가 그 예에 해당합니다. 또는 LineItemId 필드가 있는 데이터 전송 이벤트가 있는 경우 각 광고 항목의 시작일, 종료일, 유형, 상태 등의 유용한 속성을 제공합니다.
이러한 일치 기능을 실행하는 방법에는 여러 가지가 있습니다.
- 사전 제작된 데이터 이동 색인은 <ph type="x-smartling-placeholder"></ph> BigQuery Data Transfer Service를 사용해 보세요. 이러한 데이터 이동 색인에 모든 항목 필드가 포함되지는 않습니다.
- 한 가지 효율적인 방법은 사용 가능한 PublisherQueryLanguageService 표를 참조하세요.
- 항목에 대한 BigQuery 또는 PQL 테이블이 없거나 테이블에 필요한 필드가 누락된 경우 항목의 서비스에 직접 연결할 수 있습니다(예: OrderService).
Python
보고서 쿼리 설정
먼저 보고서 작업을 만들고, 다음과 같은 보고서 매개변수를 지정합니다. 측정기준, 열, 기간을 설정할 수 있습니다.
# 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)GitHub에서 보기