创建表

临时表和永久表有助于简化查询,使之更易于理解和维护。通过创建可重复使用的中间结果,并使用可使临时数据保持未汇总状态的选项,您可以减少执行查询所需的资源,从而提高性能。

创建的表均需遵循在整个广告数据中心强制执行的以下限制:静态隐私权检查允许使用的函数字段联接。如果最终 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;

执行隐私权检查

广告数据中心还支持使用 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
);

使用单个查询导出多个表

广告数据中心支持使用灵活的 SQL 语法,在每个查询一个表不够用的情况下导出多个可查看的结果表。这些表都需要接受在整个广告数据中心强制执行的那些隐私权检查

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

将输出两个表:

  • 一个位于 myproject.mydataset.mytable,包含 campaign_idct
  • 另一个位于作业参数的目标表字段中指定的位置,包含 ct

您还可以向这些表中添加“被滤除的行摘要”。了解“被滤除的行摘要”