データハブとして Denodo を利用するための情報整理



## 概要

データハブとして Denodo に関わる機会があったため、データハブとはどういったものであるかを整理したうえで、Denodo をデータハブとしてどのように利用すべきであるかの検討結果を共有します。



## データハブ概要
### データハブとは

データマネジメントの知識体系である DMBOK（データマネジメント知識体系ガイド 第二版）にて明確な定義を確認できませんでした、次のような役割がある旨の記載があります。データウェアハウスやデータマートがデータハブを担うこともできるようです。

>    データハブは多くのアプリケーションで必要とされるデータを集約し、それらのアプリケーションにデータの一貫したビューを提供する。

引用元：DMBOK 第8章  データ統合と相互運用性 1.イントロダクション 


DMBOK にて、データハブが例示されています。

>   データウェアハウス、データマート、オペレーショナル・データストア、マスタデータ管理のハブはデータハブの最もよく知られた例である。

引用元：DMBOK 第8章  データ統合と相互運用性 1.イントロダクション 

### データハブの機能
データハブには次のような機能が必要です。

1. データソースへの接続
2. データの蓄積（データウェアハウス、データマート、オペレーショナル・データストア等）
3. データの統合
4. データの提供
5. データへの権限付与
6. データの品質確認
7. データの利活用支援


### データハブにおける連携方法
データ連携方法として次の３つの方法があるが、本記事では２の連携方法を行うことを前提とします。

| #    | 連携方法                     | 概要                                                         |
| ---- | ---------------------------- | ------------------------------------------------------------ |
| 1    | ポイント・ツー・ポイント     | システム間を直接的に接続することによりデータの連携を行う方法。 |
| 2    | ハブ＆スポーク               | 中央の共通データ制御システムのデータビューを通して、システム間を間接的に接続することによりデータの連携を行う方法。 |
| 3    | パブリッシュ・サブスクライブ | データのプッシュ（パブリッシュ）とプル（サブスクライブ）によりデータの連携を行う方法。 |


### データハブ（ハブ＆スポーク型の連携方法）が必要となる背景

DMBOKにてポイント・ツー・ポイントには次のような課題があるという記載があり、その解決策としてデータハブ（ハブ＆スポーク型の連携方法）があるようです。

> このモデルは小さなシステム群を対象にする場合は意味があるが、多数のシステムが同じソースから同じデータを必要とする際には効率が急速に低下してしまい、組織としてのリスクが高くなる。

引用元：DMBOK 第8章  データ統合と相互運用性 1.イントロダクション 

> データの交換にハブ＆スポーク型の設計パターンを利用することで、データの変換と統合のソリューションが急増することを妨げ、必要な組織的サポートを大幅に簡素化できる。

引用元：DMBOK 第8章  データ統合と相互運用性 1.イントロダクション 


DBMOKにてポイント・ツー・ポイントの具体的なリスクが記載されており、私の解釈を加えると次のようなものがあるようです。2 については、システム改修によりインタフェースの仕様変更が必要となり、連携先システム担当者への説明行脚を実施しているところをみたことがあります。

1. ソースシステムへの負荷が高くなり、そのシステムが適切に動作しなくなってしまうこと
1. インタフェースを管理する業務負荷が高くなってしまうこと
1. インタフェース先システム間での不整合が発生してしまうこと


次の図がポイント・ツー・ポイントとハブ＆スポークを比較したものであるが、ハブ＆スポークの方がシステム間の連携がシンプルです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/504d9f13-5610-3efa-d13c-50cf2702a8ce.png)



### データハブ（ハブ＆スポーク型の連携方法）の課題点

次のようなデータハブ（ハブ＆スポーク型の連携方法）の課題点がDMBOKにて記載されています。少人数のチームでデータハブの開発を担う場合には、要求されるタスクに対してケイパビリティが不足することもあります。システム的な観点だけでなく、組織としての観点で業務運用設計を実施してください。

