Hecatoncheir: The Data Stewardship Studio

Contents:

Hecatoncheirについて

概要

Hecatoncheirは、データベースのメタデータおよび実データの統計情報やプロファイルを用いることで、データ品質マネジメントおよびデータガバナンスを実施するデータスチュアードを支援するソフトウェアです。

主要な機能

Hecatoncheirでは、以下の機能を提供しています。

  • メタデータ収集機能
    • データベースに接続してディクショナリ/カタログからメタデータを自動的に収集、可視化します。
    • 補足する情報をインポートして一元的に閲覧することができます。
  • データプロファイリング機能
    • データベースに接続してテーブルやカラムに関する統計情報を自動的に収集、可視化します。
  • データ検証機能
    • あらかじめ指定したルールに基づいてデータが期待した品質や一貫性の状態であるかを検証、可視化します。
  • カタログ機能
    • テーブルを任意のデータセットにグループ化して参照することができます。
    • データセットに関連する説明や添付ファイルを共有することができます。
  • ビジネス用語辞書機能
    • ビジネス用語を登録することで、テーブルやカラムの説明に出てくる用語の意味を参照することができます。

動作環境

対応データベース

現在のバージョンでは、以下のRDBMS製品に対応しています。

  • Oracle Database / Oracle Exadata
  • SQL Server
  • PostgreSQL
  • MySQL
  • Amazon Redshift
  • Google BigQuery

以下のRDBMS製品は、今後、順次対応する予定です。

  • DB2
  • DB2 PureScale (Neteeza)
  • Apache Hive
  • Apache Spark
  • Vertica

対応オペレーティングシステム

現在のバージョンでは、以下のオペレーティングシステムに対応しています。

  • Red Hat Enterprise Linux 6 (x86_64)
  • Red Hat Enterprise Linux 7 (x86_64)
  • Windows 7 (64bit / 32bit)

依存するソフトウェア

動作させるには以下のソフトウェアが必要です。

  • Python 2.7系
  • 各DBMSのクライアントライブラリやドライバ
  • それらをPythonから利用するためのモジュール

Pythonのモジュールとして以下を使用します。

  • cx-Oracle: Oracle Database / Oracle Exadata
  • MySQL-python: MySQL
  • psycopg2: PostgreSQL, Amazon Redshift
  • pymssql: SQL Server

クイックスタート

ソースコードの入手とインストール

Githubのソースコードレポジトリを git clone してソースコードを取得します。

[snaga@localhost tmp]$ git clone https://github.com/snaga/Hecatoncheir.git
Cloning into 'Hecatoncheir'...
remote: Counting objects: 3482, done.
remote: Compressing objects: 100% (237/237), done.
remote: Total 3482 (delta 176), reused 19 (delta 19), pack-reused 3226
Receiving objects: 100% (3482/3482), 864.87 KiB | 1.09 MiB/s, done.
Resolving deltas: 100% (2534/2534), done.
[snaga@localhost tmp]$ cd Hecatoncheir/
[snaga@localhost Hecatoncheir]$ ls
LICENSE        build.bat       dm-import-csv          env.sh
QuickStart.md  build.sh        dm-import-datamapping  requirements.txt
README.md      demo            dm-run-profiler        setup.py
README.oracle  dm-attach-file  dm-run-server          src
bin            dm-export-repo  dm-verify-results
[snaga@localhost Hecatoncheir]$

次に pip install . でインストールを行います。

[snaga@localhost Hecatoncheir]$ sudo /usr/local/bin/pip install .
Processing /disk/disk1/snaga/Hecatoncheir/Hecatoncheir
Requirement already satisfied: jinja2==2.8 in /usr/local/lib/python2.7/site-packages (from hecatoncheir==0.8)
Requirement already satisfied: MarkupSafe in /usr/local/lib/python2.7/site-packages (from jinja2==2.8->hecatoncheir==0.8)
Installing collected packages: hecatoncheir
  Running setup.py install for hecatoncheir ... done
Successfully installed hecatoncheir-0.8
[snaga@localhost Hecatoncheir]$

以下のコマンドがインストールされたら完了です。

[snaga@localhost tmp]$ ls /usr/local/bin/dm-*
/usr/local/bin/dm-attach-file  /usr/local/bin/dm-import-datamapping
/usr/local/bin/dm-dump-xls     /usr/local/bin/dm-run-profiler
/usr/local/bin/dm-export-repo  /usr/local/bin/dm-run-server
/usr/local/bin/dm-import-csv   /usr/local/bin/dm-verify-results
[snaga@localhost tmp]$

メタデータ取得とデータのプロファイリング

次に、実際のテーブルに対してメタデータ取得とデータプロファイリングを実行します。ここではOracleの SCOTT スキーマ、 CUSTOMER テーブルを対象とします。

メタデータの収集とデータプロファイリングをするには dm-run-profiler コマンドを使います。

データベースの種類、TNS名、ユーザ名、パスワード、プロファイリング対象のテーブル名( SCOTT.CUSTOMER )を指定して、 dm-run-profiler コマンドを実行します。

