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

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

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