3
1

[## 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)
  1. デバッグを目的としたJSONでのエンコーディングもサポートされているとのこと

3
1
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
3
1