[snaga@localhost tmp]$ dm-run-profiler --dbtype oracle --tnsname orcl --user scott --pass tiger SCOTT.CUSTOMER
[2017-04-30 15:57:09] INFO: 接続先(TNS): scott@orcl
[2017-04-30 15:57:09] INFO: データベースに接続しています。
[2017-04-30 15:57:09] INFO: データベースに接続しました。
[2017-04-30 15:57:09] INFO: レポジトリを初期化しました。
[2017-04-30 15:57:09] INFO: レポジトリファイル repo.db をオープンしました。
[2017-04-30 15:57:09] INFO: ----------------------------------------------
[2017-04-30 15:57:09] INFO: テーブルスキャン並列度: 0
[2017-04-30 15:57:09] INFO: テーブルプロファイリングスキップ: False
[2017-04-30 15:57:09] INFO: 行数プロファイリング: True
[2017-04-30 15:57:09] INFO: カラムプロファイリングスキップ: False
[2017-04-30 15:57:09] INFO: カラムプロファイリング閾値: 100,000,000行
[2017-04-30 15:57:09] INFO: 最小値/最大値プロファイリング: True
[2017-04-30 15:57:09] INFO: NULL値数プロファイリング: True
[2017-04-30 15:57:09] INFO: 最頻値プロファイリング: 10 件
[2017-04-30 15:57:09] INFO: カーディナリティプロファイリング: True
[2017-04-30 15:57:09] INFO: データ検証有効化: False
[2017-04-30 15:57:09] INFO: サンプルレコード取得: True
[2017-04-30 15:57:09] INFO: ----------------------------------------------
[2017-04-30 15:57:09] INFO: 1 テーブルのプロファイリングを開始します。
[2017-04-30 15:57:09] INFO: テーブル SCOTT.CUSTOMER のプロファイリングを開始します。
[2017-04-30 15:57:09] INFO: データ型の取得: 開始
[2017-04-30 15:57:09] INFO: データ型の取得: 完了
[2017-04-30 15:57:09] INFO: 行数の取得: 開始
[2017-04-30 15:57:09] INFO: 行数の取得: 完了 (28)
[2017-04-30 15:57:09] INFO: サンプル行の取得: 開始
[2017-04-30 15:57:09] INFO: サンプル行の取得:完了
[2017-04-30 15:57:09] INFO: NULL値数の取得: 開始
[2017-04-30 15:57:09] INFO: NULL値数の取得: 完了
[2017-04-30 15:57:09] INFO: 最小値/最大値の取得: 開始
[2017-04-30 15:57:09] INFO: 最小値/最大値の取得: 完了
[2017-04-30 15:57:09] INFO: 最頻値の取得(1/2): 開始
[2017-04-30 15:57:09] INFO: 最頻値の取得(2/2): 開始
[2017-04-30 15:57:09] INFO: 最頻値の取得: 完了
[2017-04-30 15:57:09] INFO: カーディナリティの取得: 開始
[2017-04-30 15:57:09] INFO: カーディナリティの取得: 完了
[2017-04-30 15:57:09] INFO: レコード検証: 開始
[2017-04-30 15:57:09] INFO: レコード検証: データ検証ルールがありません
[2017-04-30 15:57:09] INFO: テーブル SCOTT.CUSTOMER のプロファイリングが完了しました。
[2017-04-30 15:57:09] INFO: 1 テーブル中 0 テーブルのプロファイリングに失敗しました
[2017-04-30 15:57:09] INFO: 1 テーブルのプロファイリングを完了しました
[snaga@localhost tmp]$

メタデータ取得とプロファイリングが完了すると、取得したデータはレポジトリ(デフォルトでは repo.db というファイル名)に保存されます。

[snaga@localhost tmp]$ ls -l repo.db
-rw-r--r-- 1 snaga snaga 35840  4月 30 15:57 2017 repo.db
[snaga@localhost tmp]$

HTMLファイルへのエクスポート

取得したメタデータとデータプロファイルをHTMLファイルに出力するには、 dm-export-repo コマンドを使います。

レポジトリファイルと出力用ディレクトリを指定して dm-export-repo コマンドを実行すると、指定したディレクトリにファイルを出力します。デフォルトではHTMLファイルフォーマットで出力します。

