Análise de ponta a ponta do Azure SQL + dbt + Github Actions + Metabase

Título







Olá, Habr! Meu nome é Artemy Kozyr.







Nos últimos anos, acumulei uma vasta experiência com dados e com o que agora é chamado de Big Data .







Não muito tempo atrás, o interesse no campo de marketing na Internet e análise de ponta a ponta também aumentou , e não do zero. Meu amigo da agência de atuação me forneceu dados e casos de clientes reais, e aquipuladolá vamos nós.

Acontece bastante interessante: Azure SQL + dbt + Github Actions + Metabase.







Metade do sucesso em acertar a tarefa



Então, vamos tentar sem elogios e direto ao ponto. Retrato do cliente (este é para quem estamos prestando o serviço): o proprietário de uma loja online / rede de varejo / aplicativo móvel / plataforma educacional. Ele persegue os seguintes objetivos:







  • Posicionar e promover seu produto; o crescimento do negócio
  • Otimização dos canais de promoção: foco nas áreas que dão o melhor resultado
  • Controle de despesas e indicadores de retorno para cada rublo investido
  • Segmentação de usuários e construção de comunicação com eles


Em média, ele usa 4 grupos de serviços:







  • CRM ( AmoCRM , Bitrix24 ) - leads, funis e vendas; ciclo de vida e atributos reais das transações
  • (Yandex.Metrika, Google Analytics) — , , ,
  • (Facebook, Google Adwords, Yandex.Direct) — , -, ,
  • Call-tracking/Event tracking — , -


, : , , CRM, . . :







Formulário de relatório acordado da Agência para o Cliente







, , . :







  • ()
  • ( !)
  • ( )
  • ( )


()



- . : : ? ( 3:13).







myBI Connect. - , -. , :







1.







( ), , ETL-.







, Facebook (Campaigns), (Adsets) (Ads), , , , , ..







Diagrama de camadas detalhado do Facebook myBI Connect

Facebook myBI Connect







2. //







.? .Clickhouse . , , , ( ).







API .
https://api-metrika.yandex.net/stat/v1/data.csv
   ?ids=55254416
   &dimensions=ym:s:date, ym:s:UTMSource, ym:s:UTMMedium, ym:s:UTMCampaign
   &metrics=ym:s:visits, ym:s:ecommercePurchases, ym:s:ecommerceRevenue
   &date1=2020-12-01
   &date2=2020-12-31
   &group=day
   &lang=en
   &accuracy=full
   &sort=ym:s:date
   &limit=100000
   &pretty=true
      
      





JSON-, ( cron), (requests), .. .







myBI Connect .







Upload personalizado de Yandex.Metrica

.







3. Webhook ,







  • CRM? ?
  • ! Webhook .


. inhouse-CRM, XML:







# get data from XML endpoint with curl utility
curl "https://www.internal-crm.ru/order-list.xml?date-from=01-12-2020&date-to=31-12-2020" -o export.xml

# convert XML to JSON with xq utility
xq . export.xml > export.json

# parse JSON doc with jq utility
jq '[."order-list".date[] | .order[]]' export.json > parsed.json

# post to myBI Connect Webhook endpoint with curl utility
curl --header "Content-Type: application/json" \
 --request POST \
 --data @parsed.json \
 https://app.mybi.ru/webhook/23576/xhsfcxmlyh/
      
      





XML, JSON, , myBI Connect Webhook. shell-, .







4.









, . .









(Data Modeling), . , , () - .







Blocos DWH básicos: fontes, camada de detalhe, data marts

DWH: , ,







DWH :







  • (1) — , , CRM
  • (2) — (, );
  • (3) — -, ;


dbt. git-, .sql ( ) .yaml (). dbt : Data Build Tool .







- : BigQuery, Redshift, Snowflake, Postgres, Spark, Presto. Azure SQL Database (managed SQL Server). , ; , -, ( ).







Estrutura do projeto: git repo com código (.sql) e configuração (.yaml)

: git- (.sql) (.yaml)







DWH :







Cadeia de dependência do modelo: Fontes -> Estágio -> Subs -> Mostruários

