테이블 만들기

임시 테이블과 영구 테이블을 사용하면 쿼리를 간소화해 보다 쉽게 이해하고 관리할 수 있습니다. 재사용할 수 있는 중간 결과를 만들면 임시 데이터를 집계하지 않은 상태로 유지할 수 있어 쿼리를 실행하는 데 필요한 리소스가 줄어들고 결과적으로 성능이 개선됩니다.

생성된 테이블에는 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_idct 열 포함
  • 작업 인수의 대상 테이블 필드에 지정된 위치에 하나, ct 열 포함

이러한 테이블에 필터링된 행 요약을 추가할 수도 있습니다. 필터링된 행 요약에 대해 알아보세요.