[snaga@localhost tmp]$ dm-export-repo repo.db html
[2017-04-30 15:58:14] INFO: 出力用ディレクトリ html を作成しました。
[2017-04-30 15:58:14] INFO: レポジトリファイル repo.db をオープンしました。
[2017-04-30 15:58:14] INFO: html/orcl.SCOTT.CUSTOMER.html を出力しました。
[2017-04-30 15:58:14] INFO: html/orcl.SCOTT.html を出力しました。
[2017-04-30 15:58:14] INFO: html/validation-valid.html を出力しました。
[2017-04-30 15:58:14] INFO: html/validation-invalid.html を出力しました。
[2017-04-30 15:58:14] INFO: html/index.html を出力しました。
[2017-04-30 15:58:14] INFO: html/index-tags.html を出力しました。
[2017-04-30 15:58:14] INFO: html/index-schemas.html を出力しました。
[2017-04-30 15:58:14] INFO: html/glossary.html を出力しました。
[2017-04-30 15:58:15] INFO: static ディレクトリを html にコピーしました。
[snaga@localhost tmp]$ ls -l html
total 140
-rw-rw-r-- 1 snaga snaga  5111  4月 30 15:58 2017 glossary.html
-rw-rw-r-- 1 snaga snaga  6043  4月 30 15:58 2017 index-schemas.html
-rw-rw-r-- 1 snaga snaga  5620  4月 30 15:58 2017 index-tags.html
-rw-rw-r-- 1 snaga snaga  6043  4月 30 15:58 2017 index.html
-rw-rw-r-- 1 snaga snaga 79935  4月 30 15:58 2017 orcl.SCOTT.CUSTOMER.html
-rw-rw-r-- 1 snaga snaga  6046  4月 30 15:58 2017 orcl.SCOTT.html
drwxr-xr-x 4 snaga snaga  4096  4月 29 16:41 2017 static
-rw-rw-r-- 1 snaga snaga  4466  4月 30 15:58 2017 validation-invalid.html
-rw-rw-r-- 1 snaga snaga  4704  4月 30 15:58 2017 validation-valid.html
[snaga@localhost tmp]$

このHTMLファイルをブラウザで表示することによって、データディクショナリから収集したメタデータとデータプロファイリングの結果を確認することができます。

基本的な使い方

メタデータ収集とデータプロファイリング

プロファイリングで収集する項目

データベースのテーブルを指定して、メタデータ収集とデータプロファイリング(テーブル統計情報とカラム統計情報の取得)を行うことができます。

収集する項目は以下の通りです。

  • メタデータ(データベースディクショナリから取得)
    • スキーマ名
    • テーブル名
    • カラム名
    • カラムデータ型
  • テーブル統計情報
    • レコード数
    • カラム数
  • カラム統計情報
    • 最小値/最大値
    • 非NULL割合
    • カーディナリティ(ユニーク性)
    • データ分布(出現頻度別ランク)

メタデータ収集とプロファイリングの実施

メタデータ収集とデータプロファイリングは、 dm-run-profiler コマンドを用い て行います。

dm-run-profiler コマンドのオプションで、接続するデータベースの種類 (Oracle、PostgreSQLなど)を指定し、必要なパラメータ(ホスト名やポート 番号、データベース名やユーザ名、パスワードなど)を与え、テーブル名を指 定して実行すると、 db-run-profiler コマンドが自動的にメタデータ収集 とデータプロファイリングを行います。

以下は、 SCOTT.CUSTOMER というテーブルをプロファイリングする実行例です。

dm-run-profiler --dbtype oracle --tnsname ORCL --user scott --pass tiger SCOTT.CUSTOMER

Oracleデータベースに対してプロファイリングを行う場合には、接続先をホスト名かTNS名で指定します。この例ではTNS名で接続しています。

引数に列挙することで複数のテーブルを指定することもできます。

dm-run-profiler --dbtype oracle --tnsname ORCL --user scott --pass tiger SCOTT.CUSTOMER SCOTT.ORDERS

スキーマ名だけを指定した場合には、指定したスキーマ内のすべてのテーブルを検出し、プロファイリングします。

以下は、Oracleの ORCL データベースの SCOTT スキーマ内のすべてのテーブルを対象にプロファイリングする実行例です。

dm-run-profiler --dbtype oracle --tnsname ORCL --user scott --pass tiger SCOTT

スキーマ名やテーブル名が何も指定されなかった場合、データベース内に存在するスキーマの一覧が表示されます。1つかそれ以上のスキーマを指定する必要があります。

dm-run-profiler コマンドの詳細については「コマンドリファレンス」を参照してください。

クエリ処理時間の制限とデータプロファイル項目

dm-run-profiler コマンドでは、クエリのタイムアウトを設定することができます。 --timeout オプションでクエリタイムアウトを設定すると、プロファイリングを行うクエリの実行時間の上限を設定することができます。

上限時間を超えたクエリは中断され、テーブルの実データに対するクエリではなく、各DBMSの持つデータベース統計情報から収集するように切り替えます(但し、データベース統計情報が取得されていない場合には、データプロファイルを取得できません)。

なお、データベース統計情報が使われる場合、すべてのデータプロファイルを取得できるわけではありません。また、データベース統計情報から収集したデータプロファイルは、実際の値と異なることがあります。

そのため、 --enable-validation オプションを指定した場合にはクエリタイムアウトの指定は無効化されます。これは、データ検証において必ずしも正確ではないデータベース統計情報を使う事態を避けるためです。

取得できるデータプロファイルは以下の通りです。

  • テーブルスキャン+カラムスキャン(テーブル、カラムともにタイムアウトが発生しなかった場合、または --enable-validation を指定した場合)
    • テーブル - レコード数
    • カラム - NULL数
    • カラム - カーディナリティ
    • カラム - 最小値・最大値
    • カラム - 最頻値ランキング
  • テーブルスキャン+カラム統計情報(テーブルはタイムアウトが発生せず、カラムのプロファイリング中にタイムアウトが発生した場合)
    • テーブル - レコード数
    • カラム - NULL数
    • カラム - カーディナリティ
  • テーブル統計情報+カラム統計情報(テーブルのレコード数を取得している間にタイムアウトが発生した場合)
    • テーブル - レコード数

