Создать таблицы

Временные и постоянные таблицы помогают оптимизировать запросы, упрощая их понимание и обслуживание. Создавая промежуточные результаты, которые можно использовать повторно, и одновременно предоставляя возможность сохранять временные данные неагрегированными, вы можете сократить ресурсы, необходимые для выполнения запросов, повысив производительность.

Созданные таблицы подлежат тем же статическим проверкам конфиденциальности , разрешенным функциям и ограничениям на объединение полей , которые применяются во всем 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 ) улучшают читаемость запросов и позволяют создавать промежуточные результаты, на которые не распространяются требования агрегирования или различия.

Таблицы температур:

  • Существуют только на уровне сеанса и истекают после выполнения запроса.
  • Может использоваться только внутри запроса, в котором он был создан.
  • Не подлежат агрегированию или дифференциальным требованиям конфиденциальности.
  • Поддержка дополнительного пространства имен 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;

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

В эти таблицы также можно добавить сводку отфильтрованных строк. Прочтите о сводках отфильтрованных строк .