テーブルの作成

一時テーブルと永続的テーブルを使うと、クエリを整理して理解しやすいように管理できます。再利用できる中間結果を作成することで、一時データを集計しない選択肢も保持しながら、より高いパフォーマンスでクエリを実行するために必要なリソースを減らすことができます。

作成されたテーブルは、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

一時テーブル

一時テーブルを使うと、クエリの可読性が向上するとともに、集計されていないデータを含む中間結果を作成できます。

一時テーブルには以下のような性質があります。

  • セッション単位でのみ存在し、クエリ実行後は期限切れとなります
  • 当該テーブルが作成されたクエリ内でのみ使用できます
  • プライバシー チェックがまだ適用されていない集計されていないデータを保存する場合があります
  • 必要な名前空間なしで名前で参照される

一時テーブルを作成するには、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
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
);

-- Return the total count of impressions in the table
SELECT
  COUNT(*) AS imps
FROM
  tmp.creative_list -- Alternative: creative_list

クエリ 2

-- Return creatives which had more than 100 impressions
SELECT
  creative_id,
  COUNT(*) AS imps
FROM
  tmp.creative_list
WHERE
  imps > 100
GROUP BY
  creative_id;

プライバシー チェックを適用する

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
);

単一のクエリによる複数のテーブルのエクスポート

クエリごとに 1 つのテーブルでは不十分な場合でも、Ads Data Hub では、柔軟な SQL 構文を活かして、表示可能な結果のテーブルをエクスポートすることができます。これらのテーブルには、Ads Data Hub に適用されるものと同じプライバシー チェックが行われます。

メインの SQL 式とともにテーブルをエクスポートする構文は次のとおりです。


CREATE TABLE <project_name.dataset_name.table_name>
  OPTIONS(privacy_checked_export=true) AS query_statement;

たとえば、BigQuery の宛先 myproject.mydataset.mytable に、テーブル adh.google_ads_impressions の各キャンペーン 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;

テーブルは、作成時と同じクエリで参照することもできます。たとえば、次のクエリがあるとします。


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`;

クエリが 2 個のテーブルを出力する場合:

  • 1 個は myproject.mydataset.mytable にあり、campaign_id 列と ct 列を含みます。
  • もう 1 個は、宛先テーブルのフィールドで指定されたロケーションにあり、ct 列を含みます。

これらのテーブルに、フィルタされた行の概要を追加することもできます。フィルタされた行の概要を読む