Эта функция доступна только в Аналитике 360, входящей в Google Платформу для маркетинга. Подробнее о Google Платформе для маркетинга… |
Эта статья содержит примеры составления запросов данных Аналитики, экспортируемых в BigQuery. Опробовать эти запросы можно на специально созданном образце набора данных.
Содержание- Оптимизация запросов
- Советы и рекомендации
- Простые запросы: примеры
- Суммарный [показатель] на [параметр]
- Средний показатель отказов на [параметр]
- Среднее количество просмотров страниц отдельных товаров по типу пользователей
- Среднее число транзакций на покупателя
- Средняя сумма расходов за сеанс
- Последовательность обращений
- Несколько специальных параметров на уровне обращений или сеансов
- Сложные запросы: примеры
- Товары, приобретенные пользователями, также купившими товар А (обычная электронная торговля)
- Товары, приобретенные пользователями, также купившими товар А (расширенная электронная торговля)
- Среднее количество взаимодействий пользователя перед покупкой
- Процент проданных запасов товара
- Прибыльность каждого товара
- Фактическая прибыльность каждого товара
Оптимизация запросов
Каждый запрос учитывается при расчете объема обработанных данных. Если выбрано слишком много полей, повышается количество обрабатываемых данных. В результате чрезмерно растет их суммарный объем. Оптимизируя запросы, вы можете эффективно использовать месячную норму обработки данных.
Подробнее о ценах…
Выбирайте только то, что вам нужно
Формулируя запрос, выбирайте только релевантные поля в операторе SELECT. Это позволит сократить объем данных и время на обработку запроса.
Пример: избегайте использования подстановочных знаков.
Неудачный вариант: использование подстановочного знака |
---|
SELECT * |
Удачный вариант: использование названий полей во избежание ненужной обработки |
---|
SELECT field1, field2 |
Разрешите кеширование
По возможности избегайте использования функций в качестве полей. Функции (такие как NOW()
или TODAY()
) возвращают переменные результаты. Это препятствует кешированию запросов, ускоряющему их обработку. Вместо этого указывайте точные значения времени и даты.
Используйте промежуточные таблицы для часто используемых подзапросов
Если определенный запрос часто используется в качестве подзапроса, его можно сохранить в качестве промежуточной таблицы, нажав Save as Table (Сохранить в таблицу) над результатами запроса. Затем на эту таблицу можно ссылаться в блоке FROM
запроса. Это позволит уменьшить как объем данных, так и время на их обработку.
Использование промежуточной таблицы |
---|
SELECT field1, field2 |
Отладка запросов
BigQuery отлаживает код по мере его составления. В окне кода данные отладки выводятся непосредственно под запросом. Отладку можно также осуществлять в API при использовании флага dryRun.
Для корректных запросов в нижней части окна появляется зеленый индикатор, нажав на который можно узнать объем обработанных данных. Это позволяет оптимизировать данные до выполнения запроса, так что вы можете избежать ненужной обработки данных.
Для запросов с ошибками появляется красный индикатор, нажав на который можно посмотреть информацию об ошибках, в том числе номера строк и позиций в строке, где они возникли. Приведенный ниже пример содержит пустой оператор GROUP BY, который вызвал ошибку.
Советы и рекомендации
Использование образца набора данных
В приведенных ниже примерах используется образец набора данных Google Аналитики.
Чтобы использовать запрос для собственных данных, просто замените названия проекта и набора данных в примерах.
Использование стандартного SQL или прежней версии SQL
BigQuery поддерживает два диалекта SQL:
О различиях между ними читайте в статье Переход на стандартный SQL.
Сейчас для запросов данных из BigQuery, рекомендуется использовать стандартный SQL.
Вы также можете узнать, как включить стандартный SQL в BigQuery, CLI, API или другом интерфейсе.
Мы рекомендуем добавлять комментарий "standardSQL" в начало запроса на стандартном SQL, как показано в примерах ниже.
Если вы используете прежнюю версию SQL, то данные Google Аналитики 360 будут каждый день сохраняться в новой таблице. Чтобы запросить сразу несколько таблиц, можно перечислить их названия через запятую, воспользоваться подстановочной функцией
TABLE_DATE_RANGE или даже несколькими функциями TABLE_DATE_RANGE
через запятую, как в примерах ниже.
Запрос нескольких таблиц
Ниже приведены примеры запросов на стандартном SQL и прежней версии SQL для одних и тех же данных.
Данные за 3 дня
Стандартный SQL
Данные за 3 дня, UNION ALL |
---|
#standardSQL |
Прежняя версия SQL
Данные за 3 дня, названия таблиц через запятую |
---|
SELECT |
Данные за последние 1095 дней
Стандартный SQL
Данные за последние 1095 дней, _TABLE_SUFFIX |
---|
#standardSQL |
Прежняя версия SQL
Данные за последние 1095 дней, TABLE_DATE_RANGE |
---|
SELECT |
Данные за последние 36 месяцев
Стандартный SQL
Данные за последние 36 месяцев, _TABLE_SUFFIX |
---|
#standardSQL |
Прежняя версия SQL
Данные за последние 36 месяцев, TABLE_DATE_RANGE |
---|
SELECT |
Последние 3 года
Стандартный SQL
Данные за последние 3 года, _TABLE_SUFFIX |
---|
#standardSQL |
Прежняя версия SQL
Данные за последние 3 года, TABLE_DATE_RANGE |
---|
SELECT |
Данные за указанный период
Стандартный SQL
Данные за указанный период, _TABLE_SUFFIX |
---|
#standardSQL |
Прежняя версия SQL
Данные за указанный период, TABLE_DATE_RANGE |
---|
SELECT |
Данные за последние 3 года и текущий день
Стандартный SQL
Данные за последние 3 года и текущий день, UNION ALL, _TABLE_SUFFIX |
---|
Примечание. Этот пример запроса не подходит для общедоступного набора данных Google Аналитики, поскольку там нет таблицы за текущий день. |
#standardSQL |
Прежняя версия SQL
Данные за последние 3 года и текущий день, TABLE_DATE_RANGE |
---|
Примечание. Этот пример запроса не подходит для общедоступного набора данных Google Аналитики, поскольку там нет таблицы за текущий день. |
SELECT |
Простые запросы: примеры
В этом разделе описывается составление простых запросов с использованием показателей и параметров из образца данных Google Аналитики.
Суммарный [показатель] на [параметр]
Ниже приведены примеры скриптов, позволяющих узнать, какое суммарное количество транзакций на браузер устройства зарегистрировано в июле 2017 г.
Стандартный SQL
Суммарное количество транзакций на браузер устройства в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Суммарное количество транзакций на браузер устройства в июле 2017 г. |
---|
SELECT |
Средний показатель отказов на [параметр]
Показатель отказов определяется как процент посещений с одним просмотром страницы. Ниже приведены примеры скриптов, позволяющих узнать фактический показатель отказов на источник трафика.
Стандартный SQL
Показатель отказов на источник трафика в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Показатель отказов на источник трафика в июле 2017 г. |
---|
SELECT |
Среднее количество просмотров страниц товаров по типу пользователей (покупатели и остальные посетители)
Ниже приведены примеры скриптов, позволяющие узнать среднее количество просмотров страниц товаров пользователями, совершившими покупку, в июле 2017 г.
Стандартный SQL
Среднее количество просмотров страниц товаров пользователями, совершившими покупку, в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Среднее количество просмотров страниц товаров пользователями, совершившими покупку, в июле 2017 г. |
---|
SELECT |
Ниже приведены примеры скриптов, позволяющих узнать среднее количество просмотров страниц товаров пользователями, которые не совершили покупку, в июле 2017 г.
Стандартный SQL
Среднее количество просмотров страниц товаров пользователями, не совершившими покупку, в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Среднее количество просмотров страниц товаров пользователями, не совершившими покупку, в июле 2017 г. |
---|
SELECT |
Среднее число транзакций на покупателя
Ниже приведены примеры скриптов, позволяющих узнать среднее суммарное количество транзакций на пользователя, совершившего покупку, в июле 2017 г.
Стандартный SQL
Среднее количество транзакций на пользователя, совершившего покупку, в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Среднее количество транзакций на пользователя, совершившего покупку, в июле 2017 г. |
---|
SELECT |
Средняя сумма расходов за сеанс
Ниже приведены примеры скриптов, позволяющих узнать среднюю сумму расходов за сеанс в июле 2017 г.
Стандартный SQL
Средняя сумма расходов за сеанс в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Средняя сумма расходов за сеанс в июле 2017 г. |
---|
SELECT |
Последовательность обращений
Ниже приведены примеры скриптов, позволяющих узнать последовательность просмотра страниц.
Стандартный SQL
Последовательность просмотра страниц пользователями в июле 2017 г. |
---|
#standardSQL |
Прежняя версия SQL
Последовательность просмотра страниц пользователями в июле 2017 г. |
---|
SELECT |
В этом запросе обращения ограничиваются типом PAGES
, чтобы исключить события и транзакции. Каждая строка выходных данных представляет просмотр страницы. Строки выводятся в порядке перечисления полей в операторе SELECT
.
Несколько специальных параметров на уровне обращений или сеансов
Специальный параметр на уровне обращений |
---|
SELECT fullVisitorId, visitId, hits.hitNumber, hits.time, |
Специальный параметр на уровне сеансов |
---|
SELECT fullVisitorId, visitId, |
В каждом запросе:
Оператор SELECT
запрашивает релевантные поля параметров и показателей.
Функция MAX
:
- Возвращает специальный параметр в новом столбце. Чтобы вернуть несколько специальных параметров в новых столбцах, повторите функцию.
- Операторы
WITHIN hits
иWITHIN RECORDS
оценивают условие в повторяющихся полях в BigQuery. - Условие, заданное функцией
MAX
, оценивается для каждого специального параметра. Если не выполняется условиеindex=1
для обращений илиindex=2
для сеансов, возвращается значениеNULL
. - Возвращается максимальное значение, которое соответствует значению специального параметра 1 для обращений или значению специального параметра 2 для сеансов, поскольку все остальные значения равны
NULL
.
Примеры сложных запросов
Теперь перейдем к составлению запросов с использованием сложных функций, доступных в BigQuery.
Товары, приобретенные пользователями, также купившими товар А (обычная электронная торговля)
Ниже представлена структура скрипта, позволяющего узнать, какие товары приобретали пользователи, которые также купили товар А.
Товары, приобретенные пользователями, также купившими товар А (обычная электронная торговля) |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
- В первой строке выбираются все остальные товары, приобретенные пользователем. Для расчета количества каждого купленного товара используется функция
COUNT()
. Результат отражается в полеquantity
, а соответствующий товар – в полеother_purchased_products
. - В подзапросе, выделенном серым цветом, выбираются только уникальные пользователи (
fullVisitorId
), совершившие транзакции (totals.transactions>=1
) и купившие в ходе транзакции товар А (WHERE hits.item.productName CONTAINS 'Product Item Name A'
).
Правила, заданные операторами WHERE
и AND
в запросе верхнего уровня, который выделен зеленым цветом, игнорируют значения hits.item.productName
, равные NULL и содержащие товар А.
Ниже приведен пример запроса, который позволяет узнать, какие ещё товары приобрел покупатель, купивший Brighton Metallic Pens - Set of 4.
Товары, приобретенные покупателем, который 24 июня 2013 г. купил Brighton Metallic Pens - Set of 4 |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
В Dremel/BigQuery оператор WHERE expr IN
вызывает команду JOIN. При этом действуют ограничения размера. В частности, размер правой части JOIN (в данном случае это количество посетителей) не должен превышать 8 МБ. В Dremel это называется Broadcast JOIN. Если размер превышает 8 МБ, необходимо использовать Shuffled JOIN с применением синтаксиса JOIN EACH. Для этого нельзя использовать оператор IN, но тот же запрос можно создать с помощью команды JOIN.
Товары, приобретенные пользователями, также купившими товар А (расширенная электронная торговля)
Этот запрос похож на предыдущий, но предназначен для расширенной электронной торговли. В нем для получения данных за несколько дней также используются диапазоны TABLE_DATE_RANGE
.
Товары, приобретенные пользователями, также купившими товар А (расширенная электронная торговля) |
---|
SELECT hits.product.productSKU AS other_purchased_products, COUNT(hits.product.productSKU) AS quantity |
Среднее количество взаимодействий пользователя перед покупкой
Это пример запроса с командой JOIN() [...] ON
, который зависит только от данных Аналитики.
Ниже представлена структура скрипта, позволяющего узнать среднее количество взаимодействий пользователя перед покупкой.
Количество взаимодействий пользователя перед покупкой |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
- В первой строке выполняется основная математическая операция, определяющая среднее количество взаимодействий в расчете на продукт. Этот запрос создает связь между подзапросами ‘Alias_Name_1’ и ‘Alias_Name_2’.
- Подзапрос ‘Alias_Name_1’ возвращает поле, в котором с помощью агрегатной функции
SUM()
суммируются все обращения, зафиксированные для товара. - Подзапрос ‘Alias_Name_2’ определяет количество обращений пользователей в расчете на товар с помощью функции
COUNT()
. - В последней строке указано общее поле (
hits.item.productSku
), используемое в двух объединенных наборах данных.
Ниже приведен пример запроса, который позволяет узнать среднее количество взаимодействий пользователя перед покупкой 10 сентября 2013 г.
Количество взаимодействий пользователя перед покупкой 10 сентября 2013 г. |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
Процент проданных запасов товара
Рассмотрим пример запроса, в котором используются данные не только из Google Аналитики, но и из других систем. Объединив два набора данных, вы сможете более детально анализировать поведение пользователей. Импортируя данные из других систем в BigQuery, помните, что это повлияет на размер месячного платежа за хранение данных.
Ниже представлена структура скрипта, позволяющего узнать процент проданных запасов товара.
Процент проданных запасов товара |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ((( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold )) * 100 ) AS percentage_of_stock_sold |
- В первой строке возвращается два поля: одно содержит все идентификаторы товаров, в другом выполняется математическая операция, определяющая процент проданных запасов товара по его идентификатору.
- Поскольку этот запрос зависит от двух наборов данных, необходимо использовать функцию
JOIN() ... ON
. Она объединяет строки из двух наборов данных по общему полю. В данном случае это наборы данных[ ‘Imported_DataSet’ ]
и‘Alias_Name’
. [ ‘Imported_DataSet’ ]
содержит внешние данные. Этот набор данных включает показатель количества оставшегося товара (Imported DataSet.’stock_left_field’
) и параметр идентификатора товара (Imported_DataSet.’productId_field’
).- Название
‘Alias_Name’
присваивается данным, которые возвращает подзапрос, выделенный серым цветом. В этом подзапросе используются данные Google Analytics для определения общего количества проданных единиц товара. - Последняя строка содержит оператор
ON
, отражающий общее для двух наборов данных поле, по которому они объединяются.
Многие переменные этого запроса содержат название набора данных в виде префикса (например, Imported_DataSet.’productId_field’, Alias_Name.quantity_sold
). Это указывает, какое поле в каком именно наборе данных выбрано.
Ниже приведен пример запроса, который позволяет узнать процент проданных запасов товара 28 июля 2013 г.
Процент запасов товара, проданных 28 июля 2013 г. |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ( ( ( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold ) ) * 100 ) AS percentage_of_stock_sold |
Прибыльность каждого товара
Ниже представлена структура скрипта, позволяющего узнать прибыльность каждого товара
Прибыльность товаров |
---|
SELECT Alias_Name.hits.item.productSku, ( Imported_DataSet.’product profit field’ * Alias_Name.quantity ) AS profit |
- Первая строка содержит математическую операцию для расчета общей прибыли по каждому товару.
- Подзапрос, выделенный серым цветом, использует внешние данные по размеру прибыли от продажи товара.
- Подзапрос, выделенный красным цветом, использует данные Google Analytics, которые объединяются с внешними данными. Он рассчитывает количество проданного товара.
- Оператор
ON
в последней строке указывает общее для двух наборов данных поле. В данном случае это идентификатор товара.
Ниже приведен пример запроса, который позволяет узнать прибыльность каждого товара на 28 июля 2013 г.
Прибыльность товаров на 28 июля 2013 г. |
---|
SELECT two.hits.item.productSku, ((AnalyticsImport.product_data_20130728.productprice-AnalyticsImport.product_data_20130728.productcost)*two.quantity) AS profit |
Прибыль рассчитывается как разность между ценой товара и его себестоимостью. Эта информация хранится во внешнем наборе данных.
Фактическая прибыльность каждого товара (с учетом возвратов)
Ниже представлена структура скрипта, позволяющего узнать фактическую прибыльность каждого товара.
Фактическая прибыльность товаров |
---|
SELECT Alias_Name.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
- Этот запрос аналогичен предыдущему. Отличия относятся к внешнему набору данных в подзапросе, выделенном серым цветом, и к математической операции, рассчитывающей фактическую прибыль.
- Во внешнем наборе данных также рассчитывается общая сумма возвратов (в операторе
SELECT
в подзапросе, выделенном красным цветом). - Затем выполняется математическая операция в первой строке, определяющая фактическую прибыль путем вычитания дохода, потраченного на возвраты, из валовой прибыли.
Подробную информацию о запросе читайте в разделе Прибыльность каждого товара.
Ниже приведен пример запроса, который позволяет узнать фактическую прибыльность каждого товара на 28 июля 2013 г.
Фактическая прибыльность товаров на 28 июля 2013 г. |
---|
SELECT two.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
При расчете фактической прибыли принимается во внимание прибыльность товара с учетом возвратов. Общий доход, потраченный на возвраты, для товара рассчитывается по следующей формуле:
общий доход, потраченный на возвраты = (цена товара + стоимость доставки товара) * количество возвращенных единиц товара