補足メタデータのCSVファイルからのインポート

インポートできる補足メタデータの項目

データベースディクショナリから取得できないメタデータは、CSVファイルから取り込むことで、ディクショナリから取得したメタデータと一緒に閲覧することができるようになります。

CSVファイルからインポートできる項目は以下の通りです。

  • テーブル関連
    • 日本語名
    • コメント
    • タグ
    • 管理者
  • カラム関連
    • 日本語名
    • コメント
    • 外部キー参照情報
  • データマッピング関連
    • データソースのデータベース名
    • データソースのスキーマ名
    • データソースのテーブル名
    • データソースのカラム名
    • 変換種別
    • 変換ルール
    • 更新者

これらの情報をCSVファイルとして作成し、それをインポートすることでディクショナリから取得したメタデータを補足します。

各CSVファイルのフォーマットについては、「CSVファイルフォーマット」を参照してください。

補足メタデータのインポート方法

テーブルメタデータCSVおよびカラムメタデータCSVを取り込むには dm-import-csv コマンドを、データマッピングCSVを取り込むには dm-import-datamapping コマンドを使います。

dm-import-csv コマンドは、CSVファイルのヘッダ(1行目)のフィールド名からCSVファイルの内容(テーブル関連かカラム関連か)を判断して、適切に変換してレポジトリにインポートします。

以下は、テーブル関連の補足メタデータをShift-JISのCSVファイルから取り込んでいる例です。

dm-import-csv repo.db pgsql_tables.csv

また、CSVファイルの文字コードはShift-JISをデフォルトとしていますが、任意の文字コードを指定することもできます。

以下は、カラム関連の補足メタデータをUTF-8のCSVファイルから取り込む例です。

dm-import-csv --encoding utf-8 repo.db pgsql_columns.csv

データマッピングのCSVファイルは dm-import-datamapping コマンドでインポートします。

dm-import-datamapping repo.db pgsql_datamapping.csv

dm-import-csv および dm-import-datamapping の各コマンドの詳細は「コマンドリファレンス」を参照してください。

データ検証の設定と実施

データ検証の設定

データ検証を行うためには、まずデータ検証のためのルールファイルを作成します。

ルールファイルはCSV形式のファイルで、検証したいテーブル名やカラム名、検証ルールやパラメータなどを記載します。

ルールの記述方法の詳細については「データ検証ルール設定リファレンス」を参照してください。

このCSVファイルを dm-import-csv コマンドを使ってレポジトリにインポートします。

dm-import-csv repo.db validation_oracle.txt

dm-import-csv コマンドの詳細は「コマンドリファレンス」を参照してください。

データ検証の実施

dm-run-profiler コマンド実行時に --enable-validation オプションを指定して、プロファイリングと同時にデータの検証を行います。

以下の例は、 SCOTT.CUSTOMER テーブルをプロファイリングするのと同時にデータ検証も行う例です。

dm-run-profiler --dbtype oracle --tnsname ORCL --user scott --pass tiger --enable-validation SCOTT.CUSTOMER

dm-run-profiler コマンドで実行したデータ検証の結果は、取得したメタデータやデータプロファイルと一緒にレポジトリに保存されます。

データ検証結果のチェック

データ検証結果のチェックを行うには、 dm-verify-results コマンドを使います。

レポジトリを指定して dm-verify-results コマンドを実行すると、各テーブルについて最新のデータ検証結果にルール違反があったかどうかを確認することができます。

dm-verify-results repo.db

ルール違反が検知されると、メッセージを出力するとともに終了コードが「0以外」を返却します。

データ検証をバッチ処理で行う場合には、この dm-verify-results コマンドを使うことで異常を検知することができます。

ビジネス用語集の作成

ビジネス用語の定義

テーブルやカラムの日本語名や、各種のコメントの中に出てくる用語について、その意味や同義語、関連用語、関連IT資産(テーブル)などを定義し、その定義をデータカタログから参照することができます。

また、任意の用語を検索することもできます。

ビジネス用語の登録

定義したい用語とその定義を記述したCSVファイルを作成します。

CSVファイルの詳細は「CSVファイルフォーマット」を参照してください。

作成したCSVファイルを dm-import-csv コマンドを使ってレポジトリにインポートします。

dm-import-csv repo.db business_glossary.csv

dm-import-csv コマンドの詳細は「コマンドリファレンス」を参照してください。

データセットの定義とデータカタログの作成

データセットの定義

データセットは、スキーマ単位でまとめられたテーブルのグループ、または同じタグが付けられたテーブルのグループとして定義されます。(テーブルへのタグ付けはテーブルの補足メタデータで設定することができます。詳細は「」補足メタデータのCSVファイルからのインポート」」を参照してください)

データセットコメントの登録

