業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【データ基盤】
データハブとは
Ajust
データの保守運用
AI

執筆者:Handbook編集部

DataHubでGraphQLでメタデータを操作する方法

この記事では、オープンソースのモダンなデータカタログのDataHubでDataHubでGraphQLでメタデータを操作します。 本記事ではDataHubはEKSであることを前提として以降説明します。

S3データソースのDatasetsのメタデータ取得

アクセスTokenの生成

以下の画像のようにUI (設定 > Access Tokens > Create new token) からTokenを事前に生成しコピーしておきます。

GMSのエンドポイント確認

以下のコマンドでGMSのエンドポイントを確認します。

kubectl get svc

以下のような出力が得られるので、datahub-datahub-gmsのEXTERNAL-IPを使ってアクセスします。

NAME                                  TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)                         AGE
datahub-acryl-datahub-actions         ClusterIP      xxx.xx.xx.xx     <none>                                                                        9093/TCP,8000/TCP               28m
datahub-datahub-frontend              LoadBalancer   xxx.xx.xx.xx     <lb_name>.<region>.elb.amazonaws.com   9002:30837/TCP,4318:30426/TCP   28m
datahub-datahub-gms                   LoadBalancer   xxx.xx.xx.xx     <lb_name>.<region>.elb.amazonaws.com   8080:30386/TCP,4318:31400/TCP   28m
elasticsearch-master                  ClusterIP      xxx.xx.xx.xx     <none>                                                                        9200/TCP,9300/TCP               34m
elasticsearch-master-headless         ClusterIP      None             <none>                                                                        9200/TCP,9300/TCP               34m
kubernetes                            ClusterIP      xxx.xx.xx.xx     <none>                                                                        443/TCP                         41m
prerequisites-cp-schema-registry      ClusterIP      xxx.xx.xx.xx     <none>                                                                        8081/TCP,5556/TCP               34m
prerequisites-kafka                   ClusterIP      xxx.xx.xx.xx     <none>                                                                        9092/TCP                        34m
prerequisites-kafka-broker-headless   ClusterIP      None             <none>                                                                        9094/TCP,9092/TCP               34m
prerequisites-mysql                   ClusterIP      xxx.xx.xx.xx     <none>                                                                        3306/TCP                        34m
prerequisites-mysql-headless          ClusterIP      None             <none>                                                                        3306/TCP                        34m
prerequisites-zookeeper               ClusterIP      xxx.xx.xx.xx     <none>                                                                        2181/TCP,2888/TCP,3888/TCP      34m
prerequisites-zookeeper-headless      ClusterIP      None             <none>                                                                        2181/TCP,2888/TCP,3888/TCP      34m

GraphQLのエンドポイントはhttp://<lb_name>.<region>.elb.amazonaws.com:8080/api/graphqlです。

メタデータの取得

登録済みのS3 Datasetsの情報を抽出するクエリの実行例を記載します。 ここではPythonのrequestsパッケージを使用してエンドポイントにアクセスするコードの例を示します。

import requests


# allow 10 requests to be made concourrently
datahub_token = "<token>"
url = "http://<lb_name>.<region>.elb.amazonaws.com:8080/api/graphql"
query = """
{
  search(input: { type: DATASET, query: "s3 dataset", start: 0, count: 10 }) {
    start
    count
    total
    searchResults {
      entity {
         urn
         type
         ...on Dataset {
            name
         }
      }
    }
  }
}
"""

header = {
    "Authorization": f"Bearer {datahub_token}",
    "content-type": "application/json"
}

payload = {
    "query": query
}

def restore_urn(payload, header):
    resp = requests.post(url=url, json=payload, headers=header)
    if resp.status_code  != 200:
        print(f"failed restoring query: {resp.json()}")
        raise
    return resp.json()

print(restore_urn(payload, header))

上で作成したPythonのコードを実行するすると以下のような出力が得られます。

{'data': {'search': {'start': 0, 'count': 10, 'total': 3, 'searchResults': [{'entity': {'urn': 'urn:li:dataset:(urn:li:dataPlatform:s3,<s3_bucket>/iris/sample_iris.csv,SANDBOX)', 'type': 'DATASET', 'name': 'sample_iris.csv'}}, {'entity': {'urn': 'urn:li:dataset:(urn:li:dataPlatform:s3,<s3_bucket>/parent-iris/sample_parent_iris.csv,SANDBOX)', 'type': 'DATASET', 'name': 'sample_parent_iris.csv'}}, {'entity': {'urn': 'urn:li:dataset:(urn:li:dataPlatform:s3,<s3_bucket>/iris/sample_iris.csv,PROD)', 'type': 'DATASET', 'name': '<s3_bucket>/iris/sample_iris.csv'}}]}}, 'extensions': {}}

まとめ

この記事では、DataHubでGraphQLでメタデータを操作するついて紹介しました。

参考

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年07月04日に最終更新
読み込み中...