Analisar exemplos de SQL
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Reconhecer as funções de uma instrução SQL.
- Incluir um período de tempo em uma instrução SQL de insights de streaming.
- Encontrar recursos para ajudar a criar o SQL.
Insights de streaming no Data Cloud
A melhor forma de aprender como criar insights com o SQL é analisando instruções de exemplo. Quando você conseguir identificar o que cada seção de uma instrução SQL faz, poderá reconhecer padrões que podem ser usados para criar suas próprias instruções. Antes de vermos os exemplos, é importante saber que há dois tipos de insights: Calculados e de streaming. Os insights calculados são usados para consultar e criar cálculos complexos baseados em dados armazenados, e os insights de streaming são consultas baseadas em dados em tempo real.
E, com os insights de streaming, você pode:
- Gerar análises de séries temporais em movimentações de dados contínuas.
- Encontrar padrões úteis e compartilhar os insights com outros aplicativos via Ações de dados.
- Criar usando o Criador de insights e o SQL.
- Usar com a API Java Database Connectivity (JDBC) e ferramentas de visualização como o Tableau.
Exemplos de SQL de insights calculados
Vamos começar com alguns exemplos de insights calculados. Ele calcula dados de engajamento por email encontrados no Marketing Cloud e agrupa esses dados com dados de perfis individuais unificados.
SELECT COUNT( EmailEngagement__dlm.Id__c) as email_open_count__c, UnifiedIndividual__dlm.Id__c as customer_id__c FROM EmailEngagement__dlm JOIN IndividualIdentityLink__dlm ON IndividualIdentityLink__dlm.SourceRecordId__c = EmailEngagement__dlm.IndividualId__c and IFNULL(IndividualIdentityLink__dlm.KQ_SourceRecordId__c, ‘’) = IFNULL(EmailEngagement__dlm.KQ_IndividualId__c, ‘’) and EmailEngagement__dlm.EngagementChannelActionId__c ='Open' JOIN UnifiedIndividual__dlm ON UnifiedIndividual__dlm.Id__c = IndividualIdentityLink__dlm.UnifiedRecordId__c GROUPBY customer_id__c
Vamos analisar cada seção dessa instrução SQL.
Seção 1
SELECT COUNT( EmailEngagement__dlm.Id__c) as email_open_count__c, UnifiedIndividual__dlm.Id__c as customer_id__c
O que faz:
Seção 2
FROM EmailEngagement__dlm
O que faz: Localiza essas informações no DMO de engajamento por email.
Seção 3
JOIN IndividualIdentityLink__dlm ON IndividualIdentityLink__dlm.SourceRecordId__c = EmailEngagement__dlm.IndividualId__c and IFNULL(IndividualIdentityLink__dlm.KQ_SourceRecordId__c, ‘’) = IFNULL(EmailEngagement__dlm.KQ_IndividualId__c, ‘’) and EmailEngagement__dlm.EngagementChannelActionId__c ='Open' JOIN UnifiedIndividual__dlm ON UnifiedIndividual__dlm. Id__c = IndividualIdentityLink__dlm.UnifiedRecordId__c
O que faz: Nesta etapa, conecte o DMO de engajamento por email com o DMO de link de identidade individual. Conecte-os usando as chaves estrangeiras da ID do registro de origem e da ID individual e os respectivos atributos do qualificador de chave, e faça a junção baseando-se no engajamento por email que equivale a um email aberto. Também conecte esses dados ao DMO individual unificado com base na ID e na ID do registro unificado.
Seção 4
GROUPBY customer_id__c
O que faz: Agrupa essas informações com base na ID do cliente.
Antes de continuarmos, há mais uma coisa que é importante observar sobre o exemplo anterior. A forma como o objeto UnifiedIndividual está relacionado a um objeto de engajamento (como EmailEngagement) se dá por meio de um objeto de ponte (como o link de identidade individual), que contém o mapeamento da ID individual unificada e da ID individual.
Em seguida, vamos ver outro exemplo de SQL usando uma função de classificação. Essa instrução calcula os gastos do cliente e usa essa informação para classificar os clientes com base nos gastos de todos os Indivíduos unificados.
SELECT UnifiedIndividual__dlm.ssot__Id__c AS customer_id__c, RANK() OVER (ORDER BY SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) ) AS customer_rank_based_on_spend__c, SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) AS customer_spend__c FROM ssot__SalesOrder__dlm JOIN IndividualIdentityLink__dlm ON (ssot__SalesOrder__dlm.ssot__SoldToCustomerId__c = IndividualIdentityLink__dlm.SourceRecordId__c) AND IFNULL(ssot__SalesOrder__dlm.KQ_SoldToCustomerId__c, ‘’) = IFNULL(IndividualIdentityLink__dlm.KQ_SourceRecordId__c, ‘’) LEFT OUTER JOIN UnifiedIndividual__dlm ON (IndividualIdentityLink__dlm.UnifiedRecordId__c = UnifiedIndividual__dlm.ssot__Id__c) GROUP BY customer_id__c HAVING RANK() OVER (ORDER BY SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) ) < 1000
Vamos detalhar melhor essa instrução.
Seção 1
SELECT UnifiedIndividual__dlm.ssot__Id__c AS customer_id__c, RANK() OVER (ORDER BY SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) ) AS customer_rank_based_on_spend__c, SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) AS customer_spend__c
O que faz: Em todos os indivíduos unificados, classifica cada cliente de acordo com o total de gastos.
Seção 2
FROM ssot__SalesOrder__dlm
O que faz: Procura essa informação no DMO de pedido de vendas.
Seção 3
JOIN IndividualIdentityLink__dlm ON (ssot__SalesOrder__dlm.ssot__SoldToCustomerId__c = IndividualIdentityLink__dlm.SourceRecordId__c) AND IFNULL(ssot__SalesOrder__dlm.KQ_SoldToCustomerId__c, ‘’) = IFNULL(IndividualIdentityLink__dlm.KQ_SourceRecordId__c, ‘’) LEFT OUTER JOIN UnifiedIndividual__dlm ON (IndividualIdentityLink__dlm.UnifiedRecordId__c = UnifiedIndividual__dlm.ssot__Id__c)
O que faz: Faz a junção dos dados do DMO de pedido de vendas com o DMO de link de identidade individual com base na ID do cliente e ID individual, e seus respectivos atributos de qualificadores de chave. Faz a junção com alguns dados correspondentes no DMO individual unificado baseado na ID e ID do registro unificado.
Seção 4
GROUP BY customer_id__c
O que faz: Agrupa essas informações com base na ID do cliente.
Seção 5
HAVING RANK() OVER (ORDER BY SUM(ssot__SalesOrder__dlm.ssot__GrandTotalAmount__c) ) < 1000
O que faz: Inclui menos de 1000 clientes conforme o valor total de gastos.
Insights de streaming
Depois de analisarmos alguns exemplos de insights calculados, vamos mudar o foco para a criação de um SQL para insights de streaming. A criação de um insight de streaming com SQL é semelhante à criação de um insight calculado, porém é necessário considerar uma janela de tempo.
Exemplo de SQL de insights de streaming
Vamos ver um exemplo que mostra exibições de página em um período de 5 minutos.
SELECT COUNT( RealTimeMobileEvents__dlm.pageviews__c ) as page_views__c, ssot__Individual__dlm.ssot__Id__c as customer_id__c, ssot__Individual__dlm.KQ_Id__c as kq_customer_id__c, RealTimeMobileEvents__dlm.product__c as product__c, WINDOW.START as start__c, WINDOW.END as end__c FROM RealTimeMobileEvents__dlm JOIN ssot__Individual__dlm ON ssot__Individual__dlm.ssot__Id__c = RealTimeMobileEvents__dlm.deviceId__c AND IFNULL(ssot__Individual__dlm.KQ_Id__c, ‘’) = IFNULL(RealTimeMobileEvents__dlm.KQ_deviceId__c, ‘’) GROUP BY window( RealTimeMobileEvents__dlm.dateTime__c ,'5 MINUTE'), Customer_id__c, kq_customer_id__c
A diferença notável nessa instrução SQL em relação aos insights calculados são os comandos WINDOW. Eles definem como os resultados são agrupados; nesse exemplo, em um período de 5 minutos.
WINDOW.START as start__c, WINDOW.END as end__c GROUP BY window( RealTimeMobileEvents__dlm.dateTime__c ,'5 MINUTE'),
Veja um exemplo de resultado dessa expressão.
START_C
| END_C
| CUSTOMER_ID_C
| PRODUCT_C
| PAGE_VIEWS_C
|
---|---|---|---|---|
12
| 12.05 | 1 | HK0012
| 1
|
12.05
| 12.1 | 2 | JK0078
| 2
|
12.1
| 12.15 | 3 | HK0078
| 1
|
Vamos ver outro exemplo.
SELECT SUM( MobileApp_RT_Events__dlm.productPurchaseWeb_orderQuanity__c ) as order_placed__c, MobileApp_RT_Events__dlm.AddToCartWeb_productId__c as product__c, WINDOW.START as start__c, WINDOW.ENDas end__c FROM MobileApp_RT_Events__dlm GROUPBY window( MobileApp_RT_Events__dlm.dateTime__c, '5 MINUTE' ), MobileApp_RT_Events__dlm.AddToCartWeb_productId__c
Vamos analisar cada seção dessa instrução.
Seção 1
SELECT SUM( MobileApp_RT_Events__dlm.productPurchaseWeb_orderQuanity__c ) as order_placed__c, MobileApp_RT_Events__dlm.AddToCartWeb_productId__c as product__c, WINDOW.START as start__c, WINDOW.END as end__c
O que faz: Encontra a soma dos pedidos feitos com base na fonte de streaming de eventos do MobileApp entre uma hora de início e uma hora de término.
Seção 2
FROM MobileApp_RT_Events__dlm
O que faz: Usa a fonte de streaming de eventos do MobileApp.
Seção 3
GROUPBY window( MobileApp_RT_Events__dlm.dateTime__c, '5 MINUTE' ), MobileApp_RT_Events__dlm.AddToCartWeb_productId__c
O que faz: Agrupa os resultados em agregações de 5 minutos segundo a ID do produto e inclui informações sobre: quantidade de pedidos feitos, produto, hora de início e de término identificados.
Criar suas declarações
Agora que você já conhece os conceitos básicos e alguns exemplos, explore as várias opções disponíveis para criar insights. Existem muitas outras funções que podem ser adicionadas às instruções SQL para aumentar ainda mais os resultados.
- Confira algumas regras de SQL específicas para insights.
- Explore nosso repositório de exemplos de SQL em um Repositório GitHub do Data Cloud.
Para finalizar, visite Insights calculados para saber como criar insights calculados. Com tudo isso, você estará pronto para aproveitar ao máximo o poder de uma consulta SQL no Data Cloud.
Recursos
- Ajuda do Salesforce: Usar instruções SQL para criar insights
- Externo: Salesforce GitHub, insights calculados do Data Cloud