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 nos insights calculados.
- Explore nosso repositório de exemplos de SQL em um Repositório GitHub do Data Cloud.
Para finalizar, visite a página de ajuda de insights do Data Cloud 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: Insights calculados
- Ajuda do Salesforce: Como usar instruções ANSI SQL no Data Cloud
- Ajuda do Salesforce: Regras gerais de SQL nos insights calculados
- Ajuda do Salesforce: Como usar o driver do JDBC no Data Cloud
- Externo: Salesforce GitHub, insights calculados do Data Cloud