データ品質
概要
GitLab でのデータ品質向上に向けて、中央データチームはデータ品質プログラムの MVC を作成しています。このアプローチは、新しいデータ品質マネージャーが採用されるのを待つ間に、データコミュニティがデータ品質を改善するために使用できるプログラムを開発することです。このハンドブックページでは MVC を文書化し、GitLab でのデータ品質の改善に貢献するためのガイダンスをチームメンバーに提供します。
データ品質ランブック
ランブック
新しいデータ品質 Issue ランブック
検出されたすべてのデータ品質 Issue は データ品質プロジェクトで開かれ、トリアージされる必要があります。データチームプロジェクトで開かれたスコープ内の Issue はデータ品質プロジェクトに移動できます。
トリアージ担当者は次のステップを決定するために以下のラベルを Issue に適用する必要があります:
- DQ: ウェイポイント: データ品質問題の根本原因を調査および/または解決する必要があるウェイポイントを選択します。選択肢は、ソースシステムオーナー・データプラットフォームチーム・アナリティクスエンジニアリング・またはデータコンシューマーです。
トリアージ担当者はデータ品質エピックを検索し、新しい Issue が既存のエピックに関連しているかどうかを確認する必要があります。Issue で特定された問題の根本原因に対処する既存のエピックがある場合、Issue はそのエピックにリンクされ、新しい Issue がリンクされたことを Issue の作成者と既存エピックの DRI にコメントで送信する必要があります。
エピックの DRI は新しくリンクされた Issue が関連していることを検証できます。
問題に対処するエピックが開かれていない場合、Issue はガバナンス計画が必要かどうかを判断するためにさらなる検証が必要です。Issue が [データ品質スコアカード検出フレームワーク(将来導入予定)の検出ルール] の 1 つに関連している場合、トリアージ担当者は次のステップについて R&D データフュージョンチームマネージャーに Issue を参照できます。Issue が検出ルールの 1 つに関連していない場合、トリアージ担当者は通常のトリアージプロセスに従う必要があります。
ガバナンス計画ランブック
ガバナンス計画ランブックは、ガバナンス計画の実装と採用を促進することを目的としています。データ管理を容易にし、柔軟性と継続的な改善を提供するためのものです。計画を実装する際は、以下のステップを考慮してください:
ステップ #1 で問題文を記述し、データ品質プロジェクトでエピックを開き、残りのデータガバナンス計画のステップを通じてクロスファンクショナルチームをガイドする DRI を決定します。
このハンドブックページにデータ品質 Issue の新しいセクションを作成し、ガバナンス計画を提供します。データ品質プロジェクトのエピックへのリンクを提供します。
DRI はデータ品質ガバナンス計画の完了を促進する必要があります。これはビジネス・ファンクショナルアナリティクス・中央データチーム間の協力的な取り組みである必要があります。
GitLab のデータ品質プロジェクト
プロジェクト
データ品質プロジェクト。こちらから Issue を開いて、データ品質問題 Issue テンプレートを使用してください。
ガバナンス計画とプロセス
1. ガバナンス計画 DRI の識別
データ品質マネージャーがいないため、チームをガバナンス計画とプロセスを通じてガイドするために、計画ごとに DRI を割り当てる必要があります。
2. データ品質問題文の開発
問題文はデータ品質問題が何であるか、そしてビジネス成果にどのような影響を与えるかを定義する必要があります。問題文はデータ品質エピックテンプレートを使用してデータ品質プロジェクトのエピックに追加する必要があります。
3. 潜在的な根本原因の開発
問題文で識別されたデータ品質 Issue の根本原因を特定する必要があります。これらの根本原因はビジネスプロセスに関連している場合もあれば、ソースシステムアプリケーションの技術的な設定に関連している場合もあります。同じ問題文と根本原因に関連するすべての Issue はデータ品質プロジェクトで開かれ、関連するエピックにリンクされる必要があります。多くの場合、同じ問題文に対して多くのデータ品質 Issue が開かれます。問題文を持つ高レベルのエピックを持ち、関連する Issue をリンクするこのアプローチは、データ品質問題を適切な根本原因エピックと相関付けるのに役立ちます。
4. データ定義の定義
問題文で識別された根本原因に従って、ソースシステム・ソースシステムデータベーステーブル・ソースシステムフィールド・ソースシステムフィールド定義を識別します。このステップは、データがデータパイプラインで発行される前のデータ生成時点でのソースシステムのエンティティと定義を文書化することを目的としています。
5. システムと問題のデータフロー図の開発
データ品質問題を解決するには、クロスファンクショナルチームが協力して問題を解決する必要があります。チームメンバーがデータパイプラインの特定の分野に詳しくない場合、さまざまなシステム・アプリケーション・データを整合させることが難しい場合があります。したがって、すべてのステークホルダーが理解しやすく、システム・アプリケーション・データの概要を提供するシンプルなデータフロー図を提供する必要があります。
6. 品質標準と監視の定義
問題文で定義された Issue に関連する品質標準を識別する必要があります。例えば、SaaS ネームスペースをサブスクリプションにマッピングする場合、品質標準は 95% または 100% のカバレッジにすべきか、あるいはその中間にすべきか?品質標準を監視するためのデータ検出ルール結果を提供する Tableau チャートを開発する必要があります。また、品質標準を満たさないことのビジネスへの影響を示すビジネス影響検出チャートも提供する必要があります。
7. データテーブルとカラムのオーナーシップの決定
すべての該当するデータテーブルとフィールドをリスト化する必要があります。集中すべき4つの主なテーブルは以下のとおりです:
- ソースシステムテーブル
- データソースのための Snowflake の RAW または PREP データベースのソーステーブル(重複排除またはクリーンアップが行われるかどうかによって異なります)
- データが COMMON に最初にランドされる場所に応じた Snowflake の
common_prepまたはcommonエンタープライズ次元モデルテーブル - Snowflake のマートまたはレポートテーブル
チームメンバーは、それぞれのテーブルとフィールドのデータ品質の DRI として各テーブルとカラムに割り当てられる必要があります。一般的に、バックエンドエンジニアおよび/またはプロダクトマネージャーはソースシステムテーブルの DRI であるべきで、データプラットフォームエンジニアは Snowflake のソーステーブルの DRI であるべきで、アナリティクスエンジニアは common_prep または common テーブルの DRI であるべきで、ファンクショナルアナリストはマートまたはレポートテーブルの DRI であるべきです。
8. 解決策
ガバナンス計画で識別された根本原因の解決策はこのステップで文書化する必要があります。これらの解決策は一時的な回避策と永続的な解決策で構成できます。利用可能な場合は、解決策の推定リリース日を提供できます。
SaaS ネームスペース <> サブスクリプションマッピングのガバナンス計画
1. ガバナンス計画 DRI
@jdbeaumont
2. データ品質問題文
CS Ops チームには、製品使用データが表示されない、または製品使用データが非常に古い顧客ネームスペースに関連する多くの Issue が提起されています。その結果、これらの問題を抱えている顧客のためにヘルス・採用・成熟スコアを生成できません。
3. 潜在的な根本原因
SaaS サブスクリプションがいくつかの潜在的な理由で Zuora のネームスペース/グループに割り当てられていない(頻度の降順):
- マルチイヤーのランプサブスクリプション(旧): 各ランプセグメントが Zuora で別々のサブスクリプションとして作成されます。以前のランプサブスクリプションセグメントが期限切れになると、顧客がアクセスを失う可能性があります。
- US 以外のエンティティを持つサブスクリプション: これは、サブスクリプションが別の Zuora アカウントで更新として作成され、以前のデータが移行されていないことを意味する可能性があります。顧客はアクセスできない可能性があります。
- Zuora で人間によって作成されたサブスクリプション: ネームスペースの割り当ては新しいサブスクリプションに自動的に移行されません。これは
#2のサブセットである可能性があります。 - CustomersDot の注文に NamespaceId が割り当てられているが、関連する Zuora サブスクリプションには割り当てられていない: この場合、顧客はアクセスできます。Issue。
- リセラーを通じて購入されたサブスクリプション: 顧客は CDot にアクセスしてネームスペースの割り当てを行えないため、サポートがネームスペースの割り当てを支援する必要があります。顧客はアクセスできない可能性があります。
- エラー修正のために de-book / rebook されたサブスクリプション: 見積もりは SFDC からプッシュされますが、顧客への通知を避けるために Zuora 通知プロファイルがサイレントになります。de-book されたサブスクリプションデータ(ネームスペースなど)は移行されません。*これをさらに理解する必要があります。
4. データ定義
| ソースシステム | ソースシステムテーブル | ソースシステムフィールド名 | ソースシステムフィールド名の定義 |
|---|---|---|---|
| Zuora | subscription | id (SubscriptionId) | このオブジェクトの ID。作成時、このオブジェクトの ID は SubscriptionId です。 |
| Zuora | subscription | GITLABNAMESPACEID__C | サブスクリプションが関連付けられている SaaS ネームスペース ID。これは GitLab の Fulfillment チームによって追加されたカスタムフィールドです。 |
5. システムと問題のデータフロー図
6. 品質標準と監視
品質標準
サブスクリプションのないインスタンスのデータ品質ダッシュボードの SaaS セクションは、以下のメトリクスを提供する必要があります:
- ネームスペース ID が欠落している有料 SaaS サブスクリプションの割合
- ネームスペース ID が欠落している有料 SaaS サブスクリプションの数
- ネームスペース ID が欠落している SaaS ARR の割合
- ネームスペース ID が欠落している SaaS ARR の合計
- 製品ティア別のネームスペース ID が欠落している SaaS ARR の合計と有料 SaaS サブスクリプションの数
ドラフト: 上記のメトリクスの品質標準を検討・設定する必要があります。
7. データテーブルとカラムのオーナーシップ
ソースシステムテーブル
| システム | テーブル | カラム | DRI |
|---|---|---|---|
| Zuora | subscription | subscriptionid | @courtmeddaugh |
| Zuora | subscription | GITLABNAMESPACEID__C | @courtmeddaugh |
Snowflake ソーステーブル
| システム | テーブル | カラム | DRI |
|---|---|---|---|
| Snowflake | raw.zuora_stitch.subscription | id | @paul_armstrong |
| Snowflake | raw.zuora_stitch.subscription | GITLABNAMESPACEID__C | @paul_armstrong |
Snowflake Common_Prep または Common テーブル
| システム | テーブル | カラム | DRI |
|---|---|---|---|
| Snowflake | prod.common_prep.prep_subscription | dim_subscription_id | @mdrussell |
| Snowflake | prod.common_prep.prep_subscription | namespace_id | @mdrussell |
Snowflake マートまたはレポートテーブル
| システム | テーブル | カラム | DRI |
|---|---|---|---|
| Snowflake | PROD.PUMPS.PUMP_GAINSIGHT_METRICS_MONTHLY_PAID | DIM_NAMESPACE_ID | @mdrussell @bbutterfield |
| Snowflake | PROD.PUMPS.PUMP_GAINSIGHT_METRICS_MONTHLY_PAID | DIM_SUBSCRIPTION_ID_ORIGINAL | @mdrussell @bbutterfield |
8. 解決策
一時的な回避策
近日公開...
永続的な解決策
近日公開...
データ品質問題の種類
従来のデータ品質プログラムは、品質問題を完全性・正確性・一貫性・有効性・一意性・整合性など、いくつかの種類に分類します。これらのニュアンスは、データ品質の専門家でない人たちが扱う際に混乱を招く可能性があります。この問題を簡略化するために、GitLab データ品質プログラムは以下のデータ品質問題の種類を認識します:
不正確なデータ: 不正確なデータとは、本来表すべき現実世界の値と一致しないデータです。 不正確なデータの例としては、3桁の米国郵便番号があります。
不足しているデータ: 不足しているデータとは、存在すべき NULL または空のフィールドまたはレコードです。 不足しているデータの例としては、住所レコード内の NULL の郵便番号値があります。
重複データ: 重複データとは、繰り返されるべきでない同じデータが繰り返されることです。 重複データは、データの報告方法によって自然に発生する可能性があるため、識別が複雑になることがあります。 重複データの例としては、どちらも単一の「実在する」顧客にリンクされている、CUSTOMER マスターテーブル内の2つの(ほぼ)同一の顧客レコードがあります。
データ品質スコアカード・検出ルール・ダッシュボード・オペレーショナルプロセス
データ品質システムは、時間の経過とともに問題を監視するのに役立つスコアカードと、データの特定の既知の問題を特定する検出ルールで構成されます。
データ品質スコアカード - データ品質スコアカードは、データカスタマーとデータクリエーターが使用するダッシュボードです。ダッシュボードは、対象エリアの個々の検出ルールのステータスによって測定される、対象エリアの全体的な品質を表示します。特定の目的のために特定の独立したデータ品質スコアカードを作成できます。例えば、現在「データ品質スコアカード - 製品使用データ」を積極的に開発しており、Zuora 請求システムの品質を測定するための別の「データ品質スコアカード - Zuora」の開発も予定しています。
データ品質検出ルール - データ品質検出ルールは、フィールドまたは行のデータ品質を事前定義された条件に対してチェックする SQL ベースのテストです。検出ルールを実行するには、エンタープライズデータウェアハウスにデータが既に存在している必要があります。検出ルールは列挙され、SQL 文ごとに1つのテストのみが表現されます。検出ルールの例:
- 検出ルール 1: 不正確なデータ - アカウントロケーションレコードの州フィールド
- 検出ルール 2: 重複データ - アカウントマスターレコードのアカウント名
- 検出ルール 3: 不足しているデータ - 新しい使用状況 Ping 送信のためにライセンスキーが存在すべき
オペレーショナルプロセス - 毎週、検出ルールの「バッチ」が実行され、出力が永続テーブルに保存されます。永続テーブルには実行日・検出ルール識別子・ソースシステムへのリンクを可能にするトランザクション ID が含まれます。永続テーブルはスコアカードが生成される基礎となります。
製品データ品質スコアカード
目的 - 製品データ品質スコアカードは、製品使用データに関するデータ品質 Issue を数値化します。
スコアカードダッシュボードには以下の情報を表示する視覚化が含まれます:
- 各製品データ品質検出ルールの合格/不合格率。合格したレコードの割合は、条件またはデータ品質検出ルールを満たすレコードの総数の割合として計算されます。計算に使用される数式: *((passed_record_count/processed_record_count)100)
同様に、不合格のレコードの割合は、条件またはデータ品質検出ルールを満たさなかったレコードの総数の割合として計算されます。 *((failed_record_count/processed_record_count)100)
検出ルールの合否は、合格したレコードの割合をしきい値と比較することによって決定されます。現時点ではしきい値は50に設定されています。正確なしきい値は DRI によって決定される必要があります。
合格したレコードの割合 > しきい値 の場合、検出ルールのステータスはグリーンです。例えば、合格したレコードの割合が72%(50%超)の場合、レコードの72%がデータ検出ルール/条件を満たしていることを意味します。
合格したレコードの割合 < しきい値 の場合、検出ルールのステータスはレッドです。例えば、合格したレコードの割合が40%(50%未満)の場合、レコードの60%がデータ検出ルール/条件を満たしていないことを意味します。これらは注意が必要であり、ソースチームによってデータを修正する必要があります。
トレンド分析チャートは、1週間の期間における各データ品質検出ルールの合格/不合格率の変化を示します。
日次のサマリーカウントは、各データ品質検出ルールの処理された行の総数と、ルール実行日によって追跡される各日のルール/条件を満たす(合格)行数および満たさない(不合格)行数を示します。
データパイプラインヘルスダッシュボード
Issue(内部リンク)を参照してください。
最初のイテレーションは以下に焦点を当てて追加されました:
- 主要テーブルの日次レコード挿入および更新速度をテストする SQL 文(行数テスト)
- 主要テーブルの主要フィールドの集計合計をテストする SQL 文(カラム値テスト)
- これらの結果をシンプルな形で視覚化するワイヤーフレームダッシュボード
製品使用メトリクスカバレッジダッシュボード
このダッシュボードは、メトリクス辞書と Snowflake マッピングへのメトリクスに基づいて、製品使用メトリクスのデータ可用性の割合を取得します。内容は以下のとおりです:
- SaaS とセルフマネージドの両方について、製品使用メトリクス・データ可用性の割合・欠損値の割合・データソース・説明・パフォーマンス指標タイプを表す表とグラフの視覚化
- 表は上記のフィールドの詳細を提供します
- 棒グラフはデータ可用性の割合の高い順からデータソース別にメトリクスを視覚化します
- 上記のフィールドの説明:
- 製品使用メトリクス: アクティブユーザー数・マージリクエスト・DAST ジョブなどの製品使用に関するメトリクス
- データ可用性の割合: このデータを取得するレコードの数の割合
- 欠損値の割合: このデータが欠落しているレコードの数の割合
- データソース: データが database・redis・redis_hll・またはシステムなどのソースから来るかどうか
- 説明: メトリクスの定義
- パフォーマンス指標タイプフラグ: メトリクスが UMAU/SMAU/GMAU/PAID GMAU かどうか。詳細については xMAU 分析ページを参照してください
- 更新は週次のケイデンスで実行されます
クイックリンク
製品使用データのために現在識別されているデータ品質検出ルール:
| 検出ルール ID | ルールの説明 | DRI |
|---|---|---|
| 1 | ホスト名のインスタンスタイプが欠落している | |
| 2 | サブスクリプション ID が欠落しているライセンス | |
| 3 | ライセンスが欠落しているサブスクリプション | |
| 4 | ライセンス開始日が将来の日付となっているセルフマネージドプランを持つサブスクリプション | |
| 5 | ライセンス開始日がライセンス有効期限より大きいセルフマネージドプランを持つサブスクリプション | |
| 6 | サブスクリプション終了日が過去のものになっている有効期限切れのライセンス ID | |
| 7 | ネームスペース ID が欠落している SaaS サブスクリプション |
追加リソース
ガイドと書籍
SaaS ツール
Fivetran と Stitch はいずれもマネージドサービスとして、独自のデータ品質チェックを提供します。抽出時のデータの問題はベンダーのサポートチームに対処する必要があります。
カスタム
Monte Carlo をデータオブザーバビリティツールとして使用しています。
Postgres パイプライン
独自の Postgres_Pipeline(gitlab.com・customers.gitlab.com・version.gitlab.com からのデータを処理)は、ソースと宛先データベース間の行数の一致を確認します。
変換データ品質
ウェアハウスでのすべての変換に dbt を使用しています。すべての新しい dbt モデルにテストを要求し、必要に応じて定期的にテストを更新します。これらのテスト、および抽出テストとチェックは、上記で説明したデータ品質哲学に沿って記述する必要があります。
データ品質インシデント
データ品質インシデントは、より広いデータチームインシデント管理プロセスのサブセットです。
データ品質 Issue がインシデント基準を満たす場合、確立されたインシデント管理手順に従ってインシデントステータスにエスカレーションする必要があります。
永続的にデータが失われた場合
| 行 | Issue | 影響を受けるデータソース | 影響 | 影響ウィンドウ |
|---|---|---|---|---|
| 1. | Snowplow エンドポイント証明書が1日失効した | Snowplow | ほぼ1日間、Snowplow イベントが記録されなかった | 2023-07-04 |
| 2. | Redis/RedisHLL イベントがトリガーされなかった | 自動化された GitLab.com サービス Ping | GitLab.com の顧客はインスタンスレベルの Redis メトリクスの値を過小報告します | 7d メトリクスは 2024-02-15 から 2024-03-05; 28d メトリクスは 2024-02-15 から 2024-03-26 |
| 3. | バージョン <= 12.0 のサービス Ping が欠落している | SM サービス Ping | v12.0 以前のすべてのインストールはサービス Ping を送信していなかった | 2024-02-12 から 2024-04-28 |
| 4. | 2023年2月〜6月のサービス Ping が国にマッピングされていない | SM サービス Ping | 2023-02-21 から 2023-06-21 のサービス Ping は null の dim_location_country_id を持っています | 2023-02-21 から 2023-06-21 |
| 5. | Snowplow エンドポイント証明書が6時間失効した | Snowplow | 6時間、Snowplow イベントが記録されなかった | 2024-07-03 23:59:59 - 2024-07-04 05:59:59 |
データが更新された場合
| 行 | Issue | 影響を受けるデータソース | 影響 | 影響ウィンドウ |
|---|---|---|---|---|
| 1. | 2024-10-11 - 2024-10-16 Snowplow イベントが欠落している (gitlab_saas_duo_pro_namespace_ids) | Snowplow | gitlab_saas_duo_pro_namespace_ids カラムのフォーマットが間違っている(大きな影響はなく、カラムが数値の代わりに文字列としてフォーマットされた) | 2024-10-11 - 2024-10-16 |
| 2. | 顧客の質問(レッドデータ)が製品アナリティクスデータに漏洩している | Snowplow | Snowflake の category と detailed_category の値のレッドデータが公開された。 | 2023-10-23 - 2024-12-02 |
| 3. | Snowflake: Snowflake と S3 バケットで page_url_path を仮名化する | Snowplow | Snowflake の page_url_path カラムのデータが公開された。 | 2022-10-01 - 2025-01-01 |
| 4. | S3: Snowflake と S3 バケットで page_url_path を仮名化する | Snowplow | s3 バケットの page_url_path カラムのデータが公開された。 | 2022-10-01 - 2025-01-01 |
| 5. | AI Gateway SSOT データソースが ‘request_duo_chat_response’ に関連するイベントのネームスペースを欠落している | Snowplow | request_duo_chat_response に誤ったネームスペースが割り当てられた | 2024-08-28 - 2024-12-04 |
| 6. | サービス Ping の送信が v17.6 SM インスタンスの Version アプリで検証エラーを引き起こす | Snowplow | 通常より少ない成功したサービス Ping と多数の送信失敗 | 2024-10-04 - 2024-12-16 |
