あなたの目とダッシュボードに表示されるものを信頼してください
でウイリー、私たちは、業務および戦略的な意思決定を行うために、データに大きく依存しています。パートナーへの毎週のボーナスの支払いから他の都市や国への拡大まで。
各マネージャーまたはプロダクトオーナーは自分の領域をよく知っており、逸脱すると疑問が生じる可能性があります。したがって、ダッシュボードとメトリックの信頼性に対する要件が増加します。また、分析チームでは、問題が報告される前に、問題を特定して修正するよう努めています。
ご存知のように、予防する方が簡単なので、体系的かつ積極的に問題に取り組むことにしました。そしてもちろん、私が最初に行ったのはSlackチャネルを作成することでした。このチャネルに、パイプラインのエラーに関する通知の配信を設定しました。
データマートの関連性への信頼
まず、カスタムストアフロントにその時点で最新のデータが含まれていることを確認する必要があります。
毎日午前10時までに、最後の1日のショーケースを計算しました
ソースからの読み取りは時間と歩調を合わせ、ラグは8時間を超えません
DWH
, QA :
,
:
.yml freshness:
freshness:
warn_after: {count: 4, period: hour}
error_after: {count: 8, period: hour}
loaded_at_field: "__etl_loaded_at"
SQL-:
select
max({{ loaded_at_field }}) as max_loaded_at,
{{ current_timestamp() }} as snapshotted_at
from {{ source }}
where {{ filter }}
:
, , :
(edge cases),
(bottleneck)
:
: , Out of Memory, Disk Full
SLA
:
, + ( )
CPU
- IO, network
.
:
,
:
+pre-hook: "{{ logging.log_model_start_event() }}"
+post-hook: "{{ logging.log_model_end_event() }}"
, , . - , , , , PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE.
DWH . . .. , .
:
(NULL) , ?
(UNIQUE ID )?
(PRIMARY - FOREIGN KEYS)?
, (ACCEPTED VALUES)?
QA :
,
:
.yml tests:
- name: dim_cars
description: Wheely partners cars.
columns:
- name: car_id
tests:
- not_null
- unique
- name: status
tests:
- not_null
- accepted_values:
values: ['deleted', 'unknown', 'active', 'end_of_life', 'pending', 'rejected'
, 'blocked', 'expired_docs', 'partner_blocked', 'new_partner']
SQL-
-- NOT NULL test
select count(*) as validation_errors
from "wheely"."dbt_test"."dim_cars"
where car_id is null
-- UNIQUE test
select count(*) as validation_errors
from (
select
car_id
from "wheely"."dbt_test"."dim_cars"
where car_id is not null
group by car_id
having count(*) > 1
) validation_errors
-- ACCEPTED VALUES test
with all_values as (
select distinct
status as value_field
from "wheely"."dbt_test"."dim_cars"
),
validation_errors as (
select
value_field
from all_values
where value_field not in (
'deleted','unknown','active','end_of_life','pending','rejected','blocked','expired_docs','partner_blocked','new_partner'
)
)
select count(*) as validation_errors
from validation_errors
-
- - , . -, .
:
,
%
( ), .
QA :
, -.
:
SQL ,
SQL-
(PASSED) 0 , (FAILED) >= 1
Continuous Integration - DWH
, . DWH . . , , , PROD- PR Merge:
DEV- PROD-
(, Out of Memory)
- Continuous Integration (CI). !
:
master- PROD- DWH .
:
CI (, PROD-, 7 )
feature- master
- DWH
( ) :
DWH ,
(, , ) --
, , (, ).
:
, () .
, :
, : , , (, , ), (, , ).
,
DWH
drill-down :
, . , :
,
Continuous Integration and Testing
( )
, Wheely. , .
, , , «Data Engineer» OTUS, .
4 20:00 «Data Engineer». OTUS , .
:
Data Build Tool - DBT
How to get started with data testing - dbt discourse
Manual Work is a Bug - DRY