> 一部のハブ＆スポーク型モデルはレイテンシが許容できないか、満足なパフォーマンスを得られないこともある。ハブ自体がハブ＆スポーク・アーキテクチャのオーバヘッドを生じさせる。

引用元：DMBOK 第8章  データ統合と相互運用性 1.イントロダクション 

## データハブとしての Denodo の利用
### Denodo とは

データ仮想化テクノロジーにより統合したデータを連携できるソリューションです。jdbc、ODBC、REST API などにより取得したデータ(CONNECT)を、VQL という SQL ライクな言語により統合(COMBINE)したうえで、jdbc、ODBC、REST APIなどの多様なAPI経由で提供(CONSUME)できます。

![image-20220706094132189.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e5314ce2-ee33-a5a7-4bcf-94d20f4434fb.png)
引用元：[Denodo Home | Denodo](https://www.denodo.com/ja)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/304e81a0-f326-9e02-0e7c-b19ffca5ebc8.png)
引用元：[How Data Virtualization Works | Denodo](https://www.denodo.com/en/data-virtualization/how-it-works)

複数のデータストア上のデータを組み合わせることができ、データの処理を最適なデータストアで処理を行うプッシュダウンが実施されることが特徴です。

![pasted image 0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/847ed473-5bf7-8d4a-3681-0dacca51ccc5.png)
引用元：[DenodoのキャッシングをETLなどの他の形式のレプリケーションと比較する](https://community.denodo.com/kb/en/view/document/Comparing%20caching%20in%20Denodo%20with%20other%20forms%20of%20replication%20like%20ETL?category=Best%20Practices&lang=ja)

開発者の方には次のリンクが役立ちます

-   [Documents | Denodo](https://community.denodo.com/docs/)
-   [Knowledge Base | Denodo](https://community.denodo.com/kb/en/)
-   [Tutorials (denodo.com)](https://community.denodo.com/tutorials/)
-   [Expert Trails | Denodo](https://community.denodo.com/expert-trails/)

実際の画面を触りたい方法として、無償で利用できる Denodo Express を利用する方法と学習目的で短時間利用可能な Denodo Test Drive があります。

-   [Denodo Express, the free data virtualization tool | Denodo](https://www.denodo.com/en/denodo-platform/denodo-express)
-   [Denodo Test Drives](https://www.denodo.com/en/denodo-platform/test-drives?utm_source=homepage%26utm_medium%3Dbn)

### Denodo  利用時の推奨事項
#### 1. Denodo の利用指針の明確化
データハブを運用するためには、適切なデータガバナンスの構築を実施してください。Denodo 開発者やデータ分析基盤の構築者とは、必要となるスキルセットが異なることを考慮して、人材を選定を実施してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1150fa81-0a96-ca67-315e-effbdddaf10b.png)

Virtual DataPort、あるいは、Data Catalog のそれぞれに対してユーザーへの公開範囲、及び、CRUD の観点での認可範囲を検討してください。Denodo への過度な負荷が行われないように、データ量の制限等のシステムの利用指針を提示するようにしてください。

1. 組織全体
1. データ利活用者
1. データエンジニア
1. Denodo 開発者

Denodo 管理者は、データスチュワードとしての役割を担い、システム管理を含めた次のような業務を実施する必要があります。 データスチュワードへの業務負荷が高くなることから、データ品質の保証をデータオーナー側と役割分担を行うなどの業務設計が重要です。

- データオーナーとのデータ共有合意
- データオーナーとのコミュニケーション
- データ利活用者とのコミュニケーション
- システムの監視
- インフラストラクチャーの構成

Denodo からのデータの提供を行う際には、次のいずれかの方法で提供することになります。データ鮮度、システムのレイテンシー、データのスループット等の観点で、事前に利用指針を検討すべきです。データハブとしてオペレーショナル・データストアを構築することがありますが、Denodoのキャッシュ機能で代替できそうです。

1. データソースからのからの提供
1. キャッシュサーバーからの提供
1. データ分析基盤（Data lake、DWH）からの提供


#### 2. データ分析基盤を Denodo を中心に設計

データ分析基盤、データレイク、DWH、データマートを構築する際には、Dendo をソースとしてデータ取得を行い、Denodo 経由でデータ提供を行いましょう。ただし、データ分析を行う際には大量データの取得が行われることを考慮して、Denodo を経由せずに連携すべきユースケースを明確にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2fff8d64-7d4e-49b0-4277-e376cba3e856.png)

#### 3. ボトルネックを考慮した拡張計画とユースケースの明確化

Denodo はVM等で稼働するソフトウェアであるため、ネットワークスループットがボトルネックとなる可能性があります。プッシュダウン機能が充実していることから集計データの取得時にはあまり問題とならなそうですが、データ分析の場合には全カラムのデータを取得（SELECT * のクエリ）が実施されることが多々あり、ネットワーク負荷が懸念事項となりそうです。利用ユースケースを明確にしたうえで、拡張計画を事前に検討すべきです。

負荷テストを実施する方法として、次の記事が参考になります。

- [Denodo Load Testing with Apache JMeter](https://community.denodo.com/kb/en/view/document/Denodo%20Load%20Testing%20with%20Apache%20JMeter)
- [Knowledge Base | Denodo](https://community.denodo.com/kb/en/view/document/Denodo%20Load%20Testing%20with%20LoadRunner?category=Performance%20%26%20Optimization)

#### 4. キャッシュ戦略が重要

次の記事を参考に、キャッシュ戦略を明確にしてください。~~キャッシュサーバーとしては、同時実行性とレイテンシーの観点で、スケールアウトが容易なクラウド型リレーショナルデータベースがおすすめです。~~（キャッシュエンジンとしてサポートされているデータストアが増えたため撤回）

-   [パフォーマンスを最大化するためのベストプラクティスIII：キャッシング (denodo.com)](https://community.denodo.com/kb/en/view/document/Best%20Practices%20to%20Maximize%20Performance%20III:%20Caching?category=Best%20Practices&lang=ja)
-   [キャッシュモジュール — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_module)
-   [キャッシュの使用 — VQL ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/vql/advanced_characteristics/using_the_cache/using_the_cache)
-   [キャッシュロードクエリの推奨パラメータ — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_modes/recommended_parameters_for_queries_that_load_the_cache)
-   [マテリアライズドテーブルの作成 — VQL ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/vql/materialized_tables/creating_materialized_tables/creating_materialized_tables)
-   [サマリによるスマートクエリアクセラレーション — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/optimizing_queries/summary_views/summary_views#admin-summaries-label)
-   [Expert Trail: Cache (denodo.com)](https://community.denodo.com/expert-trails/view/document/Expert%20Trail:%20Cache?lang=ja)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a250d7fa-48d2-0f52-7bc1-7dfb19c773a2.png)

引用元：[サマリ書き換えによる最適化 — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/optimizing_queries/summary_views/summary_rewrite_optimization/summary_rewrite_optimization#caching-vs-summary-rewriting)

キャッシュサーバーにて、データサイズが大きい場合には、データ一括読み込みの実施や大量データ処理時の推奨値の設定を行ってください。

-   [データ一括読み込み — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/bulk_data_load/bulk_data_load#bulk-data-load)
-   [大量のデータセットのキャッシュ — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_modes/caching_very_large_data_sets)

データ一括読み込みを利用する判断の指針が記載されております。

>   これらのインターフェイスを使用する価値があるのは、挿入する行数が数万件を超える場合です。

引用元：[データ一括読み込み — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/bulk_data_load/bulk_data_load#bulk-data-load)

パフォーマンス向上策として `MPP Query Acceleration` というものもあり、推奨サイズが次のドキュメントに記載されているのですが、小規模な構成ではないようです。

> Impala
> Physical cluster
> - Minimum recommended: 16 nodes.

> Spark
> Physical cluster
> - Minimum recommended: 16 nodes.

> Presto
> Physical cluster
> - Minimum recommended: 16 nodes.

引用元：[MPP Query Acceleration: Sizing guidelines (denodo.com)](https://community.denodo.com/kb/en/view/document/MPP%20Query%20Acceleration%3A%20Sizing%20guidelines#h.dd0czkwrjja9)

#### 5. Denodo 推奨のプロジェクト構成に合わせること

Denodo では、ビュー等を次のようなプロジェクト構成で管理することが推奨されています。dbt でも同じような構成が推奨されているのですが、データソース（Denodo でいう基本ビュー）を直接参照するようなビューを提供すべきではないようです。

![image-20220706223222181.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c44f8101-84f5-4cf2-2d73-f904cdeef41b.png)
引用元：[Denodo Development Best Practices](https://community.denodo.com/kb/en/view/document/Denodo%20Development%20Best%20Practices)

>   -   **Connectivity**: Related to the physical systems. Data sources and base views are part of this level.
>   -   **Integration**: Includes the combinations and transformations for the next layers. Not directly consumed views at this level.
>   -   **Business Entities:** Canonical business entities exposed to all users.
>   -   **Report Views:** Pre-built reports and analysis frequently consumed by users.
>   -   **Data Services:** Web services for publishing views from other levels. Can contain views needed for data formatting and manipulation.

引用元：[VDP Naming Conventions (denodo.com)](https://community.denodo.com/kb/en/view/document/VDP%20Naming%20Conventions)

>   -   コネクティビティ：物理システムに関するもの。データソースやベースビューはこのレベルに含まれる。
>   -   統合：次のレイヤーのための組み合わせと変換を含む。このレベルでは、ビューは直接消費されない。
>   -   ビジネスエンティティ：すべてのユーザーに公開される正規のビジネスエンティティ。
>   -   レポートビュー：ユーザーが頻繁に使用する、あらかじめ作成されたレポートや分析。
>   -   データサービス：他のレベルからのビューを公開するためのWebサービス。データのフォーマットや操作に必要なビューを含むことができる。

上記の機械翻訳

データソース変更の検知を自動化するためのストアードプロシージャが用意されているようです。

> GET_SOURCE_CHANGES とGET_VIEWS ストアドプロシージャと、Denodoスケジューラを使用して検出を自動化する方法。

引用元：[データソースの変更を検出する方法 (denodo.com)](https://community.denodo.com/kb/en/view/document/How%20to%20detect%20changes%20in%20data%20sources?category=Data%20Sources&lang=ja)

よって、Databricks のような外部データをテーブル化できるデータストアでは、Denodo 用のデータベース（スキーマ）を用意することで、運用業務がシンプルになります。

#### 6. アソシエーションを設定する業務がほぼ必須

アソシエーションを設定することで、パフォーマンスがあがることや利用時の品質が向上するというメリットがあるため、アソシエーションを設定する業務設計を実施してください。

> アソシエーションが役立つのはなぜですか？
> 次の観点に基づいて、適切な場合にビュー間の関連付けを定義する必要がある理由はいくつかあります。
> - パフォーマンス
> - ビジネスインテリジェンスツール
> - 使いやすさ
> - Metadata
> - サードパーティのモデリングツール
> - データカタログ

引用元：[Associations in Denodo](https://community.denodo.com/kb/en/view/document/Associations%20in%20Denodo?category=Combining%20Data&lang=ja)

#### 7. 資格情報を外部のサービスに配置することで他サービスとの資格情報の共有が可能

資格情報を格納する外部サービスとして、次のサービスが利用可能です。たとえば、Azure Key Vault に資格情報を格納することで、Azure Databricks でもその資格情報を利用できます。

![image-20220706142414526.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/036fc472-0629-e968-c52f-b20860314a6c.png)

引用元：[資格情報保管方法 — Virtual DataPort 管理ガイド (denodo.com)](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/server_configuration/credentials_vault/credentials_vault)

## その他の Denodo の情報
### ベストプラクティス関連

-   [Best Practices (denodo.com)](https://community.denodo.com/kb/en/category/Best%20Practices)
-   [Denodoのベストプラクティスとガイドライン](https://community.denodo.com/kb/en/view/document/Denodo%20Best%20Practices%20and%20Guidelines?category=Best%20Practices&lang=ja)
-   [VDP Naming Conventions (denodo.com)](https://community.denodo.com/kb/en/view/document/VDP%20Naming%20Conventions)
-   [Denodo Cookbook: Query Optimization | Denodo](https://www.denodo.com/en/document/e-book/denodo-cookbook-query-optimization)

### DevOps 関連

-   [Denodo Deployments and Continuous Integration](https://community.denodo.com/kb/en/view/document/Denodo%20Deployments%20and%20Continuous%20Integration?category=Best%20Practices)
-   [Denodo Testing Tool - User Manual](https://community.denodo.com/docs/html/document/denodoconnects/8.0/jp/Denodo%20Testing%20Tool%20-%20User%20Manual)
-   [Testing in Denodo](https://community.denodo.com/kb/en/view/document/Testing%20in%20Denodo?category=Best%20Practices)
-   [エキスパートトレイル：展開トポロジ (denodo.com)](https://community.denodo.com/expert-trails/view/document/Expert%20Trail%3A%20Deployment%20Topology?lang=ja)
-   [Expert Trail: Development Lifecycle (denodo.com)](https://community.denodo.com/expert-trails/view/document/Expert%20Trail%3A%20Development%20Lifecycle?lang=ja)
-   [VCSブランチのベストプラクティス (denodo.com)](https://community.denodo.com/kb/en/view/document/VCS%20Branching%20Best%20Practices?category=Best%20Practices&lang=ja)

### 他データストアの SQL 変換関連

-   [OracleSQLからDenodoVQLへのクイックリファレンス](https://community.denodo.com/kb/en/view/document/Oracle%20SQL%20to%20Denodo%20VQL%20Quick%20Reference)
-   [Microsoft SQLServerSQLからDenodoVQLへのクイックリファレンス](https://community.denodo.com/kb/en/view/document/Microsoft%20SQL%20Server%20SQL%20to%20Denodo%20VQL%20Quick%20Reference)
-   [TeradataSQLからDenodoVQLへのクイックリファレンス](https://community.denodo.com/kb/en/view/document/Teradata%20SQL%20to%20Denodo%20VQL%20Quick%20Reference)
-   [DB2SQLからDenodoVQLへのクイックリファレンス](https://community.denodo.com/kb/en/view/document/DB2%20SQL%20to%20Denodo%20VQL%20Quick%20Reference)

### モニタリング関連	

-   [エキスパートトレイル：モニタリング (denodo.com)](https://community.denodo.com/expert-trails/view/document/Expert%20Trail%3A%20Monitoring?lang=ja)
-   [デノドログをAmazonS3に保存する方法 (denodo.com)](https://community.denodo.com/kb/en/view/document/How%20to%20store%20Denodo%20logs%20in%20Amazon%20S3?category=Operation&lang=ja)
-   [DenodoログをAzureBlobStorageに保存する方法](https://community.denodo.com/kb/en/view/document/How%20to%20store%20Denodo%20logs%20in%20Azure%20Blob%20Storage?category=Operation&lang=ja)
-   [AmazonCloudWatchを使用したDenodoのモニタリング](https://community.denodo.com/kb/en/view/document/Monitoring%20Denodo%20with%20Amazon%20CloudWatch?category=Operation&lang=ja)
-   [AzureMonitorを使用したDenodoの監視](https://community.denodo.com/kb/en/view/document/Monitoring%20Denodo%20with%20Azure%20Monitor?category=Operation&lang=ja)

## What’s next

データファブリックが注目されるようになってきており、Denodo を活用する上で取り入れるべき概念のようです。。ガートナーの次の記事が参考になります。

-   [Using Data Fabric Architecture to Modernize Data Integration (gartner.com)](https://www.gartner.com/smarterwithgartner/data-fabric-architecture-is-key-to-modernizing-data-management-and-integration)