: -> -> ->







1. (Sources)







- , myBI Connect. .







2. (Staging)







( views), . :







  • , UTM-
  • : , ..
  • ( )


3. (Auxiliary)







Aux . () :







  • — , , ( )
  • : , ..


4. (Marts)







— , . , - . . :







  • , ,
  • -: ,
  • : full join,




— ?

— , .

— . , API, , Github Action, .







Visualização da dinâmica dos indicadores-chave em um painel interativo







. . , ().







, , . , . Slack.







— . , . .







Camada semântica para acesso aos metadados da vitrine e camada de detalhes







:







  • ,
  • , , -
  • (x-ray)


Open Source BI Metabase (!). Amazon Elastic Beanstalk, :







  • Docker-
  • Postgres (AWS RDS)
  • (Load Balancing) -Healthcheck
  • Metabase


Implementação produtiva do BI Metabase na nuvem AWS Elastic Beanstalk

BI Metabase AWS Elastic Beanstalk









? ! , , . , .







1.







, . , .. .

. - — . .







(1) : , , { }, UTM- ( !), , . , , . , .







(2) -. - - php-, .







(3) , . , Google Adwords aud-, kwd-, pla-.







(4) , . !







Exemplos de como levar em consideração as peculiaridades da marcação para a análise subsequente de identificadores







, .







2. CRM







CRM, , . , , - . , , .







— , CRM-, ?

— : .

? , .







Verificando o painel para lidar com problemas no CRM

CRM







3. ( )







, , . . : . - :







from costs c
   full join conversions cv on
           c.[] = cv.[]
       and c.[ ] = cv.[ ]
       and c.[  ] = cv.[  ]
       and c.[  ] = cv.[  ]   
      
      





NULL? ( NULL = NULL).







: , -:







--      
{%- set key_field_list = [
       '[]',
       '[ ]',
       '[  ]',
       '[  ]'
   ]
-%}

--  -     
select

     {{ concat_key(key_field_list) }} as concat_key
   , {{ surrogate_key(key_field_list) }} as hash_key

...

--    :
from costs c
   full join conversions cv on c.hash_key = cv.hash_key
      
      





. .







Uma chave hash substituta é ideal para uma junção;  a chave de concatenação é legível por humanos

- ;







4.







, full join. , , , : CRM, , ..







-, , ( ). -, .







-, - , . -:







  • meta_is_row_match (true/false) — ?
  • meta_row_origin — (././AmoCRM)?


Metacolunas is_match, row_origin ajudam a encontrar fontes de problemas

- is_match, row_origin







, CRM - ? . , , . :







   select 
       ...
       , sum(1) as []
       , sum(CASE WHEN [] LIKE '%%' THEN 1 ELSE 0 END) as [ -  ]
       , sum(CASE WHEN [ ] LIKE '%%' THEN 1 ELSE 0 END) as [ -  ]
       , sum(CASE WHEN [ ] LIKE '%%' THEN [] ELSE 0 END) as [ -  ]
       ...
      
      





5.







. . , API .. , ym:s:<AttributionModel>UTMSource:







ym:s:lastsignUTMSource --   
ym:s:firstUTMSource --  
ym:s:lastUTMSource --  
ym:s:last_yandex_direct_clickUTMSource --    

      
      





6. ()







- . , .







Automatizando data marts com Github Action

Github Action







Github Action kzzzr / mybi-dbt-action — , Docker-, , , , . , , .









. . , , . .







, . — . , . . .







? ?

1 5 .

, ?

.

, TODO:







  • : , API, Webhook
  • , dbt CORE . .
  • + + + (- -)
  • ( + ),
  • ( ) Github Actions
  • , , (DAG)
  • : Git-, DEV PROD.
  • : , -, .




, . :









, ?



pet-project, . :







  • , . , ?
  • . Private, public Open Source.
  • . , - .
  • . — .


Vou publicar notícias relacionadas a este projeto no canal de telegramas https://t.me/enthusiastech .







Fique ligado nas atualizações e tire suas dúvidas, terei prazer em respondê-las.







Obrigado pela atenção.








All Articles