この記事は ABEJA Platform Advent Calendar の 7 日目の記事です。今回は 地味ですが データレイクのメタデータ機能について紹介していきます。
データレイクとは
ABEJA Platform は、データの蓄積・アノテーション・学習・デプロイ・再学習と機械学習に必要な機能を提供しています。
ABEJA Platform のデータレイクはデータの蓄積部分にあたる機能で、構造化データ、非構造化データに関わらず保存することが可能です。
データレイクの概念
まずメタデータ機能の紹介の前にデータレイクで使用される用語を以下に説明します。
- チャンネル : データレイクに格納されるファイルのコンテナ
- ファイル : データレイクに格納されたデータ
- メタデータ : ファイルに付与される情報
データレイクのメタデータについて
前置きはここまでで本題である メタデータ機能 について紹介していきます。
データレイクのファイルは API を使用してそのままアップロードすると元のファイル名がなくなり、代わりに file_id
が与えられるようになっています。
そのため基本的には file_id
を使用してチャンネル内のファイルを特定することになりますが、 file_id
は 20181206T000000-aaaabbbb-1234-5678-9012-ccccddddeeee
のような形式で覚えづらく、万が一忘れてしまうとチャンネル内のファイルの一覧を取得して1つ1つ中身を見ていかなければならないような事態になってしまいます。。。
ここで必要になるのがメタデータになります。
データレイクのメタデータ機能は、ファイルに対して x-abeja-meta-
というプレフィクスをつけた任意のキーとそれに対応する任意の文字列を保存 することと、 付与したメタデータを使用してファイルを検索 することを可能にしています。
これを利用して、元のファイル名をメタデータに保存しておき、そのファイル名でチャンネル内からファイルを探すことが可能になります。
( UI や CLI を使用してファイルをアップロードした際には x-abeja-meta-filename
というメタデータのキーにファイル名が自動的に保存されるようになっています )
次に、API を使用した 1. メタデータ付きファイルのアップロード方法と、 2. メタデータでのファイル検索方法を紹介していきます。
メタデータを付与したファイルのアップロード方法
API を使用して猫の画像に x-abeja-meta-filename:cat.jpg
というメタデータを付与したファイルをアップロードする方法は以下になります。
以下のようにリクエストヘッダーに x-abeja-meta-filename: cat.jpg
のような形式で与えることによりメタデータを付与することが出来ます。
$ ls cat.jpg
$ curl -u ${USER_ID}:${PERSONAL_ACCESS_TOKEN} \
-H "Content-Type: image/jpeg" \
-H "x-abeja-meta-filename:cat.jpg" \
--data-binary @cat.jpg \
"https://api.abeja.io/channels/1234567890123/upload"
アップロードに成功すると以下のようなレスポンスが返ってきます。
metadata
の部分に付与したメタデータが含まれています。
※ メタデータの説明の部分では省略しましたが、 x-abeja-sys-meta-organizationid
は ABEJA Platform が付与するメタデータになります。
{
"uploaded_at": "2018-12-06T15:01:50Z",
"metadata": {
"x-abeja-sys-meta-organizationid": "1230000000000",
"x-abeja-meta-filename": "cat.jpg"
},
"lifetime": null,
"file_id": "20181206T000000-aaaabbbb-1234-5678-9012-ccccddddeeee",
"content_type": "image/jpeg"
}
メタデータを使用したファイル検索方法
ここで説明する検索機能は 2018/10/24以降に作成されたチャンネルにのみ有効となっています
最後に API を使用してメタデータでファイルを検索する方法を解説していきます。
まず、先程アップロードしたメタデータに x-abeja-meta-filename:cat.jpg
が付与されたファイルの検索は以下になります。
クエリパラメータに q=
でメタデータに対するクエリを指定する形式となっています。
$ curl -u ${USER_ID}:${PERSONAL_ACCESS_TOKEN} \
"https://api.abeja.io/channels/1234567890123?q=x-abeja-meta-filename:cat.jpg"
クエリの仕様
次にメタデータのクエリの仕様を解説していきます。
複数条件検索
AND
と OR
がサポートされており、複数の条件を指定してチャンネル内のファイルを絞り込むことが出来ます。
例) q=x-abeja-meta-label:cat OR x-abeja-meta-lable: dog
部分一致検索
x-abeja-meta-filename
のみ部分一致検索がサポートされています。
例) q=x-abeja-meta-filename:*bcde.json
まとめ
今回はデータレイクのメタデータについて紹介しました。
メタデータを活用することでデータレイクのチャンネル内のファイルをより効率的に見つけられるようになります。
また、データレイクの API の仕様は こちらのドキュメント に記載されているので、詳しくはドキュメントを参照して下さい。
ABEJA Platform のデータレイクには他にも構造化データに対してスキーマを定義してバリデーションを実行する機能もあるので、機会があれば書きたいと思います。