一時テーブルと永続的テーブルを使うと、クエリを整理して理解しやすいように管理できます。再利用できる中間結果を作成することで、一時データを集計しない選択肢も保持しながら、より高いパフォーマンスでクエリを実行するために必要なリソースを減らすことができます。
作成されたテーブルは、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
列を含みます。
これらのテーブルに、フィルタされた行の概要を追加することもできます。フィルタされた行の概要を読む。