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