Временные и постоянные таблицы помогают оптимизировать запросы, делая их более понятными и удобными для сопровождения. Создание промежуточных результатов, которые можно повторно использовать, и возможность сохранения временных данных в неагрегированном виде позволяют сократить ресурсы, необходимые для выполнения запросов, и повысить производительность.
Созданные таблицы подлежат тем же статическим проверкам конфиденциальности , разрешенным функциям и ограничениям на объединение полей, которые применяются во всем 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
Временные столы
Временные таблицы улучшают читаемость запросов и позволяют создавать промежуточные результаты, которые могут включать неагрегированные данные.
Временные таблицы:
- Существуют только на уровне сессии и исчезают после выполнения запроса.
- Может использоваться только внутри запроса, в котором был создан.
- Может хранить неагрегированные данные, к которым еще не применены проверки конфиденциальности.
- На них ссылаются по имени без указания обязательного пространства имен.
Для создания временной таблицы используйте оператор 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 project_name.dataset_name.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.TABLE_NAME
OPTIONS(privacy_checked_export=true) AS query_statement;
Например, чтобы экспортировать таблицу в целевой объект BigQuery PROJECT_NAME.DATASET.TABLE_NAME , содержащую количество строк для каждого идентификатора кампании из таблицы adh.google_ads_impressions :
CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
OPTIONS(privacy_checked_export=true) AS
SELECT campaign_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY campaign_id;
Следующий пример развивает эту идею и использует тот же запрос для экспорта двух таблиц в BigQuery:
CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
OPTIONS(privacy_checked_export=true) AS
SELECT campaign_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY campaign_id;
CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME_2
OPTIONS(privacy_checked_export=true) AS
SELECT advertiser_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY advertiser_id;
Таблицы также могут быть упомянуты в том же запросе, в котором они были созданы. Например, следующий запрос выводит две таблицы:
CREATE TABLE PROJECT_NAME.DATASET.TABLE_NAME
OPTIONS(privacy_checked_export=true) AS
SELECT campaign_id, COUNT(*) AS ct
FROM adh.google_ads_impressions
GROUP BY campaign_id;
SELECT ct FROM PROJECT_NAME.DATASET.TABLE_NAME;
- Первая таблица создается по адресу
PROJECT_NAME.DATASET.TABLE_NAMEсо столбцамиcampaign_idиct. - Вторая таблица создается в месте, указанном в поле «Целевая таблица» аргументов задания, со столбцом
ct.
Добавление сводной информации по отфильтрованной строке.
Также можно добавить к этим таблицам сводную информацию по отфильтрованным строкам. Подробнее о сводных данных по отфильтрованным строкам можно прочитать здесь .
Именование нескольких таблиц во время выполнения
При создании нескольких таблиц в запросе существует два способа присвоения им имен:
- В SQL-запросе явно указывайте имена таблиц, используя следующий формат:
PROJECT_NAME.DATASET.TABLE_NAME. - Используйте параметры в качестве заполнителей в SQL-запросе, а затем присваивайте имена таблицам во время выполнения.