4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データカタログエンジンのAmundsen使ってみた

Posted at

この記事はfreeeデータに関わる人たち アドベントカレンダーの7日目です。

データカタログを探索・発見できるOSS 「Amundsen」を使ってみたので紹介したいと思います。

データカタログとは

データカタログは広い意味がありますが、今回は、いわゆるビジネスデータカタログと呼ばれるものとして使います。簡単に言ってしまえば、ビジネス利用を目的とした企業内で保有するデータの辞書のようなものです。テーブルの定義だったりカラムの定義の説明などがまとまっています。

Amundsenとは

Amundsen is a data discovery and metadata engine for improving the productivity of data analysts, data scientists and engineers when interacting with data.

Amundsenはデータに関わるデータアナリスト、データサイエンティスト、エンジニアの生産性を上げるデータ探索ができるメタデータエンジンです。Amundsenは次の図のようにマイクロサービス化されています。

amundsen_architecture.png

Metadata Sources(データベースなど)からメタデータ(テーブルやスキーマ情報)を取得し、Neo4jとElasticsearchに入れます。その情報をもとにAmudsenの検索エンジンUI(Frontend Service)から情報を確認できます。

ローカルでAmundsen 立ち上げる

dockerが用意されているので簡単にローカルで立ち上げることができます。
amundsenのgithubにインストールのやり方が丁寧に書いてあるのでそちらで確認してみてください

$ git clone --recursive git@github.com:amundsen-io/amundsen.git
$ cd (cloneしたamundsenのディレクトリ)
$ docker-compose -f docker-amundsen.yml up

dataを抽出して、Amundsenに反映

データのスキーマ情報を取ってきてAmundsenに反映させるFramework(amundsenbuilder)が用意されているので、これを使ってデータベースから簡単にデータを取ってこれます。
builderに必要なパッケージをインストールします。

$ cd (amundsenbuilderのディレクトリ)
$ python3 -m venv venv
$ source venv/bin/activate  
$ pip3 install -r requirements.txt
$ python3 setup.py install

exampleのスクリプトが用意されているのでこれを実行します。
sample_data_loaderではサンプルのcsvファイルからデータをamundsenにロードします。

$ python3 example/scripts/sample_data_loader.py

glueからカタログを取ってくるスクリプトもあります(sample_glue_loader.py)。何も変更なしに実行するとglueにあるものを全部取ってきてしまうのでfilterで取ってくるglue data catalogのNameでfilterできるように変更します。
https://github.com/amundsen-io/amundsendatabuilder/blob/master/example/scripts/sample_glue_loader.py#L33

def create_glue_extractor_job(filter_key: []):
   # ~~省略~~
   'extractor.glue.{}'.format(GlueExtractor.FILTER_KEY): filter_key,
   # ~~省略~~

if __name__ == "__main__":
    filter = [{
        'Key': 'Name',
        'Value': 'accounts',
    }] # glueのaccountsでfilter
    glue_job = create_glue_extractor_job(filter)
    glue_job.launch()

    es_job = create_es_publisher_job()
    es_job.launch()

filterの形式はKey, Valueのdict keyを持つobjectのリストを渡します。boto3のsearch_tablesを使っているので'Key'と'Value'は必須です。
実行する際にawsのglueにアクセスできるcredential(aws_access_key_id, aws_secret_access_key, tokenなど)を発行しておく必要があります。

$ python3 example/scripts/sample_glue_loader.py

処理が終わったらlocalhost:5000でamundsenにアクセスし、データカタログが入っていることを確認します。
(下の図は実際に取ってきたデータではなくAmundsenのgithubのものです。)

search-page.png

使ってみて良い点

  • UIがシンプルで見やすい
  • UI上でdescriptionの編集ができる
  • データのextractがdatabuilder使うと便利
    • Athena, Bigquery, Glueなどの様々なデータソースから簡単に連携できる

残念な点・今後への期待

  • tagが日本語対応してない
  • descriptionの検索はできない
  • 誰でもdescriptionの編集ができてしまう
    • Userごとに編集権限を変えるといったことができない
    • テーブル指定で編集できないように設定できる機能はあるがconfigにテーブルを一つずつ定義する必要がある

AmundsenはOSSで、見た感じ割と活発にcommitされているのでどんどん便利な機能が追加されていくと思います。

以上Amundsenについて紹介しました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?