Esta funcionalidade só está disponível no Analytics 360, que faz parte da Google Marketing Platform. Saiba mais acerca da Google Marketing Platform. |
Este artigo contém exemplos de como construir consultas dos dados do Analytics exportados para o BigQuery. Disponibilizámos um conjunto de dados de exemplo para poder praticar com algumas das consultas neste artigo.
Neste artigo:- Otimização de consultas
- Sugestões e práticas recomendadas
- Exemplos de consultas básicas
- Total de [métrica] por [dimensão]
- Taxa de rejeição média por [dimensão]
- Número médio de visualizações de página de produtos por tipo de comprador
- Número médio de transações por comprador
- Montante médio gasto por sessão
- Sequência de resultados (análise do caminho)
- Várias dimensões personalizadas ao nível do resultado ou da sessão
- Exemplos de consultas avançadas
- Produtos comprados por clientes que compraram o produto A (comércio eletrónico clássico)
- Produtos comprados por clientes que compraram o produto A (Comércio eletrónico otimizado)
- Número médio de interações do utilizador antes da compra
- Percentagem de stock vendida por produto
- Rentabilidade de cada produto
- Rentabilidade real de cada produto
Otimização de consultas
Cada consulta executada contribui para a sua quota mensal de processamento de dados. Se selecionar campos externos, aumenta a quantidade de dados que é necessário processar. Consequentemente, utiliza ainda mais da sua quota mensal do que o necessário. As consultas otimizadas usam de forma eficiente a quota mensal de processamento de dados.
Saiba mais acerca dos preços.
Selecionar apenas o necessário
Quando formula uma consulta, seleciona apenas os campos relevantes na instrução SELECT. Ao não chamar campos externos, está a reduzir a quantidade de dados e o tempo necessário para processar a consulta.
Exemplo: evite a utilização do operador caráter universal
Forma incorreta: com o operador caráter universal |
---|
SELECT * |
Forma mais correta: com nomes de campos para evitar processamento desnecessário |
---|
SELECT field1, field2 |
Permita a colocação em cache
Sempre que possível, evite utilizar funções como campos. As funções (como NOW()
ou TODAY()
) devolvem resultados variáveis, o que impede que as consultas sejam colocadas em cache e, por isso, que terminem mais rapidamente. Em alternativa, use horas e datas específicas.
Use tabelas intermédias para subconsultas usadas frequentemente
Se perceber que utiliza repetidamente uma consulta específica como subconsulta, pode guardá-la como uma tabela intermédia ao clicar em Guardar como tabela acima dos resultados da consulta. Em seguida, pode referenciar esta tabela na secção FROM
da sua consulta, o que reduzirá a quantidade de dados a processar e o tempo necessário para o processamento.
usar uma tabela intermédia |
---|
SELECT field1, field2 |
Depuração de consultas
O BigQuery depura o seu código à medida que o constrói. Na janela de composição, a depuração é indicada logo abaixo da consulta. A depuração está também disponível através da API com o sinalizador dryRun.
As consultas válidas têm um indicador verde que, quando clicado, apresentará a quantidade de dados processada pela consulta. Esta funcionalidade permite considerar a otimização de dados antes de executar a consulta, para evitar processamento de dados desnecessário.
As consultas inválidas têm um indicador vermelho em que pode clicar para ver informações acerca do erro e que localiza a linha e a coluna em que o erro está a ocorrer. No exemplo abaixo, a instrução GROUP BY está em branco e o erro é identificado.
Sugestões e práticas recomendadas
Usar o conjunto de dados de exemplo
Os seguintes exemplos usam o conjunto de dados de exemplo do Google Analytics.
Para utilizar as consultas nos seus próprios dados, basta substituir os nomes do projeto e do conjunto de dados nos exemplos pelos seus nomes do projeto e do conjunto de dados.
Usar o SQL padrão vs. o SQL antigo
O BigQuery suporta dois dialetos de SQL:
O artigo Migrar para o SQL padrão explica as diferenças entre os dois dialetos.
O SQL padrão agora é o dialeto de SQL preferido para consultar dados armazenados no BigQuery.
Consulte o artigo Ativar o SQL padrão para obter informações acerca de como ativar o SQL padrão na IU, CLI, API do BigQuery ou em qualquer interface que use.
A forma mais fácil de começar é incluir o comentário "standardSQL" na parte superior das consultas SQL padrão, conforme apresentado nos exemplos a seguir.
Com o SQL antigo, os dados do Google Analytics 360 são transferidos para uma nova tabela todos os dias. Para consultar várias tabelas de uma vez, pode separar os nomes das tabelas por vírgulas, usar a função de caráter universal da tabela TABLE_DATE_RANGE
ou usar várias funções TABLE_DATE_RANGE
separadas por vírgulas, como nos exemplos seguintes.
Consultar várias tabelas
Os seguintes exemplos mostram consultas de SQL padrão e SQL antigo para os mesmos dados.
3 dias
SQL padrão
3 dias com UNION ALL |
---|
#standardSQL |
SQL antigo
3 dias com nomes de tabelas separados por vírgulas |
---|
SELECT |
Últimos 1095 dias
SQL padrão
Últimos 1095 dias com _TABLE_SUFFIX |
---|
#standardSQL |
SQL antigo
Últimos 1095 dias com TABLE_DATE_RANGE |
---|
SELECT |
Últimos 36 meses
SQL padrão
Últimos 36 meses com _TABLE_SUFFIX |
---|
#standardSQL |
SQL antigo
Últimos 36 meses com TABLE_DATE_RANGE |
---|
SELECT |
Últimos 3 anos
SQL padrão
Últimos 3 anos com _TABLE_SUFFIX |
---|
#standardSQL |
SQL antigo
Últimos 3 anos com TABLE_DATE_RANGE |
---|
SELECT |
Intervalo de datas específico
SQL padrão
Intervalo de datas específico com _TABLE_SUFFIX |
---|
#standardSQL |
SQL antigo
Intervalo de datas específico com TABLE_DATE_RANGE |
---|
SELECT |
Últimos 3 anos juntamente com os dados de hoje (intradiários)
SQL padrão
Últimos 3 anos juntamente com os dados de hoje (intradiários) com UNION ALL e _TABLE_SUFFIX |
---|
Nota: esta consulta de exemplo não funciona com o conjunto de dados público do Google Analytics porque não há atualmente uma tabela de dados intradiários. |
#standardSQL |
SQL antigo
Últimos 3 anos juntamente com os dados de hoje (intradiários) com várias funções TABLE_DATE_RANGE |
---|
Nota: esta consulta de exemplo não funciona com o conjunto de dados público do Google Analytics porque não há atualmente uma tabela de dados intradiários. |
SELECT |
Exemplos de consultas básicas
Esta secção explica como construir consultas básicas com métricas e dimensões de dados de exemplo do Analytics.
Total de [métrica] por [dimensão]?
Veja abaixo exemplos de scripts para a pergunta: Qual é o número total de transações geradas por navegador de dispositivo em julho de 2017?
SQL padrão
Total de transações por navegador de dispositivo em julho de 2017 |
---|
#standardSQL |
SQL antigo
Total de transações por navegador de dispositivo em julho de 2017 |
---|
SELECT |
Taxa de rejeição média por [dimensão]?
A taxa de rejeição real é definida como a percentagem de visitas com uma única visualização de página. Veja abaixo exemplos de scripts para a pergunta: Qual foi a taxa de rejeição real por origem do tráfego?
SQL padrão
Taxa de rejeição por origem do tráfego em julho de 2017 |
---|
#standardSQL |
SQL antigo
Taxa de rejeição por origem do tráfego em julho de 2017 |
---|
SELECT |
Número médio de visualizações de página de produtos por tipo de comprador (compradores vs. não compradores)
Veja abaixo exemplos de scripts para a pergunta: Qual foi o número médio de visualizações de página de produtos de utilizadores que fizeram uma compra em julho de 2017?
SQL padrão
Número médio de visualizações de página de produtos de utilizadores que fizeram uma compra em julho de 2017 |
---|
#standardSQL |
SQL antigo
Número médio de visualizações de página de produtos de utilizadores que fizeram uma compra em julho de 2017 |
---|
SELECT |
Veja abaixo exemplos de scripts para a pergunta: Qual foi o número médio de visualizações de página de produtos de utilizadores que não fizeram uma compra em julho de 2017?
SQL padrão
Número médio de visualizações de página de produtos de utilizadores que não fizeram uma compra em julho de 2017 |
---|
#standardSQL |
SQL antigo
Número médio de visualizações de página de produtos de utilizadores que não fizeram uma compra em julho de 2017 |
---|
SELECT |
Número médio de transações por comprador
Veja abaixo exemplos de scripts para a pergunta: Qual foi o total de transações, em média, por utilizador que efetuou uma compra em julho de 2017?
SQL padrão
Número médio de transações por utilizador que fez uma compra em julho de 2017 |
---|
#standardSQL |
SQL antigo
Número médio de transações por utilizador que fez uma compra em julho de 2017 |
---|
SELECT |
Montante médio gasto por sessão
Veja abaixo exemplos de scripts para a pergunta: Qual é o montante médio gasto por sessão em julho de 2017?
SQL padrão
Montante médio gasto por sessão em julho de 2017 |
---|
#standardSQL |
SQL antigo
Montante médio gasto por sessão em julho de 2017 |
---|
SELECT |
Sequência de resultados
Veja abaixo exemplos de scripts para a pergunta: Qual é a sequência de páginas visualizadas?
SQL padrão
Sequência de páginas visualizadas por utilizadores em julho de 2017 |
---|
#standardSQL |
SQL antigo
Sequência de páginas visualizadas por utilizadores em julho de 2017 |
---|
SELECT |
Nesta consulta, limita os tipos de resultados a PAGES
para evitar ver interações de eventos ou transações. Cada linha do resultado representa uma visualização de página e é apresentada pela ordem predefinida dos campos na declaração SELECT
.
Múltiplas dimensões personalizadas ao nível do resultado ou da sessão
dimensão personalizada ao nível do resultado |
---|
SELECT fullVisitorId, visitId, hits.hitNumber, hits.time, |
dimensão personalizada ao nível da sessão |
---|
SELECT fullVisitorId, visitId, |
Em cada consulta:
A declaração SELECT
consulta os campos de dimensão e de métrica relevantes.
A função MAX
:
- Devolve a dimensão personalizada como uma nova coluna. Pode repetir a função para devolver várias dimensões personalizadas como novas colunas.
WITHIN hits
eWITHIN RECORD
avaliam a condição dentro de campos repetidos no BigQuery.- A condição em
MAX
é avaliada para cada dimensão personalizada, mas para aquelas em que não se verificarindex=1 (hits)
ouindex=2 (sessions)
é devolvidoNULL
. - Devolve o valor máximo, que é o valor da dimensão personalizada 1 para resultados ou da dimensão personalizada 2 para sessões, uma vez que todos os outros valores são
NULL
.
Exemplos de consultas avançadas
Agora que já conhece as consultas simples, pode construir consultas com as funções e as funcionalidades avançadas disponíveis no BigQuery.
Produtos comprados por clientes que compraram o produto A (Comércio eletrónico clássico)
Segue-se o esboço de um script para a pergunta: Que outros produtos são comprados por clientes que compram o produto A?
produtos comprados por um cliente que compra o produto A (comércio eletrónico clássico) |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
- Na primeira linha, seleciona todos os outros artigos comprados por um utilizador e a função de agregação
COUNT()
é usada para calcular a quantidade de cada um dos restantes artigos comprados. O resultado é apresentado num campo denominadoquantity
, com o respetivo artigo associado no campo de produto denominadoother_purchased_products
. - Na subconsulta a cinzento, apenas seleciona os utilizadores únicos (
fullVisitorId
) que realizaram transações (totals.transactions>=1
) e que, durante uma transação, compraram o produto A (WHERE hits.item.productName CONTAINS 'Product Item Name A'
).
As regras (declarações WHERE
e AND
) na consulta de nível superior (verde) ignoram valores em hits.item.productName
que sejam nulos e contenham o produto A.
Segue-se um exemplo da consulta: Se um cliente compra Brighton Metallic Pens - Set of 4, que outro(s) produto(s) comprou?
produtos comprados por um cliente que compra "Brighton Metallic Pens (Set of 4)" em 24 de junho de 2013 |
---|
SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity |
No Dremel/BigQuery, a utilização de WHERE expr IN
aciona um comando JOIN e aplicam-se restrições de tamanho; especificamente, o tamanho do lado direito de JOIN (neste caso, o número de visitantes) tem de ser inferior a 8 MB. No Dremel, isto tem a designação de broadcast JOIN. Quando o tamanho ultrapassa os 8 MB, tem de acionar um comando shuffled JOIN, o que pode ser feito com a sintaxe JOIN EACH. Infelizmente, não é possível fazê-lo com IN, mas a mesma consulta pode ser reescrita com JOIN.
Produtos comprados por clientes que compraram o produto A (Comércio eletrónico otimizado)
É semelhante ao esboço da consulta anterior, mas funciona para o Comércio eletrónico otimizado. Também usa TABLE_DATE_RANGE
para consultar dados em vários dias.
produtos comprados por um cliente que compra o produto A (Comércio eletrónico otimizado) |
---|
SELECT hits.product.productSKU AS other_purchased_products, COUNT(hits.product.productSKU) AS quantity |
Número médio de interações do utilizador antes da compra
Este é um exemplo de uma consulta de um comando JOIN() [...] ON
que só depende de dados do Analytics.
Segue-se o esboço de um script para a pergunta: Qual é o número médio de interações do utilizador antes de uma compra?
número de interações do utilizador antes de uma compra |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
- A primeira linha realiza a operação matemática principal para encontrar a média de interações do utilizador por produto e esta consulta cria uma associação entre duas subconsultas denominadas "Alias_Name_1" e "Alias_Name_2".
- "Alias_Name_1" é utilizada para produzir um campo que utiliza a função de agregação
SUM()
para somar todos os números de resultados registados para um produto. - "Alias_Name_2" é utilizada para encontrar o número de resultados de utilizadores por produto com a função
COUNT()
. - A última linha mostra o campo comum (
hits.item.productSku
) partilhado entre os dois conjuntos de dados na associação.
Segue-se um exemplo da consulta: Em 10 de setembro de 2013, qual é o número médio de interações do utilizador antes de uma compra?
número de interações do utilizador em 10 de setembro de 2013 antes de uma compra |
---|
SELECT one.hits.item.productSku AS ProductSku, ( sum_of_hit_number / total_hits ) AS avg_hit_number |
Percentagem de stock vendida por produto
Este é um exemplo de uma consulta que depende, não apenas de dados do Analytics, mas também de dados que não são do Analytics. A combinação de ambos os conjuntos de dados permite começar a compreender o comportamento do utilizador a um nível mais segmentado. Pode importar dados que não são do Analytics para o BigQuery, mas tenha em atenção que tal vai contribuir para a sua quota de armazenamento de dados mensal.
Segue-se o esboço de um script para a pergunta: Que percentagem de stock foi vendida por produto?
percentagem de stock vendida por produto |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ((( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold )) * 100 ) AS percentage_of_stock_sold |
- A primeira linha tem como resultado dois campos. Um campo contém todos os IDs de produtos e o outro é uma operação matemática que mostra a percentagem de stock vendida para esse ID do produto.
- Uma vez que esta consulta depende de dois conjuntos de dados, tem de usar a função
JOIN() ... ON
. Este comando associa as linhas dos dois conjuntos de dados com base no campo comum entre eles. Neste caso, os dois conjuntos de dados são[ ‘Imported_DataSet’ ]
e‘Alias_Name’
. [ ‘Imported_DataSet’ ]
são os dados que não pertencem ao Analytics. Este é o conjunto de dados que contém o campo de métrica relativo ao stock restante (Imported DataSet.’stock_left_field’
) e o campo de dimensão do ID do produto (Imported_DataSet.’productId_field’
)."Alias_Name"
é o nome atribuído aos dados devolvidos pela subconsulta a cinzento. Esta subconsulta utiliza dados do Google Analytics para calcular a quantidade total de artigos vendidos por produto.- A última linha usa a declaração
ON
para mostrar qual é o campo comum entre os dois conjuntos de dados e onde são associados os dois conjuntos de dados.
Muitas das variáveis existentes nesta consulta têm o nome do respetivo conjunto de dados anexado como prefixo (por exemplo, Imported_DataSet.’productId_field’, Alias_Name.quantity_sold
). Isto destina-se a clarificar o campo que está a selecionar e a explicitar o conjunto de dados a que pertence.
Segue-se um exemplo da consulta: Que percentagem de stock foi vendida por produto em 28 de julho de 2013?
percentagem de stock vendida por produto em 28 de julho de 2013 |
---|
SELECT AnalyticsImport.product_data_20130728.productId, ( ( ( one.quantity_sold ) / ( AnalyticsImport.product_data_20130728.productstock + one.quantity_sold ) ) * 100 ) AS percentage_of_stock_sold |
Rentabilidade de cada produto
Segue-se o esboço de um script para a pergunta: Qual é a rentabilidade de cada produto?
lucro por produto |
---|
SELECT Alias_Name.hits.item.productSku, ( Imported_DataSet.’product profit field’ * Alias_Name.quantity ) AS profit |
- A primeira linha contém a operação matemática de cálculo do lucro total realizado em cada produto.
- A subconsulta a cinzento utiliza dados que não são do Analytics, que recolhe os dados sobre o montante do lucro realizado quando um produto é vendido.
- A subconsulta a vermelho é a subconsulta de dados do Analytics, que serão associados aos dados que não são do Analytics. Calcula a quantidade de artigos vendidos por produto.
- A última linha usa a declaração
ON
para clarificar o campo que os dois conjuntos de dados partilham. Neste caso, trata-se do número de ID do produto.
Segue-se um exemplo da consulta: Qual foi a rentabilidade de cada produto em 28 de julho de 2013?
lucro por produto em 28 de julho de 2013 |
---|
SELECT two.hits.item.productSku, ((AnalyticsImport.product_data_20130728.productprice-AnalyticsImport.product_data_20130728.productcost)*two.quantity) AS profit |
O lucro é calculado através da diferença entre o preço a que o produto é vendido e o respetivo custo de produção. Estas informações são armazenadas no conjunto de dados que não é do Google Analytics.
Rentabilidade real de cada produto (tendo em conta os reembolsos)
Segue-se o esboço de um script para a pergunta: Qual é a rentabilidade real de cada produto?
lucro real por produto |
---|
SELECT Alias_Name.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
- Esta consulta é muito semelhante a Qual é a rentabilidade de cada produto? As únicas diferenças estão no conjunto de dados que não são do Analytics, na subconsulta a cinzento, e na operação matemática para o cálculo do lucro real, na primeira linha.
- No conjunto de dados que não são do Analytics, também está a calcular o montante total gasto em reembolsos (na declaração
SELECT
da subconsulta a vermelho). - Em seguida, realiza uma operação matemática na linha 1 para encontrar o lucro real, ao subtrair a receita gasta em reembolsos do lucro bruto.
Para mais informações sobre a consulta, vá para a secção sobre a rentabilidade de cada produto.
Veja um exemplo da seguinte consulta: Qual foi a rentabilidade real de cada produto em 28 de julho de 2013?
lucro real por produto em 28 de julho de 2013 |
---|
SELECT two.hits.item.productSku, (gross_profit-total_refund_revenue) AS real_profit |
O lucro real tem em conta a rentabilidade de um produto após a consideração dos produtos reembolsados. Para calcular o total de receita reembolsada de um produto:
total de receita reembolsada de um produto = (o preço do produto + o preço de reembolso do produto) * a quantidade de produtos reembolsados