テーブルのグループであるデータセットに対してコメントを登録することができます(このコメントは利用者への説明としてデータカタログに掲載されます)。

コメントを登録したいデータセットがスキーマの場合、スキーマコメントを記載したCSVファイルを作成します。

コメントを登録したいデータセットがタグの場合、タグコメントを記載したCSVファイルを作成します。

各CSVファイルの詳細は「スキーマコメントCSV」および「タグコメントCSV」を参照してください。

作成したCSVファイルを dm-import-csv コマンドを使ってレポジトリにインポートします。

dm-import-csv repo.db schema_comments.csv
dm-import-csv repo.db tag_comments.csv

dm-import-csvコマンドの詳細は「コマンドリファレンス」を参照してください。

データセット関連資料の添付

データセットのコメントはMarkdown形式で記述できるため比較的柔軟な表現が可能ですが、Markdownだけでは表現しきれない場合や、分量が多くなる場合があります。

そのような場合には、関連ファイル(具体的にはPowerPointやExcelのファイルなど)をデータセットのコメントに添付することができます。

ファイルを添付するには dm-attach-file コマンドを使います。

レポジトリを指定し、添付したいデータセットの種別と名前を指定して、ファイルの追加を実行します。

以下は、「 タグ1 」というタグのデータセットに「 Tag1.ppt 」というファイルを添付する例です。

dm-attach-file repo.db tag:タグ1 add Tag1.ppt

以下は、「 testdb.public 」というスキーマのデータセットに「 schema_design.xlsx 」というファイルを添付する例です。

dm-attach-file repo.db schema:testdb.public add schema_design.xlsx

dm-attach-file コマンドの詳細は「コマンドリファレンス」を参照してください。

データカタログの出力

レポジトリ内に取得・収集・登録した情報を閲覧するためには、データカタログとしてHTMLファイルを出力する必要があります。

dm-export-repo コマンドでレポジトリと出力先ディレクトリを指定して実行すると、データカタログをHTMLとして出力します。

dm-export-repo repo.db ./html

dm-export-repo コマンドでは生成するHTMLのテンプレートをデフォルトとは違うものを指定することもできます。テンプレートを変更することでデータカタログをカスタマイズすることができます。

dm-export-repo --template /path/to/mytemplates repo.db html

dm-export-repo コマンドの詳細は「コマンドリファレンス」を参照してください。

コマンドリファレンス

dm-attach-fileコマンド

dm-attach-file コマンドは、データセット(タグ/スキーマ)およびテーブルのコメントに添付するファイルを登録、一覧表示、削除します。

Usage: dm-attach-file [repo file] [target] [command]

Targets:
    tag:[tag label]
    schema:[schema name]
    table:[table name]

Commands:
    list
    add [file]
    rm [file]

Options:
    --help                     Print this help.

repo file はレポジトリファイル名です。

target は、tag, schema, table のいずれかのoターゲットを名前と共に指定します。

command は、list, add, rm のいずれかの操作をファイル名とともに指定します。

dm-dump-xlsコマンド

dm-dump-xls コマンドは、指定したExcelファイルのシートをCSV形式で出力します。

Excelのファイル名、およびシート名、またはシート番号(1,2,3…)を指定すると、シートの内容をCSV形式で標準出力に出力します。

Usage: dm-dump-xls <filename.xls> [<sheet name> | <sheet index>]

Options:
    -e STRING                  Output encoding (default: utf-8)

    --help                     Print this help.

-e オプションは出力するCSVデータのエンコーディングを指定します。

dm-export-repoコマンド

dm-export-repo コマンドは、レポジトリに保存されたメタデータ、統計情報、その他の補足的なデータを、をデータカタログとして指定したファイル形式(HTMLなど)でエクスポートします。

以下の形式でレポジトリのデータをエクスポートすることができます。

  • HTMLファイル
  • CSVファイル
  • JSONファイル
Usage: dm-export-repo [options...] [repo file] [output directory]

Options:
    --format <STRING>               Output format. (html, json or csv)
    --help                          Print this help.

Options for HTML format:
    --tags <TAG>[,<TAG>]            Tag names to be shown on the top page.
    --schemas <SCHEMA>[,<SCHEMA>]   Schema names to be shown on the top page.
    --template <STRING>             Directory name for template files.

Options for CSV format:
    --encoding <STRING>             Character encoding for output files.

repo file はレポジトリファイル名です。

output directory は出力先のディレクトリ名です。

--format は出力するフォーマットを指定します。デフォルトは html です。

--tags はデータカタログとして出力する際、トップページに優先的に表示するタグ名を指定します(指定していないものはタグ名順にソートして表示)。

--schemas はデータカタログとして出力する際、トップページに優先的に表示するスキーマ名を指定します(指定していないものはスキーマ名順にソートして表示)。

--templates はデータカタログとしてHTMLを生成する際に使用するテンプレートファイルのあるディレクトリです。

--encoding は出力するCSVファイルのエンコーディングを指定します。デフォルトは utf-8 です。

dm-import-csvコマンド

dm-import-csv コマンドは、テーブルやカラムに関する付加的な情報をCSVファイルからレポジトリにインポートします。

