テーブルの作成

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

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

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

クエリごとに 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 列を含みます。

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