[## Apache Avroとは
システム間でデータをやりとりすることを目的としてデータをシリアライズするフォーマットです。
以下のような特徴があります。
- ネストした構造を定義できるなど、スキーマの柔軟性が高いです
- バイナリでエンコーディングされます1
- 行志向です
- 圧縮をサポートしています
Apache Icebergのメタデータの一部がAvroファイルで出力されるため、その内容をサクッと確認する方法を調べてみました。
Apache Avroの仕様
Apache AvroのWebサイトで確認できます。
方法1:Avroを表示するWebサービスを利用する
いくつか存在するようです。
ググって出てくるものだと、TablepadのAvro Viewerが使いやすかったです。
方法2:Visual Studio CodeのAvro Viewer拡張機能を利用する
Visual Studio Marketplaceで公開されています。
こちらについては残念ながら私の見たいAvroファイルを開くことができませんでした。
ソースコードなどが公開されているので、必要に応じて修正してみてもいいかもしれません。
方法3:Pythonで読み込む
こちらの方法が意外と簡単でした。
Avroファイルを書き込むときはスキーマが必須ですが、読み込むときはなくても読み込めるようです。
また、Avroファイルのメタ情報avro.schema
にスキーマが保存されているので、それを読めばスキーマを取得することも可能です。
read_avro.py
import avro.io
import avro.datafile
import pprint
import json
filename = "1718983580864000000-gwKYQzQ4AzUgJGvoqZOlmg.avro"
# ファイルをバイナリモードで読み込む
with open(filename, "rb") as f:
# リーダーを作成
reader = avro.datafile.DataFileReader(f, avro.io.DatumReader())
# データを取得。dict型で取得できる
for data in reader:
pprint.pprint(data)
# スキーマを取得
schema_str = reader.meta['avro.schema']
schema_json = json.loads(schema_str)
pprint.pprint(schema_json)
-
デバッグを目的としたJSONでのエンコーディングもサポートされているとのこと ↩