以下のCSVファイルをインポートすることができます。

  • テーブルメタデータCSV
  • カラムメタデータCSV
  • スキーマコメントCSV
  • タグコメントCSV
  • ビジネス用語辞書CSV
  • データ検証ルールCSV
Usage: dm-import-csv [repo file] [csv file]

Options:
    -E, --encoding=STRING      Encoding of the CSV file (default: sjis)
    --help                     Print this help.

repo file はレポジトリファイル名です。

-E, --encoding は入力となるCSVファイルのエンコーディングです。デフォルトは sjis です。

各CSVファイルのフォーマットについては「CSVファイルフォーマット」を参照してください。

dm-import-datamappingコマンド

dm-import-datamapping コマンドは、データマッピングの情報をCSVファイルからレポジトリにインポートします。

Usage: dm-import-datamapping [repo file] [csv file]

Options:
    -E, --encoding=STRING      Encoding of the CSV file (default: sjis)
    --help                     Print this help.

repo file はレポジトリファイル名です。

-E, --encoding は入力となるCSVファイルのエンコーディングです。デフォルトは sjis です。

CSVファイルのフォーマットについては「CSVファイルフォーマット」を参照してください。

dm-repo-cmdコマンド

dm-repo-cmd コマンドは、レポジトリに保存されているデータの操作を行います。

Usage: dm-repo-cmd [options...] [repo file | connetion string] [cmd] [args...]

Commands:
    init
    ls
    rm <db.schema.table>

Options:
    --help      Print this help.

init を指定すると、レポジトリを初期化します。

ls を指定すると、レポジトリに含まれるテーブル名の一覧を「データベース名.スキーマ名.テーブル名」の形式で取得します。

rm をテーブル名(データベース名.スキーマ名.テーブル名)とともに指定すると、レポジトリに含まれる当該テーブルのデータを削除します。

dm-run-profilerコマンド

dm-run-profiler コマンドは、データベースに接続してメタデータおよびデータプロファイルの取得を行い、その結果をレポジトリに保存します。また、あらかじめ定義したルールに従ってデータ検証を行います。

Usage: dm-run-profiler [option...] [schema[.table]] ...

Options:
    --dbtype=TYPE              Database type
    --host=STRING              Host name
    --port=INTEGER             Port number
    --dbname=STRING            Database name
    --tnsname=STRING           TNS name (Oracle only)
    --user=STRING              User name
    --pass=STRING              User password
    --credential=STRING        Credential file name (BigQuery only)
    -P=INTEGER                 Parallel degree of table scan
    -o=FILENAME                Output file
    --batch=FILENAME           Batch execution

    --enable-validation        Enable record/column/SQL validations

    --enable-sample-rows       Enable collecting sample rows. (default)
    --disable-sample-rows      Disable collecting sample rows.

    --skip-table-profiling     Skip table (and column) profiling
    --skip-column-profiling    Skip column profiling
    --column-profiling-threshold=INTEGER
                               Threshold number of rows to skip profiling
                               columns

    --timeout=NUMBER           Query timeout in seconds (default:no timeout)

    --help                     Print this help.

--dbtype はデータベース種別の指定です。 oracle, mssql, pgsql, mysql のいずれかを指定できます。Amazon Redshiftは pgsql を指定した上で、ポート番号も併せて指定する必要があります。

--host はデータベースに接続するホスト名です。

--port はデータベースに接続するポート番号です。

--dbname は接続するデータベースです。

--tnsname はTNS接続を使ってデータベースに接続する際のTNS名です(Oracleのみ)。

--user はデータベースに接続するユーザ名です。

--pass はデータベースに接続するパスワードです。

--credential はBigQueryに接続するためのcredentialファイル(JSON形式)です。

-P は内部でテーブルスキャンを実行する際の並列度です。

-o は出力するレポジトリのファイル名です。

--batch は一括して処理する複数のスキーマ名およびテーブル名を記述したファイルです。

--enable-validation はデータ検証の機能を有効にします。

--enable-sample-rows はサンプルレコード(10行)の取得を有効にします。(デフォルト)

--disable-sample-rows はサンプルレコードの取得を無効にします。

--skip-table-profiling はテーブルおよびカラムのプロファイリングを無効にします。

--skip-column-profiling はカラムのプロファイリングを無効にします。

--column-profiling-threshold はカラムのプロファイリングを行うレコード数の上限を指定します。

--timeout はクエリのタイムアウトを秒数で指定します。クエリの実行時間がこれを超えると中断され、テーブルのプロファイリングは失敗として扱われます。

dm-run-serverコマンド

dm-run-server コマンドは、指定したレポジトリのデータにネットワーク経由でアクセスするためのWebサーバを起動します。

dm-run-server コマンドを使うことによって、以下を実現することができます。

  • レポジトリのデータを都度HTMLにエクスポートしなくても閲覧可能
  • レポジトリのデータの変更をリアルタイムに閲覧可能
  • コメントやタグなど、一部のデータをWebブラウザから変更可能
Usage: dm-run-server [repo file] [port]

Options:
    --help                     Print this help.

