【Data Quality Monitoring】Validioを調べてみた

# 背景・目的
[【ModernDataStack】Data Quality Monitoringについて調べてみた](https://qiita.com/zumax/items/d345643d2fe3ece0ebf2#validio)で、各製品を簡単に整理してみました。
このうち、今回は、Validioの特徴と機能を整理してみます。

# まとめ
Validioは下記の特徴を有しています。

|特徴|説明|
|:--|:--|
|概要|Validioは、データ負債を克服できるように構築されたデータトラストプラットフォーム<BR>下記の機能を統合したプラットフォーム<BR>・データカタログ<BR>・データリネージ<BR>・Data Observability<BR>・Data Quality|
|他の製品との相違点|・データストアと、メタデータの両方をValidate<BR>・構造化データセット/半構造化形式やネストされた形式を検証する<BR>・アルゴリズムとしきい値を使用してデータを検証する。<BR>・自動化を第一に考えられている。<BR>・CLIとGUIのインタフェイスを提供|


# 概要
以前、[こちら](https://qiita.com/zumax/items/d345643d2fe3ece0ebf2#validio)に整理しましたのでよろしければご覧ください。

## Introduction
### About Validio
[About Validio](https://docs.validio.io/docs/what-is-validio)を元に整理します。
> Validio は、企業がデータと AI への投資収益率を最大化し、データと AI プロジェクトが失敗する主な理由であるデータ負債を克服できるように構築されたデータ トラスト プラットフォームです。

- Validioは、データ負債を克服できるように構築されたデータトラストプラットフォーム

> Validio は、データ カタログ、データ リネージ、詳細なデータの可観測性と品質を 1 つのプラットフォームに統合し、データ チームとビジネス関係者が共同で最もビジネスに重要なデータ資産の優先順位付け、検証、改善を行うことを可能にします。

- Validioでは、下記を1つのプラットフォームに統合している
    - データカタログ
    - データリネージ
    - Data Observability
    - Data Quality
- データ資産の優先順位付け、検証、改善を行うことを可能にしている
- 他の Data Observabilityの 相違点
    - データストアと、メタデータの両方をValidateする
    - 構造化データセットだけではなく、JSON BLOBなどの半構造化形式やネストされた形式のデータも含めて、様々な形式と型のデータの検証を行う
    - アルゴリズムとしきい値を使用してデータを検証し、シーズナリティによる分布の変化などのパターンを認識する。
    - 自動化を第一に考えられている。データソースに基づいたバリデーションを推奨することに加えて、データシステムのニーズに合わせてカスタマイズできる
    - CLIとGUIの両方のインタフェイスを提供している。

### Concepts and Terminology
[Concepts and Terminology](https://docs.validio.io/docs/key-concepts)をもとに整理します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2e7dd212-9f44-654b-ced6-10f2ab1ef781.png)
※出典：[Concepts and Terminology](https://docs.validio.io/docs/key-concepts)


1. Credentialは、ソースにアクセスするために使用する。
1. ソースは、DWH、データストリーム、オブジェクトストレージなどの1つのソースシステムへのコネクタ。
    - DWHであれば1つのテーブル
    - データストリームのトピック
    - オブジェクトストレージのスキーマ

1. Windowは、ソース内のデータのサブセットに対して計算されtあメトリクスを使用してデータを検証する。下記を定義できる
    - 時間間隔
    - 固定サイズのバッチ
    - ファイル
1. Segmentationは、セグメントごとに検証できる。
1. Validatorは、どのフィールドでどのメトリクスを検証するか。また、どのしきい値を許容できるとみなすかを指定する。定義済みのセグメンテーションとウィンドウを選択し、フィルターを構成することもできる。各ソースには1つ以上のバリデータを含めることができる。
1. Notification Rulesは、により、Slackなどの指定されたチャンネルにインシデントを送信できる。
1. Notification Channelは、同じチャンネルを複数の通知ルールに使用できる。
1. Linageは、データがどのように流れるか。一部のソースではリネージはCredentialとdbtマニュフェストファイルに基づいて自動的に作成される。

## Sources
### About Sources
[About Sources](https://docs.validio.io/docs/sources)を元に整理します。

- Validio は、多くのデータ ソースからの構造化データおよび半構造化データを検証できる。
- 下記がサポートされている。
    - BigQuery
    - PostgreSQL
    - Redshift
    - Snowflake
    - Databricks
    - GCS
    - S3
    - Kafka
    - Kinesis
    - Pub/Sub
    - Pub/Sub Lite
    - Athena

#### Schema
- Validio は、メタデータまたは推​​論に基づいて、すべてのソースのスキーマを定義する
- メタデータからのスキーマ
    - Validio は、データ ウェアハウスなどのデータ ソース内のメタデータからスキーマを読み取る
- 推論からのスキーマ
    - 事前定義されたスキーマが存在しない場合、既存のデータからスキーマを推測
    - ほとんど半構造化が該当する。

#### スキーマ変更の検出
- データ ウェアハウスの構造化データ型とオブジェクト ストレージのファイルのスキーマ変更を自動的に検証する
- スキーマ チェックは 1 時間ごとに実行される
- 検出されたスキーマ変更はすべてインシデントとして報告される


### Semi-structured data
- 構造化データに加えて、Validio は半構造化データ型やその他の複雑なデータ型もサポートされる。
- Validio は JSONPath を使用してデータ構造を表わす。
- 2024/1/31 現在、Validio は配列内のデータ検証をサポートしていない。
- サポートされているソースとデータ型は下記の通り。
    - BigQuery
        - JSON, ARRAY, STRUCT
    - PostgreSQL
        - JSON, JSONB, array types
    - Redshift
        - SUPER
    - Snowflake	ARRAY
        - OBJECT, VARIANT
    - GCS
        - Parquet
    - S3
        - Parquet
    - Kafka
        - JSON, protobuf, Avro
    - Kinesis
        - JSON, protobuf, Avro
    - Pub/Sub
        - JSON, protobuf, Avro
    - Pub/Sub Lite
        - JSON, protobuf, Avro
    - Athena
        - ARRAY, MAP, STRUCT

## Windows
### About Windows
[About Windows](https://docs.validio.io/docs/windows)を元に整理します。

- ソース内のデータセットのメトリクスを計算して検証するには、ウィンドウ (バッチ) が必要
- Validatorsを作成するに当たり、ソース上で少なくとも 1 つの Window を構成する必要
- Windowsの種別
    - Fixed batch window
        - 固定バッチ ウィンドウは、特定のデータ時間フィールドからの指定された数のデータポイントによって定義
    - Global window
        - ポーリングごとに、一連のウィンドウではなく、ソース全体に対してすべてのバリデーター メトリクスが計算
        - グローバル ウィンドウは、データ ウェアハウスとクエリ エンジンでのみ使用できる。
    - Tumbling window
        - 固定サイズで重複しない連続した一連の時間間隔
        - hourlyやweeklyなど
        - 最小のサイズ
            - 30分
            - 10分
    - File window
        - ファイルやBLOBごと
        - オブジェクトストレージソースタイプでのみ使用される



## Segumentation
### About Segmentation
[About Segmentation](https://docs.validio.io/docs/segmentation)を元に整理します。

- セグメントごとにデータを検証し、データの奥深くにある問題を検出して解決する。
- データのセグメントのメトリクスを検証するように構成できる
- 下記にイメージを記す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b452d9e9-b009-1975-11bf-dfe831e6add8.png)
※出典：[About Segmentation](https://docs.validio.io/docs/segmentation)

#### Multi filed segmentation
- 複数のフィールドにセグメンテーションを作成できる
- Validio には数千のセグメントを使用する顧客がおり、サポートされるセグメントの数は継続的に増加する。

### Why should I use Segmentation?
データを集約するときに情報損失が発生します。逆に、データをセグメント化すると、より詳細な分析を実行できる。

#### セグメンテーションの例
> 小売組織は、製品の価格が適切であることを確認するために、価格データを検証したいと考えています。検証の目的で、フィールドと を使用したいと考えています。通貨の違いにより、価格は桁違いに異なります。つまり、列のデータポイントを検証するだけではほとんど意味がありません。データ品質検証を実行して異常がないことを確認する前に、データを通貨に基づいてセグメント化する必要があります。

## Validator
### About Validator
[About Validator](https://docs.validio.io/docs/validators)を元に整理します。

- バリデーターは、ソース内のデータを検証する役割を担うコンポーネント
- Validator は常にSourceにアタッチされ、検証はデータのWindow上で行われる。
- フィルターを使用して検証からデータを除外したり、セグメンテーションを使用して検証を 1 つまたは複数のディメンション で分割できる。

### What does a Validator monitor?
- バリデーターは、ウィンドウ上で 1 つ以上のフィールドを使用して計算されたメトリックを監視できる。例えば下記のものが挙げられる。
    - フィールドの平均値
    - フィールドの一意の値
    - テーブル内のレコード数
- バリデーターは、参照メトリック (統計) を追跡することもできる。参照メトリクスは、2 つの異なるデータセットのフィールドを比較することによって生成される。例えば下記のものが挙げられる。
    - 2 つの平均間の比率
    - 相対エントロピー

#### Validator recommendations
- Freshness
- Mean of X
- Count
- Unique count
- Percentage where X is null

# 考察
Data Quality Monitoringの製品の一つである、Validioについて調べてみました。
ドキュメントが読みやすく、実際に試してみたくなりました。今後、検証しようと思います。

# 参考
https://validio.io/

https://docs.validio.io/docs/what-is-validio