Analyse de bout en bout Azure SQL + actions dbt + Github + métabase

Titre







Bonjour, Habr! Je m'appelle Artemy Kozyr.







Ces dernières années, j'ai accumulé une expérience assez étendue avec les données et ce que l'on appelle maintenant le Big Data .







Il n'y a pas si longtemps, l'intérêt pour le domaine du marketing Internet et de l'analyse de bout en bout a également explosé , et non à partir de zéro. Mon ami de l'agence par intérim m'a fourni des données et des cas de vrais clients, et iciignoréloin nous allons.

Cela s'avère assez intéressant: Azure SQL + dbt + Github Actions + Metabase.







La moitié du succès pour faire la bonne tâche



Alors, essayons sans louanges et droit au but. Portrait du client (c'est celui pour qui nous faisons le service): le propriétaire d'une boutique en ligne / réseau de vente au détail / application mobile / plateforme éducative. Il poursuit les objectifs suivants:







  • Positionnement et promotion de votre produit; croissance des affaires
  • Optimisation des canaux de promotion: concentrez-vous sur les domaines qui donnent le meilleur rĂ©sultat
  • ContrĂ´le des dĂ©penses et des indicateurs de rendement pour chaque rouble investi
  • Segmentation des utilisateurs et renforcement de la communication avec eux


En moyenne, il utilise 4 groupes de services:







  • CRM ( AmoCRM , Bitrix24 ) - prospects, entonnoirs et ventes; cycle de vie et attributs rĂ©els des transactions
  • (Yandex.Metrika, Google Analytics) — , , ,
  • (Facebook, Google Adwords, Yandex.Direct) — , -, ,
  • Call-tracking/Event tracking — , -


, : , , CRM, . . :







Formulaire de rapport convenu de l'Agence au client







, , . :







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


()



- . : : ? ( 3:13).







myBI Connect. - , -. , :







1.







( ), , ETL-.







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







Diagramme détaillé des couches 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 .







Téléchargement personnalisé depuis 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), . , , () - .







Blocs DWH de base: sources, calque de détail, 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). , ; , -, ( ).







Structure du projet: git repo avec code (.sql) et configuration (.yaml)

: git- (.sql) (.yaml)







DWH :







Chaîne de dépendances du modèle: Sources -> Stage -> Subs -> Showcases

: -> -> ->







1. (Sources)







- , myBI Connect. .







2. (Staging)







( views), . :







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


3. (Auxiliary)







Aux . () :







  • — , , ( )
  • : , ..


4. (Marts)







— , . , - . . :







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




— ?

— , .

— . , API, , Github Action, .







Visualisation de la dynamique des indicateurs clés sur un tableau de bord interactif







. . , ().







, , . , . Slack.







— . , . .







Couche sémantique pour l'accès aux métadonnées de la vitrine et à la couche de détails







:







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


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







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


Déployer de manière productive la métabase BI dans le cloud AWS Elastic Beanstalk

BI Metabase AWS Elastic Beanstalk









? ! , , . , .







1.







, . , .. .

. - — . .







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







(2) -. - - php-, .







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







(4) , . !







Exemples de prise en compte des particularités du balisage pour l'analyse ultérieure des identifiants







, .







2. CRM







CRM, , . , , - . , , .







— , CRM-, ?

— : .

? , .







Vérification du tableau de bord pour les transactions problématiques dans 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
      
      





. .







Une clé de hachage de substitution est idéale pour une jointure;  la clé de concaténation est lisible par l'homme

- ;







4.







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







-, , ( ). -, .







-, - , . -:







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


Les méta colonnes is_match, row_origin aident à trouver les sources de problèmes

- 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. ()







- . , .







Automatiser les data marts avec 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.
  • . , - .
  • . — .


Je publierai des nouvelles liées à ce projet dans la chaîne de télégramme https://t.me/enthusiastech .







Restez à l'affût des mises à jour et posez des questions, je serai ravi d'y répondre.







Merci de votre attention.








All Articles