repo file はレポジトリファイル名です。

port はWebサーバに接続するためのポート番号です。(デフォルト8080)

dm-verify-resultsコマンド

dm-verify-results コマンドは、レポジトリ内に保存されたデータ検証結果を参照して、違反しているレコードがないかどうかを確認します。

違反しているレコードがある場合は終了コード 1 を、ない場合には終了コード 0 を返します。

Usage: dm-verify-results [repo file]

Options:
    --help                     Print this help.

repo file はレポジトリファイル名です。

CSVファイルフォーマット

テーブルメタデータCSV

テーブルメタデータをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
DATABASE_NAME データベース名 必須
SCHEMA_NAME スキーマ名 必須
TABLE_NAME テーブル名 必須
TABLE_NAME_NLS テーブル名(日本語表記)  
TABLE_COMMENT テーブルコメント  
TAGS タグ(カンマ区切り)  
TABLE_OWNER 管理者  

テーブルコメントはMarkdown形式で記述することができます。

DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,TABLE_NAME_NLS,TABLE_COMMENT,TAGS,TABLE_OWNER
ORCL,SCOTT,CUSTOMER,顧客テーブル,,,
ORCL,SCOTT,LINEITEM,注文明細テーブル,,"TAG1,TAG2",
ORCL,SCOTT,NATION,国名マスタ,,,
ORCL,SCOTT,ORDERS,注文テーブル,,TAG1,
ORCL,SCOTT,PART,商品マスタ,,,
ORCL,SCOTT,PARTSUPP,商品・サプライヤ対応表,,TAG2,
ORCL,SCOTT,REGION,地域マスタ,,,
ORCL,SCOTT,SUPPLIER,サプライヤマスタ,,TAG2,

カラムメタデータCSV

カラムメタデータをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
DATABASE_NAME データベース名 必須
SCHEMA_NAME スキーマ名 必須
TABLE_NAME テーブル名 必須
COLUMN_NAME カラム名 必須
COLUMN_NAME_NLS カラム名(日本語表記)  
COLUMN_COMMENT カラムコメント  
FK 外部キー参照  

カラムコメントはMarkdown形式で記述することができます。

DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME,COLUMN_NAME_NLS,COLUMN_COMMENT,FK
ORCL,SCOTT,CUSTOMER,C_CUSTKEY,顧客ID,,
ORCL,SCOTT,CUSTOMER,C_NAME,顧客名,,
ORCL,SCOTT,CUSTOMER,C_ADDRESS,顧客住所,,
ORCL,SCOTT,CUSTOMER,C_NATIONKEY,国名コード,,NATION.N_NATIONKEY
ORCL,SCOTT,CUSTOMER,C_PHONE,電話番号,,
ORCL,SCOTT,CUSTOMER,C_ACCTBAL,残高,,
ORCL,SCOTT,CUSTOMER,C_MKTSEGMENT,業界,,
ORCL,SCOTT,CUSTOMER,C_COMMENT,備考,,

スキーマコメントCSV

スキーマコメントをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
DATABASE_NAME データベース名 必須
SCHEMA_NAME スキーマ名 必須
SCHEMA_DESCRIPTION スキーマの短い説明 必須
SCHEMA_COMMENT スキーマコメント 必須

スキーマコメントはMarkdown形式で記述することができます。

DATABASE_NAME,SCHEMA_NAME,SCHEMA_DESCRIPTION,SCHEMA_COMMENT
ORCL,SCOTT,SCOTT用スキーマ,これはSCOTTスキーマです

タグコメントCSV

タグコメントをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
TAG_NAME タグ名 必須
TAG_DESCRIPTION タグの短い説明 必須
TAG_COMMENT タグコメント 必須

タグコメントはMarkdown形式で記述することができます。

TAG_NAME,TAG_DESCRIPTION,TAG_COMMENT
タグ1,短いタグ説明,これはタグ1のコメントです

データマッピングCSV

データマッピングのコンセプトや詳細について知りたい場合には、以下を参照してください:

データマッピングをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
CHANGE_DATE 変更年月日 必須
DATABASE_NAME 対象データベース名 必須
SCHEMA_NAME 対象スキーマ名 必須
TABLE_NAME 対象テーブル名 必須
COLUMN_NAME 対象カラム名  
DATA_TYPE データ型  
PK 主キーかどうか  
NULLABLE NULLを許容するかどうか  
SOURCE_DATABASE_NAME データソースのデータベース名  
SOURCE_SCHEMA_NAME データソースのスキーマ名  
SOURCE_TABLE_NAME データソースのテーブル名  
SOURCE_COLUMN_NAME データソースのカラム名  
TRANSFORMATION_CATEGORY 変換種別  
TRANSFORMATION_ROLE 変換ルール  
UPDATED_BY 更新者  

TRANSFORMATION_ROLE カラムに含まれる改行および空白スペースは、HTML表示する際には <br/> および &nbsp; に変換して表示されます。

