临时表和永久表有助于简化查询,使之更易于理解和维护。通过创建可重复使用的中间结果,并使用可使临时数据保持未汇总状态的选项,您可以减少执行查询所需的资源,从而提高性能。
创建的表均需遵循在整个广告数据中心强制执行的以下限制:静态隐私权检查、允许使用的函数和字段联接。如果最终 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_id
和ct
列 - 另一个位于作业参数的目标表字段中指定的位置,包含
ct
列
您还可以向这些表中添加“被滤除的行摘要”。了解“被滤除的行摘要”。