Временные и постоянные таблицы помогают оптимизировать запросы, упрощая их понимание и поддержку. Создавая промежуточные результаты, которые можно использовать повторно, и при этом предоставляя возможность сохранять временные данные неагрегированными, вы можете сократить ресурсы, необходимые для выполнения запросов, и повысить производительность.
Созданные таблицы подлежат тем же статическим проверкам конфиденциальности , разрешенным функциям и ограничениям на объединение полей, которые применяются во всем 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
Временные таблицы
Временные (или temp ) таблицы улучшают читаемость запросов и позволяют создавать промежуточные результаты, которые могут включать неагрегированные данные.
Временные таблицы:
- Существуют только на уровне сеанса и исчезают после выполнения запроса.
- Может использоваться только внутри запроса, в котором он был создан.
- Могут храниться неагрегированные данные, к которым еще не применены проверки конфиденциальности.
- Обратиться можно по имени, без обязательного пространства имен.
Чтобы создать временную таблицу, используйте оператор 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;
Применить проверки конфиденциальности
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
);
Экспорт нескольких таблиц с помощью одного запроса
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
:
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
В эти таблицы также можно добавлять сводку по отфильтрованным строкам. Подробнее о сводках по отфильтрованным строкам читайте здесь .