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

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

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

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