CHANGE_DATE,DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME,DATA_TYPE,PK,NULLABLE,SOURCE_DATABASE_NAME,RECORD_ID,SOURCE_SCHEMA_NAME,SOURCE_TABLE_NAME,SOURCE_COLUMN_NAME,TRANSFORMATION_CATEGORY,TRANSFORMATION_ROLE,UPDATED_BY
2016-12-03,ORCL,SCOTT,ORDERS,O_ORDERDATE,DATE,,,ORCL,AAA01(応募),DWH_AAA,APPLICATION,APP_DT,,TO_CHAR('YYYYMMDD'),snaga
2016-12-03,ORCL,SCOTT,ORDERS,O_ORDERDATE,DATE,,,ORCL,BBB01(予約),DWH_BBB,RESERVE,REGIST_DATE,無変換,,snaga
2016-12-03,ORCL,SCOTT,ORDERS,O_ORDERDATE,DATE,,,ORCL,BBB02(キャンセル),DWH_BBB,RESERVE,CANCEL_DATE,無変換,,snaga

ビジネス用語辞書CSV

ビジネス用語辞書をインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
TERM 単語 必須
DESCRIPTION_SHORT 概要 必須
DESCRIPTION_LONG 詳細 必須
OWNER 管理者 必須
CATEGORIES カテゴリ  
SYNONYMS 同義語  
RELATED_TERMS 関連用語  
RELATED_ASSETS 関連テーブル  
TERM,DESCRIPTION_SHORT,DESCRIPTION_LONG,OWNER,CATEGORIES,SYNONYMS,RELATED_TERMS,RELATED_ASSETS
顧客,「顧客」の定義。(概要版),"# 顧客の定義(詳細版)

* カスタマー
* サプライヤー
* アカウント

Markdownで書けます。",snaga,カテゴリ1,"カスタマー","アカウント,サプライヤー","SCOTT.CUSTOMER,SCOTT.COMPANY, SUPPLIER"

データ検証ルールCSV

データ検証ルールをインポートするためのCSVファイルは、以下のヘッダ行を含む必要があります。

フィールド名 内容 必須?
DATABASE_NAME データベース名 必須
SCHEMA_NAME スキーマ名 必須
TABLE_NAME テーブル名 必須
COLUMN_NAME カラム名 必須
DESCRIPTION ルールの説明(日本語表記) 必須
RULE ルール名 必須
PARAM 第1パラメータ  
PARAM2 第2パラメータ  

データ検証ルールCSVの詳細については「データ検証ルール設定リファレンス」を参照してください。

データ検証ルール設定リファレンス

カラム統計情報によるカラム検証

データプロファイリングで収集したカラムの統計情報(最大値、最小値、NULL値数などを)を用いて検証を行います。

rows, nulls, min, max , cardinality の各変数を使ってルールを記述することができます。

DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME,DESCRIPTION,RULE,PARAM,PARAM2
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Not null,columnstat,{nulls} == 0
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Unique,columnstat,{rows} == {cardinality}
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Larger than zero,columnstat,{min} > 0
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Min is zero,columnstat,{min} == 0
orcl,SCOTT,CUSTOMER,C_CUSTKEY,"Max is larger than 100,000",columnstat,{max} > 100000
orcl,SCOTT,CUSTOMER,C_CUSTKEY,"Max is larger than 1,000,000",columnstat,{max} > 1000000
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Cardinality is 28,columnstat,{cardinality} == 28
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Cardinality is larger than 28,columnstat,{cardinality} > 28

テーブルスキャンによるレコード検証

カラムの統計情報だけでは検証できない値の範囲やデータのパターンなどについて、テーブルの全レコードをスキャンして検証します。

各カラムの名前を変数としてルールを記述することができます。また、複数のカラムの組み合わせでルールを記述することもできます。

DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME,DESCRIPTION,RULE,PARAM,PARAM2
orcl,SCOTT,CUSTOMER,C_CUSTKEY,Number,regexp,^\d+$
orcl,SCOTT,CUSTOMER,C_CUSTKEY,"Between 0 and 1,000,000",eval,{C_CUSTKEY} > 0 and {C_CUSTKEY} < 1000000
orcl,SCOTT,CUSTOMER,C_ACCTBAL,Larger than zero,eval,{C_ACCTBAL} > 0
orcl,SCOTT,CUSTOMER,"C_CUSTKEY,C_NATIONKEY",Custkey is larger than Nationkey,eval,{C_CUSTKEY} > {C_NATIONKEY}
orcl,SCOTT,CUSTOMER,"C_CUSTKEY,C_NATIONKEY",eval,Custkey is smaller than Nation key,{C_CUSTKEY} < {C_NATIONKEY}

SQLクエリによる検証

指定したSQLを実行して、その結果を用いて検証を行うことができます。

SQLの出力する列を変数としてルールを記述することができます。

DATABASE_NAME,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME,DESCRIPTION,RULE,PARAM,PARAM2
orcl,SCOTT,CUSTOMER,C_CUSTKEY,1 or more records,sql,select count(*) count from customer,{COUNT} > 0
orcl,SCOTT,CUSTOMER,C_CUSTKEY,zero record,sql,select count(*) count from customer,{COUNT} == 0