임시 테이블과 영구 테이블을 사용하면 쿼리를 간소화해 보다 쉽게 이해하고 관리할 수 있습니다. 재사용할 수 있는 중간 결과를 만들면 임시 데이터를 집계하지 않은 상태로 유지할 수 있어 쿼리를 실행하는 데 필요한 리소스가 줄어들고 결과적으로 성능이 개선됩니다.
생성된 테이블에는 Ads Data Hub 전체에서 적용 중인 정적 개인 정보 보호 검사, 허용되는 함수, 필드 조인 제한이 동일하게 적용됩니다. 최종 SELECT
문의 데이터가 BigQuery로 출력될 때 표준 개인 정보 보호 검사가 적용됩니다.
테이블을 만들려면 다음 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
임시 테이블
임시 테이블을 사용하면 쿼리 가독성이 개선되고 집계 또는 차등 요건이 적용되지 않는 중간 결과를 생성할 수 있습니다.
임시 테이블의 특징
- 세션 수준에서만 존재하고 쿼리 실행 후 종료됨
- 임시 테이블이 처음 생성되었던 쿼리 내에서만 사용할 수 있음
- 집계 또는 개인 정보 차등 보호 요건이 적용되지 않음
tmp
네임스페이스(선택사항)를 지원함
임시 테이블을 만들려면 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 -- Alternative: tmp.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
);
쿼리 2
-- Return creatives which had more than 100 impressions
SELECT
creative_id,
COUNT(*) AS imps
FROM
tmp.creative_list
WHERE
imps > 100;
개인 정보 보호 검사 적용하기
Ads Data Hub는 개인 정보 보호 검사가 적용되며 중간 결과 테이블을 만드는 SQL 문법도 지원합니다.
개인 정보 보호 검사가 적용되는 테이블을 만들려면 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 `myproject.mydataset.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 전체에 적용되는 것과 동일한 개인 정보 보호 검사가 적용됩니다.
기본 SQL 표현식과 함께 테이블을 내보내기 위한 문법은 다음과 같습니다.
CREATE TABLE <project_name.dataset_name.table_name>
OPTIONS(privacy_checked_export=true) AS query_statement;
예를 들어 adh.google_ads_impressions
테이블에서 각 캠페인 ID의 행 수가 포함된 BigQuery 대상 테이블 myproject.mydataset.mytable
로 테이블을 내보내려면 다음 안내를 따르세요.
CREATE TABLE `myproject.mydataset.mytable` OPTIONS(privacy_checked_export=true) AS
SELECT campaign_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY campaign_id;
테이블은 테이블이 처음 생성되었던 동일한 쿼리에서 참조될 수도 있습니다. 예를 들어 다음 쿼리는
CREATE TABLE `myproject.mydataset.mytable` OPTIONS(privacy_checked_export=true) AS
SELECT campaign_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY campaign_id;
SELECT ct FROM `myproject.mydataset.mytable`;
다음 두 테이블을 출력합니다.
myproject.mydataset.mytable
에 하나,campaign_id
및ct
열 포함- 작업 인수의 대상 테이블 필드에 지정된 위치에 하나,
ct
열 포함
이러한 테이블에 필터링된 행 요약을 추가할 수도 있습니다. 필터링된 행 요약에 대해 알아보세요.