Avrotize について
Avrotize は、多数のデータ構造定義形式およびデータベーススキーマを相互に変換し、複数のプログラミング言語向けのコードを生成するスキーマ変換ツールです。Avro 由来の Avrotize Schema を中間モデルとして使用し、avrotize mcp でローカル MCP サーバーとして動作させることもできます。
主な機能
- 01多数のスキーマ形式間の変換
- 02SQL および NoSQL データベーススキーマの生成
- 03複数言語向けデータクラスの生成
- 04JSON および XML データからのスキーマ推論
- 05変換ツールを提供するローカル MCP サーバー
活用シーン
- 01JSON Schema を Avrotize Schema 経由で Protobuf に変換
- 02単一のスキーマから C#、Java、Python のデータクラスを生成
- 03SQL、KQL、MongoDB のスキーマ定義を作成
MCP 対応
avrotize mcp によりローカル MCP サーバーとして動作し、list_conversions や run_conversion などのツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Avrotize & Structurize
mcp-name: io.github.clemensv/avrotize
Avrotize は、データ構造定義の「ロゼッタストーン」です。さまざまなデータ形式やデータベースのスキーマ形式間で変換したり、異なるプログラミング言語向けのコードを生成したりできます。
たとえば、任意の複雑さの JSON Schema で元々定義されたデータ構造を、十分なドキュメントを備えた予測可能な方法で変換し、コードを生成するツールです。
このツールは、スキーマモデルとして Apache Avro をベースにした Avrotize Schema を使用します。
- プログラミング言語:Python、C#、Java、TypeScript、JavaScript、Rust、Go、C++
- SQL データベース:MySQL、MariaDB、PostgreSQL、SQL Server、Oracle、SQLite、BigQuery、Snowflake、Redshift、DB2
- その他のデータベース:KQL/Kusto、SurrealDB、MongoDB、Cassandra、Redis、Elasticsearch、DynamoDB、CosmosDB
- データスキーマ形式:Avro、JSON Schema、JSON Structure、XML Schema(XSD)、Protocol Buffers 2 と 3、ASN.1、Apache Parquet、JSON Type Definition(JTD)、CDDL、CUE、FlatBuffers、Apache Thrift IDL、Smithy IDL、Cap'n Proto、RAML 1.0 Data Types、OpenAPI 3.x
インストール
PyPI から Avrotize をインストールできます。Python 3.10 以降をインストールしてください。
pip install avrotize
MCP サーバーのサポート(avrotize mcp)を利用するには、MCP extra を指定してインストールしてください。
pip install "avrotize[mcp]"
SQL データベースのサポート(sql2a コマンド)を利用するには、オプションのデータベースドライバーをインストールしてください。
# PostgreSQL
pip install avrotize[postgres]
# MySQL
pip install avrotize[mysql]
# SQL Server
pip install avrotize[sqlserver]
# All SQL databases
pip install avrotize[all-sql]
使い方
Avrotize は、Avrotize Schema を介してスキーマ形式を変換するための複数のコマンドを提供します。
Avrotize Schema への変換:
avrotize s2a- JSON 構造を Avrotize スキーマに変換します。avrotize j2a- JSON スキーマを Avrotize スキーマに変換します。avrotize p2a- Protobuf(2 または 3)スキーマを Avrotize スキーマに変換します。avrotize x2a- XML スキーマを Avrotize スキーマに変換します。avrotize asn2a- ASN.1 を Avrotize スキーマに変換します。avrotize jtd2a- JSON Type Definition(JTD)を Avrotize スキーマに変換します。avrotize cue2a- 対応している CUE スキーマのサブセットを Avrotize スキーマに変換します。avrotize fbs2a- FlatBuffers スキーマを Avrotize スキーマに変換します。avrotize thrift2a- Apache Thrift IDL を Avrotize スキーマに変換します。avrotize smithy2a- Smithy 2.0 IDL のデータシェイプを Avrotize スキーマに変換します。avrotize capnp2a- Cap'n Proto スキーマを Avrotize スキーマに変換します。avrotize raml2a- RAML 1.0 Data Types を Avrotize スキーマに変換します。avrotize kstruct2a- Kafka Connect スキーマを Avrotize スキーマに変換します。avrotize sql2a- SQL データベーススキーマを Avrotize スキーマに変換します。avrotize k2a- Kusto テーブル定義を Avrotize スキーマに変換します。avrotize surreal2a- SurrealQL スキーマ定義を Avrotize スキーマに変換します。avrotize pq2a- Parquet スキーマを Avrotize スキーマに変換します。avrotize csv2a- CSV ファイルを Avrotize スキーマに変換します。
Avrotize スキーマからの変換:
avrotize a2s- Avrotize スキーマを JSON 構造に変換します。avrotize a2j- Avrotize スキーマを JSON スキーマに変換します。avrotize a2p- Avrotize スキーマを Protobuf 3 スキーマに変換します。avrotize a2x- Avrotize スキーマを XML スキーマに変換します。avrotize a2asn- Avrotize スキーマを ASN.1 スキーマに変換します。avrotize a2jtd- Avrotize スキーマを JSON Type Definition(JTD)に変換します。avrotize a2cue- Avrotize スキーマをサポート対象の CUE スキーマサブセットに変換します。avrotize a2fbs- Avrotize スキーマを FlatBuffers スキーマに変換します。avrotize a2thrift- Avrotize スキーマを Apache Thrift IDL に変換します。avrotize a2smithy- Avrotize スキーマを Smithy 2.0 IDL データシェイプに変換します。avrotize a2capnp- Avrotize スキーマを Cap'n Proto スキーマに変換します。avrotize a2raml- Avrotize スキーマを RAML 1.0 データ型に変換します。avrotize a2sql- Avrotize スキーマを SQL テーブル定義に変換します。avrotize a2k- Avrotize スキーマを Kusto テーブル定義に変換します。avrotize a2tsml- Avrotize スキーマを Tabular Model Scripting Language(TMSL)に変換します。avrotize a2surreal- Avrotize スキーマを SurrealQL スキーマ定義に変換します。avrotize a2pq- Avrotize スキーマを Parquet または Iceberg スキーマに変換します。avrotize a2ib- Avrotize スキーマを Iceberg スキーマに変換します。avrotize a2mongo- Avrotize スキーマを MongoDB スキーマに変換します。avrotize a2cassandra- Avrotize スキーマを Cassandra スキーマに変換します。avrotize a2es- Avrotize スキーマを Elasticsearch スキーマに変換します。avrotize a2dynamodb- Avrotize スキーマを DynamoDB スキーマに変換します。avrotize a2cosmos- Avrotize スキーマを CosmosDB スキーマに変換します。avrotize a2couchdb- Avrotize スキーマを CouchDB スキーマに変換します。avrotize a2firebase- Avrotize スキーマを Firebase スキーマに変換します。avrotize a2hbase- Avrotize スキーマを HBase スキーマに変換します。avrotize a2neo4j- Avrotize スキーマを Neo4j スキーマに変換します。avrotize a2dp- Avrotize スキーマを Datapackage スキーマに変換します。avrotize a2csv- Avrotize スキーマを CSV スキーマに変換します。avrotize a2graphql- Avrotize スキーマを GraphQL スキーマに変換します。avrotize a2md- Avrotize スキーマを Markdown ドキュメントに変換します。
JSON 構造との相互変換:
avrotize j2s- JSON Schema を JSON Structure に変換します。avrotize s2j- JSON Structure を JSON Schema に変換します。avrotize s2p- JSON Structure を Protocol Buffers(.proto ファイル)に変換します。avrotize s2x- JSON Structure を XML Schema(XSD)に変換します。avrotize s2asn- JSON Structure Schema を ASN.1 スキーマに変換します。avrotize jtd2s- JSON Type Definition(JTD)を JSON Structure に変換します。avrotize s2jtd- JSON Structure を JSON Type Definition(JTD)に変換します。avrotize cddl2s- CDDL スキーマを JSON Structure に変換します。avrotize s2cddl- JSON Structure を CDDL スキーマに変換します。avrotize oas2s- OpenAPI 3.x ドキュメントを JSON Structure に変換します。avrotize cue2s- サポート対象の CUE スキーマサブセットを JSON Structure に変換します。avrotize s2cue- JSON Structure をサポート対象の CUE スキーマサブセットに変換します。avrotize fbs2s- FlatBuffers スキーマを JSON Structure に変換します。avrotize s2fbs- JSON Structure を FlatBuffers スキーマに変換します。avrotize thrift2s- Apache Thrift IDL を JSON Structure に変換します。avrotize s2thrift- JSON Structure を Apache Thrift IDL に変換します。avrotize smithy2s- Smithy 2.0 IDL のデータ形状を JSON Structure に変換します。avrotize s2smithy- JSON Structure を Smithy 2.0 IDL のデータ形状に変換します。avrotize capnp2s- Cap'n Proto スキーマを JSON Structure に変換します。avrotize s2capnp- JSON Structure を Cap'n Proto スキーマに変換します。avrotize raml2s- RAML 1.0 データ型を JSON Structure に変換します。avrotize s2raml- JSON Structure を RAML 1.0 データ型に変換します。avrotize s2sql- JSON Structure Schema を SQL テーブル定義に変換します。avrotize s2k- JSON Structure Schema を Kusto テーブル定義に変換します。avrotize k2s- Kusto テーブル定義を JSON Structure に変換します。avrotize s2tsml- JSON Structure を Tabular Model Scripting Language(TMSL)に変換します。avrotize s2pq- JSON Structure を Parquet スキーマに変換します。avrotize s2ib- JSON Structure を Iceberg スキーマに変換します。avrotize s2cassandra- JSON Structure Schema を Cassandra スキーマに変換します。avrotize s2graphql- JSON Structure スキーマを GraphQL スキーマに変換します。avrotize s2dp- JSON Structure スキーマを Datapackage スキーマに変換します。avrotize s2csv- JSON Structure スキーマを CSV スキーマに変換します。avrotize s2md- JSON Structure スキーマを Markdown ドキュメントに変換します。
データからスキーマを推論する:
avrotize json2a- JSON ファイルから Avro スキーマを推論します。avrotize json2s- JSON ファイルから JSON Structure スキーマを推論します。avrotize xml2a- XML ファイルから Avro スキーマを推論します。avrotize xml2s- XML ファイルから JSON Structure スキーマを推論します。
Avrotize Schema からコードを生成します:
avrotize a2cs- Avrotize Schema から C# コードを生成します。avrotize a2java- Avrotize Schema から Java コードを生成します。avrotize a2py- Avrotize Schema から Python コードを生成します。avrotize a2ts- Avrotize Schema から TypeScript コードを生成します。avrotize a2js- Avrotize Schema から JavaScript コードを生成します。avrotize a2go- Avrotize Schema から Go コードを生成します。avrotize a2rust- Avrotize Schema から Rust コードを生成します。avrotize a2cpp- Avrotize Schema から C++ コードを生成します。
JSON Structure からコードを生成します:
avrotize s2cs- JSON Structure スキーマから C# コードを生成します。avrotize s2java- JSON Structure スキーマから Java コードを生成します。avrotize s2py- JSON Structure スキーマから Python コードを生成します。avrotize s2ts- JSON Structure スキーマから TypeScript コードを生成します。avrotize s2js- JSON Structure スキーマから JavaScript コードを生成します。avrotize s2go- JSON Structure スキーマから Go コードを生成します。avrotize s2rust- JSON Structure スキーマから Rust コードを生成します。avrotize s2cpp- JSON Structure スキーマから C++ コードを生成します。
その他のコマンド:
avrotize validate- Avro または JSON Structure スキーマに対して JSON インスタンスを検証します。avrotize mcp- Avrotize をローカル MCP サーバーとして実行し、変換ツールを MCP クライアントに公開します。avrotize pcf- Avrotize Schema の Parsing Canonical Form(PCF)を作成します。avrotize validate-tmsl- 文書化されたオブジェクト構造に対して、TMSL スクリプトをローカルで検証します。
概要
MCP サーバー
Avrotize は、stdio 経由でローカル MCP サーバーとして実行できます。
avrotize mcp
カタログへの登録に使用できるメタデータファイルが含まれています。
- 公式 MCP Registry マニフェスト:server.json
- Microsoft/GitHub MCP カタログ掲載用テンプレート:catalogs/microsoft-github-mcp.md
- 汎用のカタログ横断マニフェスト(任意):mcp-server.json
- VS Code + Copilot の使用クイックスタート:copilot-vscode-mcp-quickstart.md
公式 MCP Registry に公開するには、次の手順を実行します。
mcp-publisher validate server.json
mcp-publisher publish server.json
MCP サーバーは、次のツールを提供します。
- サーバーの機能とルーティングのガイダンスを説明する(
describe_capabilities) - 利用可能な変換コマンドを一覧表示する(
list_conversions) - 変換コマンドを確認する(
get_conversion) - 変換を実行する(
run_conversion)
Avrotize を使用すると、Avro/Avrotize Schema と、JSON Schema、XML Schema(XSD)、Protocol Buffers(Protobuf)、ASN.1 などの他のスキーマ形式や、Kusto Data Table Definition(KQL)や SQL Table Definition などのデータベーススキーマ形式との間で変換できます。つまり、Avrotize Schema を経由して、JSON Schema から Protobuf への変換もできます。
Avrotize Schema のドキュメントから、C#、Java、TypeScript、JavaScript、Python のコードを生成することもできます。ネイティブの Avro ツールとの違いは、Avrotize では Avro ライブラリへの依存なしでデータクラスを生成でき、必要に応じて Jackson や System.Text.Json などの JSON シリアライゼーションライブラリ向けのアノテーションも付加できる点です。
このツールは、データ(スキーマのインスタンス)を変換するのではなく、データ構造の定義のみを変換します。
このツールの主な目的は、アプリケーション、データベース、メッセージシステムで使用されるデータ構造を記述したスキーマを変換することです。プロジェクトの内部テストでは幅広いケースを扱っていますが、DevOps パイプラインやシステム設定ファイルで使われるような複雑なドキュメントスキーマをすべて変換することは、このツールの主な目標ではありません。
なぜ?
データ構造の定義は、データ交換、シリアライゼーション、ストレージに欠かせない要素です。データの形状と型を定義し、データを扱うツールやライブラリの基盤となります。ほぼすべてのデータスキーマ言語は、特定のデータ交換形式またはストレージ形式と結び付いており、定義をその形式に縛り付けています。
Avrotize は、JSON Schema や XML Schema のデータ定義を「解放」し、別のコンテキストでも使用できるようにするツールとして設計されています。また、スキーマ定義を可能な限り正確に変換先形式のスキーマモデルへ変換することで、ある形式から別の形式へデータをトランスコードするための基盤を築くことも目的としています。データ自体のトランスコードには別のツールが必要であり、それはこのプロジェクトの対象範囲外です。
「データオブジェクトの定義」ではなく「データ構造の定義」という用語を使っているのは、意図的なものです。このツールは、メッセージングやイベントのペイロード、データのシリアライゼーション、データベーステーブルに使用できるデータ構造を重視しており、それらの構造を一般的なプログラミング言語の型と相互にきれいにマッピングできることを目指しています。
そのため、Avrotize はオブジェクト指向の継承をモデル化する一般的な手法を意図的に無視します。たとえば、JSON Schema から変換する場合、継承ツリーをモデル化しようとせず、allOf 式のすべての内容を単一のレコード型にマージします。
Avrotize Schema
Avrotize Schema は、広く普及している Apache Avro Schema のすべての機能を包含するスキーマモデルです。Avrotize Schema は、このツールの「中核」となるものです。すべてのスキーマは、Avrotize Schema から変換され、また Avrotize Schema へと変換されます。
Avrotize Schema は Avro Schema の上位互換であり、その拡張機能を使用しているため、すべての Avrotize Schema は有効な Avro Schema でもあり、その逆も同様です。
基盤となるスキーマモデルとして Avro Schema を選んだ理由は何でしょうか?
Avro Schema は……
- データ構造を定義するための、シンプルで明快かつ簡潔な方法を提供します。理解しやすく、使いやすいスキーマです。
- 外部参照を持たず、また外部参照を必要としないように設計されています。Avro Schema は、複数の名前空間にまたがる複雑なデータ構造の階層を単一のファイルで表現できますが、JSON Schema、XML Schema、Protobuf ではできません。
- 前方参照が発生しないよう依存関係の順序を強制するため、コード生成ツールなどで「トップダウン」に解決できます。
- Apache Hadoop エコシステムから生まれ、データのシリアライズや保存、システム間のデータ交換に広く使用されています。
- 多くのビジネスおよび技術的なユースケースのニーズを満たす、ネイティブ型と論理型をサポートしています。
- 広く普及している JSON データエンコーディングを適切に記述でき、さまざまなプログラミング言語やシステムに常にスムーズに対応付けられます。対照的に、プログラミング言語の構造に対応付けるのが非常に難しい JSON Schema を、意図せず定義してしまうことは簡単です。
- それ自体が JSON で記述されています。そのため、専用のパーサーが必要な Protobuf や ASN.1 とは異なり、解析や生成が簡単です。
Avro Schema はデータ構造の定義に適しており、このツールやその他のツールで Avro Schema から生成したデータクラスは、広く使われている JSON シリアライズライブラリで利用できます。ただし、Apache Avro プロジェクト独自の JSON エンコーディングには、一般的な JSON の使用方法との相互運用性に深刻な問題があることに注意が必要です。Avrotize では、代替となる JSON エンコーディングを定義しています。
in avrojson.md.
Avro Schema は XML Schema や JSON Schema のあらゆる機能をサポートしているわけではありません。しかし、これは欠点ではなく、機能です。スキーマをさまざまなシステムやインフラストラクチャ間で移植可能にするためです。具体的には、Avro Schema は JSON Schema や XML Schema にある多くのデータ検証機能をサポートしていません。Avro Schema には pattern、format、minimum、maximum、required キーワードがなく、条件付き検証もサポートしていません。
データが、検証機能を備えた XML Schema または JSON Schema で記述された XML や JSON として生成されるシステムでは、まずネイティブのスキーマ言語を使ってデータを検証し、その後、変換、転送、保存に Avro Schema を使用することを前提としています。
データベーステーブルへの CloudEvents 列の追加
Avrotize Schema を Kusto Data Table Definition(KQL)、SQL Table Definition、または Parquet Schema に変換する際、ツールは CloudEvents 属性用の特別な列を追加できます。CNCF CloudEvents は、イベントデータを共通の方法で記述するための仕様です。
データベーステーブルにこのような列を追加する理由は、メッセージやイベントでは通常、イベントのメタデータとペイロードデータが分離されている一方、イベントをデータベースに取り込む際には、それらの情報が統合されるためです。メタデータには、ペイロード自体には含まれていない、イベントに関する重要なコンテキスト情報が含まれていることがよくあります。そのため、イベントストアの構築時にメッセージのコンテキストとペイロードを簡単に対応付けられるよう、ツールはデータベーステーブルにそれらの列を追加できます。
Proto スキーマを Avrotize スキーマに変換する
avrotize p2a <path_to_proto_file> [--out <path_to_avro_schema_file>]
パラメーター:
<path_to_proto_file>:変換する Protobuf スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。
変換に関する注意事項:
- Proto 2 と Proto 3 の構文に対応しています。
- Proto のパッケージ名は Avro の名前空間にマッピングされます。このツールはインポートを解決し、インポートされたすべての型を単一の Avrotize スキーマファイルに統合します。
- このツールは、Protobuf 3.0 のすべての「well-known」型を Avro 形式で埋め込み、該当する型がインポートされた際に必要に応じて挿入します。Avro の論理型「timestamp-millis」にマッピングされるのは
Timestamp型のみです。その他の well-known Protobuf 型は、同じフィールド名と型を持つ Avro レコード型として維持されます。 - Protobuf では
mapのキーに任意のスカラー型を使用できますが、Avro では使用できません。Proto から Avro への変換時、マップキーの型情報は無視されます。 - メッセージ型のフィールド番号は、Avro レコードのフィールド位置にはマッピングされません。Avro のフィールドは Proto スキーマに記載された順序になります。そのため、Avrotize スキーマでは Proto スキーマの
extensionsキーワードとreservedキーワードも無視されます。 optionalキーワードを指定すると、Avro フィールドは null 許容(null型とのユニオン)になります。一方、requiredキーワードを指定すると、フィールドは null 非許容になります。repeatedキーワードを指定すると、Avro フィールドはそのフィールド型の配列になります。- Proto の
oneofキーワードは、Avro のユニオン型にマッピングされます。 - Proto スキーマのすべての
optionsは無視されます。
Avrotize スキーマを Proto スキーマに変換する
avrotize a2p <path_to_avro_schema_file> [--out <path_to_proto_directory>] [--naming <naming_mode>] [--allow-optional]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Protobuf スキーマディレクトリのパスです。省略した場合、出力は標準出力に送られます。--naming:(任意)型の命名規則です。選択肢はsnake、camel、pascalです。--allow-optional:(任意)「optional」フィールドのサポートを有効にします。
変換に関する注意事項:
- Avro の名前空間は、個別の proto パッケージ定義に解決されます。このツールは、Avrotize スキーマ内で見つかった各名前空間について、パッケージ定義と
import文を含む新しい.protoファイルを作成します。 - Avro の型ユニオン
[]は、Proto のoneof式に変換されます。Avro では型ユニオン内にマップと配列を含められますが、Proto がサポートするのはスカラー型とメッセージ型の参照のみです。そのため、このようなケースでは、単一の配列フィールドまたはマップフィールドを含むメッセージ型を出力して、それを包含する型に追加します。また、配列とマップの値に含まれるユニオンも再帰的に解決します。 - メッセージ内のフィールドの順序は、Avro レコード内のフィールドの順序に従います。型ユニオンを
oneof式に解決する必要がある場合、代替フィールドにフィールド番号を割り当てるため、それ以降のフィールド番号はずれます。
CUE スキーマのサブセットを Avrotize Schema に変換
avrotize cue2a <path_to_cue_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
### Convert FlatBuffers schema to Avrotize Schema
```bash
avrotize fbs2a <path_to_fbs_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
### Convert Apache Thrift IDL to Avrotize Schema
```bash
avrotize thrift2a <path_to_thrift_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
### Convert Smithy IDL data shapes to Avrotize Schema
```bash
avrotize smithy2a <path_to_smithy_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
### Convert Cap'n Proto schema to Avrotize Schema
```bash
avrotize capnp2a <path_to_capnp_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
### Convert RAML Data Types to Avrotize Schema
```bash
avrotize raml2a <path_to_raml_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_cue_file>:変換する CUE ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:生成する Avrotize Schema レコードの名前空間(任意)です。省略した場合、単純な CUEpackage名が名前空間として使用されます。
サポートされるサブセット/制限事項:
- サポート対象:スキーマ形式の定義
#Name: { ... }、生成レコードとしてのトップレベルフィールド、必須フィールドname: T、任意フィールドname?: T、プリミティブ型string、int、float、number、bool、bytes、null(intは Avro のlongに、numberは Avro のdoubleにマッピングされます)。 - サポート対象:レコードとしてのネストされた構造体、配列としてのオープンリスト
[...T]、マップとしてのオープン構造体{ [string]: T }、他の定義への参照(#Other)、Avro ユニオンとしての選言、*null | TやT | nullのような null 許容の選言、シンボル名をサニタイズした Avro 列挙型としての文字列リテラルの選言、name: T | *defaultのような単純なデフォルト値。 - 対象外:CUE の制約解決全般、単純な package 宣言以外のインポート、複雑な制約や内包表記、計算式や統合式、範囲制約や正規表現制約(
>0、=~"...")、補間、package/module の解決。サポートされない構文は、クラッシュする代わりにスキップされるか、変換に関する注記を付けて汎用的な文字列型にマッピングされます。
例:
package demo
#Person: {
name: string
age?: int
tags: [...string]
status: "new" | "active"
}
Avrotize Schema を CUE スキーマのサブセットに変換
avrotize a2cue <path_to_avro_schema_file> [--out <path_to_cue_file>] [--namespace <cue_package_hint>]
変換に関する注記:
- Avro レコードは CUE 定義(
#Name: { ... })に、フィールドはname: Typeに変換されます。null 許容ユニオンは可能な場合は任意フィールドに、列挙型は文字列の選言に、配列は[...T]に、マップは{ [string]: T }に変換されます。 - Avro の
intとlongはどちらも CUE のintとして出力されます。floatはfloatに、doubleはnumberに変換されます。Avro の名前空間は、最後の名前空間セグメントを使って単純な CUE package 名に変換されます。 - 変換ツールは
cue2aが受け入れる実用的なスキーマサブセットと同じものを出力します。CUE の制約、インポート、内包表記、計算式の再現は試みません。
CUE スキーマのサブセットを JSON Structure に変換
avrotize cue2s <path_to_cue_file> [--out <path_to_structure_file>] [--namespace <namespace>]
cue2s は中間の Avrotize Schema ファイルを介して変換するため、cue2a と同じ CUE のサポート対象サブセットと制限事項が適用されます。
JSON 構造を CUE スキーマのサブセットに変換
avrotize s2cue <path_to_structure_file> [--out <path_to_cue_file>] [--namespace <cue_package_hint>]
s2cue は、中間の Avrotize Schema ファイルを介して、a2cue と同じ実用的な CUE スキーマのサブセットを出力します。
<path_to_fbs_file>:変換する FlatBuffers.fbsスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)Avrotize Schema の FlatBuffers 名前空間を上書きします。
変換に関する注意事項と制限:
- FlatBuffers の
namespace宣言は Avro の名前空間にマッピングされます。tableとstructの宣言は Avro のレコードにマッピングされます。FlatBuffers の構造体はインラインで配置される固定レイアウトのセマンティクスを持ちますが、Avro では表現されないため、生成されるレコードにその旨が記載されます。 - FlatBuffers の列挙型は Avro の列挙型にマッピングされます。整数の列挙値は、標準外の Avrotize
ordinalsアノテーションで保持されます。Avro の列挙シンボルのみを認識するコンシューマーは、これらの整数値を無視する場合があります。 - FlatBuffers のユニオンは、メンバーレコード型の Avro ユニオンにマッピングされます。
- スカラー型のマッピング:符号付き 8/16/32 ビット整数は Avro の
intに、符号なし 32 ビット整数とすべての 64 ビット整数は Avro のlongにマッピングされます。符号付き 64 ビットの範囲を超えるuint64/ulongの値は、Avro のlongでは正確に表現できません。floatとdoubleは Avro のfloatとdoubleに、stringは Avro のstringにマッピングされます。 - ベクターは Avro の配列にマッピングされます。ただし、
[ubyte]/[uint8]は Avro のbytesにマッピングされます。 (required)が指定されていないテーブルフィールドは、デフォルト値がnullの nullable な Avro フィールドとして出力されます。FlatBuffers のフィールドデフォルト値は、nullable フィールドの AvrotizefbsDefaultアノテーションとして保持されます。root_typeはレコードレベルのroot_typeアノテーションとして保持されます。
Avrotize Schema を FlatBuffers スキーマに変換
avrotize a2fbs <path_to_avro_schema_file> [--out <path_to_fbs_file>] [--namespace <flatbuffers_namespace>]
- `<path_to_thrift_file>`: The path to the Apache Thrift IDL file to be converted. If omitted, the file is read from stdin.
- `--out`: The path to the Avrotize Schema file to write the conversion result to. If omitted, the output is directed to stdout.
- `--namespace`: (optional) Override the Avro namespace. Without an override, `namespace *` is used, then the first language-specific namespace.
Conversion notes and limitations:
- `struct`, `exception`, and `union` declarations are emitted as Avro records. Thrift unions are modeled as records whose fields are all nullable; Avro does not enforce the Thrift rule that at most one field is set.
- `enum` declarations are emitted as Avro enums. Ordinals are preserved in an `ordinals` annotation. Symbols and names that are not valid Avro names are sanitized.
- `typedef` aliases are resolved to their target type. `const` declarations and `service` definitions are skipped because they do not describe persistent data structures.
- `set<T>` is emitted as an Avro array and does not preserve uniqueness semantics. `map<string,V>` is emitted as an Avro map; maps with non-string keys are emitted as arrays of `{ key, value }` records.
- `include` statements are recorded by the parser but are not recursively resolved by the converter. Convert included IDL files separately or pre-expand them before conversion.
### Convert Avrotize Schema to Apache Thrift IDL
```bash
avrotize a2thrift <path_to_avro_schema_file> [--out <path_to_thrift_file>] [--namespace <thrift_namespace>]
- `<path_to_smithy_file>`: The path to the Smithy 2.0 IDL file to be converted. If omitted, the file is read from stdin.
- `--out`: The path to the Avrotize Schema file to write the conversion result to. If omitted, the output is directed to stdout.
- `--namespace`: (optional) Override the Smithy `namespace` for the emitted Avro namespace.
Conversion notes:
- Phase 1 supports Smithy data shapes only: `structure`, `union`, `enum`, `intEnum`, `list`, `map`, and scalar shape references. `service`, `operation`, `resource`, HTTP/protocol traits, mixins beyond simple parsing, and `apply` statements are explicitly out of scope and are skipped without failing conversion.
- Smithy `namespace` maps to Avro `namespace`. `@documentation` maps to Avro `doc`; `@required` makes a field non-nullable; non-required fields are nullable and default to `null`; `@default` maps to the Avro field default where Avro permits it. `@deprecated` and `@tags` are carried into `doc` text.
- Smithy `union` shapes are represented as Avro records whose alternatives are nullable fields, preserving member names while keeping the Avro schema valid. Avro field unions convert back to Smithy `union` shapes.
- Smithy `intEnum` converts to an Avro enum with an `ordinals` annotation; Avro itself stores enum symbols, so integer values are metadata for round-tripping.
- Smithy `list` and `map` members map to Avro arrays and maps. Avro maps are string-keyed, so Smithy map keys should be `String`; other key declarations are noted but cannot be represented as Avro map keys.
- Scalar mappings include `Blob`→`bytes`, `Boolean`→`boolean`, `String`→`string`, integer widths→`int`/`long`, floats→`float`/`double`, `Timestamp`→valid Avro `long` with `timestamp-millis`, `BigInteger`→`string`, `BigDecimal`→`double`, and `Document`→`string`.
### Convert Avrotize Schema to Smithy IDL data shapes
```bash
avrotize a2smithy <path_to_avro_schema_file> [--out <path_to_smithy_file>] [--namespace <smithy_namespace>]
- `<path_to_capnp_file>`: The path to the Cap'n Proto `.capnp` schema file to be converted. If omitted, the file is read from stdin.
- `--out`: The path to the Avrotize Schema file to write the conversion result to. If omitted, the output is directed to stdout.
- `--namespace`: Optional Avro namespace. If omitted, the input file name is used.
Conversion notes and limitations:
- Structs map to Avro records, enums map to Avro enums, and field ordinals are stored as `capnpOrdinal` metadata. Enum ordinals are stored as `capnpOrdinals`.
- Cap'n Proto fields are pointer-default/zero-default optional in practice; Avrotize emits nullable Avro fields (`["null", T]`) with `default: null` for non-`Void` fields.
- Primitive mapping: `Bool`→`boolean`; `Int8`/`Int16`/`Int32`→`int`; `Int64`→`long`; unsigned integers including `UInt64`→`long` (range checks are not represented); `Float32`→`float`; `Float64`→`double`; `Text`→`string`; `Data`→`bytes`; `Void`→`null`; `List(T)`→Avro array. No invalid Avro logical types are emitted.
- Anonymous and named Cap'n Proto unions are represented as nullable fields tagged with `capnpUnion` metadata rather than as exclusive Avro unions; exclusivity constraints are not enforced by Avro.
- Groups are represented as inline nested Avro records. Nested structs and enums are emitted as named Avro types in derived nested namespaces.
- The file id is accepted but not used as an Avro namespace seed. `interface`, `const`, `annotation`, imports, and using declarations are skipped.
### Convert Avrotize Schema to Cap'n Proto schema
```bash
avrotize a2capnp <path_to_avro_schema_file> [--out <path_to_capnp_file>] [--namespace <namespace_note>]
- `<path_to_raml_file>`: The path to the RAML 1.0 file or library. If omitted, the file is read from stdin.
- `--out`: The path to the Avrotize Schema file to write. If omitted, the output is directed to stdout.
- `--namespace`: (optional) Namespace for generated Avro named types.
Conversion notes:
- Phase 1 supports RAML 1.0 **Data Types** in the `types:` section only. API resources, methods, traits, resourceTypes, securitySchemes, annotations, and external `!include` expansion are explicitly out of scope and are ignored or left as inert YAML values.
- Object types with `properties:` become Avro records. Optional properties (`name?` or `required: false`) become nullable Avro fields with `null` first and default `null`.
- Scalar mappings are `string`→`string`, `number`→`double`, `integer`→`long`, `boolean`→`boolean`, `file`→`bytes`, and `nil`→`null`.
- RAML date/time precision is normalized to valid Avro logical types: `date-only`→`int`/`date`, `time-only`→`int`/`time-millis`, and `datetime-only`/`datetime`→`long`/`timestamp-millis`.
- Arrays use `T[]` or `type: array` with `items`. Unions use `A | B`; nullable `T?` is treated as `nil | T`.
- Maps use the documented RAML convention `properties: { "//": T }` or `additionalProperties: T` and become Avro maps.
- RAML enums become Avro enums; symbols are sanitized to Avro identifiers. Non-string enum base types are emitted as Avro enum symbols, so literal value typing is not preserved.
### Convert Avrotize Schema to RAML Data Types
```bash
avrotize a2raml <path_to_avro_schema_file> [--out <path_to_raml_file>] [--namespace <namespace_to_strip>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む FlatBuffers.fbsファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)FlatBuffers の名前空間を上書きします。
変換に関する注意事項と制限:
- Avro レコードは FlatBuffers のテーブルとして、Avro の列挙型は FlatBuffers の列挙型として出力されます。配列はベクターに、Avro の
bytesは[ubyte]に変換されます。 - nullable な Avro ユニオン(
["null", T])は、オプションの FlatBuffers フィールドになります。名前付き型の複数分岐を持つ Avro ユニオンは、FlatBuffers のunion宣言として出力されます。 - Avro の名前空間は FlatBuffers の名前空間にマッピングされます。最上位のレコード、または
root_typeアノテーションが付いたレコードは、root_typeとして出力されます。 - Avro のマップ、論理型、固定長型、エイリアス、検証アノテーション、任意のカスタムアノテーションには、FlatBuffers に直接対応するものがありません。そのため、互換性のあるフィールド型に単純化するか、省略されます。
Avrotize Schema を ASN.1 スキーマに変換
avrotize a2asn <path_to_avro_schema_file> [--out <path_to_asn1_file>] [--module <asn1_module_name>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む ASN.1 モジュールファイルのパスです。省略した場合、出力は標準出力に送られます。--moduleが指定されていない場合、ASN.1 モジュール名は出力ファイル名から導出されます。--module:(任意)ASN.1 モジュール名を上書きします。
変換に関する注意事項と制限:
- 出力されるモジュールでは
DEFINITIONS AUTOMATIC TAGSを使用します。これにより、ASN.1 コンパイラーがOPTIONALとCHOICEのタグを自動的に区別できます。 - Avro のレコードは
SEQUENCEに、Avro の列挙型はENUMERATEDに、配列はSEQUENCE OFに、fixedはOCTET STRING (SIZE(n))に変換されます。 - Avro のマップは
SEQUENCE OF SEQUENCE { key UTF8String, value ... }に変換されます。 - nullable union(
["null", T])はOPTIONALメンバーに、複数の分岐を持つ union は ASN.1 のCHOICEに変換されます。 - 論理型は ASN.1 の有用型に変換されます。
date→DATE、time-millis/time-micros→TIME-OF-DAY、timestamp-*→DATE-TIMEです。decimal、uuid、durationは ASN.1 に厳密な相当型がないため、REAL/UTF8Stringで表現されます。 - 識別子は厳格な X.680 に準拠するようにサニタイズされます(アンダースコアではなくハイフンを使用します)。モジュールは
asn1toolsコンパイラーを介した往復変換によって検証されます。
JSON Structure スキーマを ASN.1 スキーマに変換
avrotize s2asn <path_to_structure_schema_file> [--out <path_to_asn1_file>] [--module <asn1_module_name>]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む ASN.1 モジュールファイルのパスです。省略した場合、出力は標準出力に送られます。--moduleが指定されていない場合、ASN.1 モジュール名は出力ファイル名から導出されます。--module:(任意)ASN.1 モジュール名を上書きします。
変換に関する注意事項と制限:
- これは JSON Structure から ASN.1 への直接マッピングです。Avrotize Schema を経由しないため、JSON Structure のより豊富な型システムが保持されます。
- サイズ指定の整数型は、忠実な範囲制約を伴う
INTEGERに変換されます(たとえば、int8→INTEGER (-128..127)、uint32→INTEGER (0..4294967295))。 objectはSEQUENCEに、arrayはSEQUENCE OFに、setはSET OFに、mapはSEQUENCE OF SEQUENCE { key UTF8String, value ... }に、tupleは位置に基づくSEQUENCEに、choiceはCHOICEに変換されます。- 文字列の
enum/const値はENUMERATEDに変換されます(シンボルラベルと序数を保持します)。整数のenum/const値はINTEGER (v1 | v2 | ...)の値制約に変換されます(正確な値を保持します)。 $extendsは、基底オブジェクトのプロパティを派生したSEQUENCEに統合します。正規形式の{"type": {"$ref": ...}}参照、単独の{"$ref": ...}参照、ネストされた定義の名前空間は、いずれも解決されます。- 必須でないメンバー、または nullable なメンバーは
OPTIONALになります。ASN.1 に厳密な相当型がない型(uuid、uri、duration、jsonpointer)はUTF8Stringで表現されます。anyは ASN.1 のオープン型ANYに変換されます。
FlatBuffers スキーマを JSON Structure に変換
avrotize fbs2s <path_to_fbs_file> [--out <path_to_json_structure_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_fbs_file>:変換する FlatBuffers.fbsスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む JSON Structure ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)Avrotize Schema ブリッジが使用する名前空間を上書きします。
変換に関する注意事項:
- この変換では Avrotize Schema(
fbs2aに続いてa2s)を経由するため、上記の FlatBuffers から Avro へのマッピングに関する制限も適用されます。 - FlatBuffers の
root_typeレコードが存在する場合、JSON Structure のルートとして使用されます。
JSON StructureをFlatBuffersスキーマに変換
avrotize s2fbs <path_to_json_structure_file> [--out <path_to_fbs_file>] [--namespace <flatbuffers_namespace>]
パラメーター:
<path_to_json_structure_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルはstdinから読み込まれます。--out:変換結果を書き込むFlatBuffers.fbsファイルのパスです。省略した場合、出力はstdoutに送られます。--namespace:(任意)FlatBuffersの名前空間を上書きします。
変換に関する注意事項:
-
この変換ではAvrotize Schema(
s2aに続いてa2fbs)を介して変換するため、上記のAvroからFlatBuffersへのマッピングに関する制限が適用されます。 -
Avrotize Schemaを介した変換で保持されないJSON Structureの制約とメタデータは、生成されるFlatBuffersスキーマに反映されません。
-
--out:書き込むThrift IDLファイルのパスです。省略した場合、出力はstdoutに送られます。 -
--namespace:(任意)出力されるnamespace *の値を上書きします。
変換に関する注意事項と制限事項:
- Avroのレコードは、連番のフィールドIDを持つThriftの
struct定義として出力されます。Avroの列挙型はThriftの列挙型として出力されます。 - null許容のAvroユニオン(
["null", T])はoptionalフィールドとして出力されます。それ以外の複数分岐のAvroユニオンはstringとして近似されます。 - Avroの配列は
list<T>として、Avroのマップはmap<string,V>として出力されます。Thriftのsetや、キーが文字列以外のマップのセマンティクスは、Avroから復元できません。 - Avroの論理型とカスタムアノテーションはThrift IDLに反映されません。
Apache Thrift IDLをJSON Structureに変換
avrotize thrift2s <path_to_thrift_file> [--out <path_to_structure_file>] [--namespace <avro_schema_namespace>]
まずAvrotize Schemaに変換してから、Thrift IDLをJSON Structureに変換します。そのため、上記のThriftからAvroへの制限事項が適用されます。
JSON StructureをApache Thrift IDLに変換
avrotize s2thrift <path_to_structure_file> [--out <path_to_thrift_file>] [--namespace <thrift_namespace>]
まずAvrotize Schemaに変換してから、JSON StructureをThrift IDLに変換します。そのため、上記のAvroからThriftへの制限事項が適用されます。
--out:書き込むSmithy IDLファイルのパスです。省略した場合、出力はstdoutに送られます。--namespace:(任意)出力するSmithy名前空間を上書きします。
変換に関する注意事項:
-
AvroのレコードはSmithyの
structureシェイプになり、null許容のユニオンはオプショナルメンバーになります。nullを許容しないフィールドは@required付きで出力されます。 -
Avroの列挙型はSmithyの
enumシェイプになり、ordinalsアノテーションがある場合はintEnumになります。Avroの配列とマップはSmithyのlistシェイプとmapシェイプになります。null以外の選択肢が複数あるAvroのユニオンはSmithyのunionシェイプになります。 -
サービスとオペレーションのモデリングはフェーズ1の対象外であることが明示されており、このコマンドはSmithyのデータシェイプのみを出力します。
-
--out:書き込むCap'n Protoスキーマファイルのパスです。省略した場合、出力はstdoutに送られます。 -
--namespace:生成ファイルにコメントとして含める任意の名前空間に関する注記です。
変換に関する注意事項と制限事項:
- Avroのレコードは
structに、列挙型はenumに、配列はList(T)に、文字列はTextに、bytes/fixedはDataに、null許容のユニオンはnull以外のCap'n Protoフィールド型に対応します。 - フィールドは決定的な連番の序数(
@0、@1、...)付きで出力されます。安定した生成ファイルIDも出力されます。スキーマでプロジェクト所有のCap'n Proto IDが必要な場合は、これを置き換えてください。 - 複数分岐のAvroユニオンは、
capnpUnionメタデータが存在する場合、ネストされた選択肢の構造体またはunionブロックとして出力されます。Cap'n Protoには直接的なマッププリミティブがないため、Avroのマップは生成されたキーと値のエントリー構造体のリストとして表現されます。
Cap'n ProtoスキーマをJSON Structureに変換
avrotize capnp2s <path_to_capnp_file> [--out <path_to_json_structure_file>] [--namespace <avro_schema_namespace>] [--naming <naming_mode>] [--avro-encoding]
この変換では中間のAvrotize Schemaを介するため、capnp2aに関して説明されているCap'n Protoの制限事項が適用されます。
JSON 構造を Cap'n Proto スキーマに変換
avrotize s2capnp <path_to_json_structure_file> [--out <path_to_capnp_file>] [--namespace <namespace_note>]
この変換では中間形式として Avrotize Schema を介するため、a2capnp で説明されている Avro から Cap'n Proto への変換の制限が適用されます。
<path_to_avro_schema_file>:Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:書き込み先の RAML ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)生成される RAML 型参照から削除する名前空間です。
変換に関する注意事項:
- コンバーターは、
types:マップを持つ#%RAML 1.0 Libraryを出力します。RAML API のリソース/メソッドへの完全な変換は、明示的に対象外です。 - Avro のレコードは RAML の
object型に変換されます。NULL 許容フィールドはname?のオプションプロパティ形式で出力され、列挙型はenum:に、配列はT[]に、マップはproperties: { "//": T }に、ユニオンはA | Bに変換されます。 - Avro の論理型は RAML の
date-only、time-only、またはdatetimeに変換されます。逆変換では、datetime-onlyと Avro のタイムスタンプ論理型を区別できません。
JSON Schema を Avrotize Schema に変換
avrotize j2a <path_to_json_schema_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>] [--split-top-level-records]
パラメーター:
<path_to_json_schema_file>:変換する JSON Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)JSON Schema で名前空間が定義されていない場合に、Avrotize Schema で使用する名前空間です。--split-top-level-records:(任意)トップレベルのレコードを個別のファイルに分割します。
変換に関する注意事項:
Avrotize Schema を JSON Schema に変換
avrotize a2j <path_to_avro_schema_file> [--out <path_to_json_schema_file>] [--naming <naming_mode>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む JSON Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--naming:(任意)型の命名規則です。選択肢はsnake、camel、pascal、defaultです。
変換に関する注意事項:
XML Schema(XSD)を Avrotize Schema に変換
avrotize x2a <path_to_xsd_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_xsd_file>:変換する XML Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)XML Schema で名前空間が定義されていない場合に、Avrotize Schema で使用する名前空間です。
変換に関する注意事項:
- XML Schema のすべての構成要素は、フィールドを持つ Avro のレコード型にマッピングされます。このとき、要素と属性の両方がレコードのフィールドになります。そのため、XML はフィールドに平坦化され、この構造上の側面は保持されません。
- Avro は任意の型指定をサポートせず、常に名前付き型を使用する必要があるため、
xsd:anyをサポートしていません。このツールは、スカラー値、または配列やマップを2階層までネストした値を許容するユニオン型として、xsd:anyを型指定したanyフィールドにマッピングします。 - 列挙型を定義する
simpleType宣言は、Avro のenum型にマッピングされます。それ以外のファセットは無視され、単純型は対応する Avro 型にマッピングされます。 - 属性によって基本型を拡張する単純なコンテンツを持つ
complexType宣言は、Avro のレコード型にマッピングされます。複合型で定義されているその他のファセットは無視されます。 - スキーマでルート要素が1つ定義されている場合、ツールは Avro レコード型を1つ出力します。ルート要素が複数定義されている場合、ルート要素ごとに対応するレコード型のユニオンを出力します。
- 生成される Avrotize Schema のすべてのフィールドには、XML Schema でそのフィールドが
elementだったかattributeだったかを示すxmlkind拡張属性が付与されます。
Avrotize スキーマを XML スキーマに変換
avrotize a2x <path_to_avro_schema_file> [--out <path_to_xsd_schema_file>] [--namespace <target_namespace>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む XML スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)XSD スキーマの対象名前空間です。
変換に関する注意事項:
- Avro のレコード型は、要素を持つ XML Schema の複合型にマッピングされます。
- Avro の列挙型は、制約を持つ XML Schema の単純型にマッピングされます。
- Avro の論理型は、必要に応じて制約を持つ XML Schema の単純型にマッピングされます。
- Avro のユニオンは、すべてのユニオン型がプリミティブ型の場合、ユニオン制約を持つ独立した XSD 単純型定義にマッピングされます。
- 複合型を含む Avro のユニオンは、各選択肢に対応する個別の型に解決された後、
選択肢と結合されます。
JSON 構造を XML スキーマ(XSD)に変換
avrotize s2x <path_to_structure_file> [--out <path_to_xsd_schema_file>] [--namespace <target_namespace>]
パラメーター:
<path_to_structure_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む XML スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)XSD スキーマの対象名前空間です。
変換に関する注意事項:
- JSON Structure のオブジェクト型は、要素を持つ XML Schema の複合型にマッピングされます。
- JSON Structure のプリミティブ型(string、int8-128、uint8-128、float/double、boolean など)は、適切な XSD 単純型にマッピングされます。
- 拡張プリミティブ型は、次のようにマッピングされます。
binary/bytes→xs:base64Binarydate→xs:datetime→xs:timedatetime/timestamp→xs:dateTimeduration→xs:durationuuid→xs:stringuri→xs:anyURIdecimal→xs:decimal
- コレクション型:
arrayとset→ 項目のシーケンスを持つ複合型map→ キーと値を含むエントリー要素を持つ複合型tuple→ 型付き項目の固定シーケンスを持つ複合型
- ユニオン型(
choiceまたは["string", "null"]のような型配列):- タグ付きユニオン(識別子付き)→
xs:choice要素 - インラインユニオン → 具象拡張を持つ抽象基底型
- NULL 許容型 →
minOccurs="0"を持つ要素
- タグ付きユニオン(識別子付き)→
- 型参照(
$ref)は名前付き XSD 型に解決されます。 - 型拡張(
$extends)はxs:complexContentを持つ XSD 複合型拡張にマッピングされます。 - 抽象型は XSD で
abstract="true"として指定されます。 - 検証制約(minLength、maxLength、pattern、minimum、maximum)は、XSD の制約/ファセットに変換されます。
- 必須プロパティは
minOccurs="1"を持つ要素になり、任意プロパティはminOccurs="0"を持つ要素になります。
ASN.1 スキーマを Avrotize スキーマに変換する
avrotize asn2a <path_to_asn1_schema_file>[,<path_to_asn1_schema_file>,...] [--out <path_to_avro_schema_file>]
パラメーター:
<path_to_asn1_schema_file>:変換する ASN.1 スキーマファイルのパスです。カンマ区切りのリストで複数のファイルを指定できます。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。
変換に関する注意事項:
- すべての ASN.1 型は、Avro のレコード型、列挙型、ユニオン型にマッピングされます。Avro は ASN.1 と同じレベルの型のネストに対応していないため、ツールは最適な型にマッピングします。
- ツールは、次の ASN.1 型を Avro 型にマッピングします。
SEQUENCEとSETは、Avro のレコード型にマッピングされます。CHOICEは、すべてのフィールドをオプションとする Avro のレコード型にマッピングされます。CHOICE型は技術的には Avro のユニオン型に相当しますが、ASN.1 型では各選択肢に異なる名前付きフィールドがあり、これは Avro のユニオン型の機能ではありません。OBJECT IDENTIFIERは、Avro の文字列型にマッピングされます。ENUMERATEDは、Avro の列挙型にマッピングされます。SEQUENCE OFとSET OFは、Avro の配列型にマッピングされます。BIT STRINGは、Avro のバイト型にマッピングされます。OCTET STRINGは、Avro のバイト型にマッピングされます。INTEGERは、Avro の long 型にマッピングされます。REALは、Avro の double 型にマッピングされます。BOOLEANは、Avro のブール型にマッピングされます。NULLは、Avro の null 型にマッピングされます。UTF8String、PrintableString、IA5String、BMPString、NumericString、TeletexString、VideotexString、GraphicString、VisibleString、GeneralString、UniversalString、CharacterString、T61Stringはすべて、Avro の文字列型にマッピングされます。- その他すべての ASN.1 型は、Avro の文字列型にマッピングされます。
- ASN.1 スキーマファイルの解析機能には制限があり、すべての ASN.1 ファイルを解析できるとは限りません。このツールは Python の asn1tools パッケージに基づいており、そのパッケージの機能に制限されます。
Kusto テーブル定義を Avrotize Schema に変換する
avrotize k2a --kusto-uri <kusto_cluster_uri> --kusto-database <kusto_database> [--out <path_to_avro_schema_file>] [--emit-cloudevents-xregistry]
パラメーター:
--kusto-uri:接続先の Kusto クラスターの URI です。--kusto-database:テーブル定義の読み込み元となる Kusto データベースの名前です。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--emit-cloudevents-xregistry:(省略可能)詳細については以下の説明を参照してください。
変換に関する注意事項:
- このツールは Kusto クラスターに直接接続し、指定されたデータベースからテーブル定義を読み込みます。データベース内のすべてのテーブルを Avro レコード型に変換し、最上位の型ユニオンとして返します。
- Kusto クラスターへの接続には、Azure CLI と同じ認証メカニズムを使用します。Azure CLI がインストールされ、認証済みの場合、このツールは Azure CLI と同じ認証コンテキストを使用します。
- このツールは、Kusto の列型を次のように Avro 型にマッピングします。
boolは Avro の boolean 型にマッピングされます。datetimeは論理型timestamp-millisを持つ Avro の long 型にマッピングされます。decimalは、logicalTypeがdecimalに設定され、precisionとscaleが Kusto のdecimal型の値に設定された論理 Avro 型にマッピングされます。guidは Avro の string 型にマッピングされます。intは Avro の int 型にマッピングされます。longは Avro の long 型にマッピングされます。realは Avro の double 型にマッピングされます。stringは Avro の string 型にマッピングされます。timespanは論理型durationを持つ論理 Avro 型にマッピングされます。
dynamic列の場合、このツールはテーブルのデータをサンプリングして、動的列の構造を判定します。動的列は、その列内で見つかったフィールドに対応するフィールドを持つ Avro レコード型にマッピングされます。動的列にネストされた動的列が含まれる場合、それらも再帰的に Avro レコード型にマッピングされます。動的列内で構造が競合するレコードが見つかった場合、その動的列にはレコード型のユニオンが出力されます。--emit-cloudevents-xregistryオプションが設定されている場合、このツールは、Kusto データベース内の各テーブルに対する CloudEvent メッセージ定義と、埋め込みスキーマレジストリ内の各テーブルに対する個別の Avro Schema を含む xRegistry レジストリマニフェストファイルを出力します。1 つ以上のテーブルに CloudEvent データが含まれていると判定された場合(CloudEvents 属性列の存在によって判定)、テーブルに保存されている CloudEvent 型を特定するため、type(または__typeまたは__type)列の内容を調べ、各一意の型に対する CloudEvent 定義とスキーマを出力します。
Kusto テーブル定義を JSON Structure に変換する
avrotize k2s [<path_to_kusto_file>] [--out <path_to_structure_file>] [--kusto-uri <kusto_cluster_uri>] [--kusto-database <kusto_database>] [--table-name <table_name>]
このコマンドは、Kusto 定義ファイルまたは稼働中の Kusto クラスターとデータベースのどちらかを受け取ります。dynamic 列をサンプリングして、ネストされた構造、選択肢、列挙型を推論できます。CloudEvents 宣言を追加するには --emit-cloudevents を使用し、単一の JSON Structure スキーマの代わりに xRegistry マニフェストを出力するには --emit-xregistry を使用します。
SQL データベーススキーマを Avrotize Schema に変換
avrotize sql2a --connection-string <connection_string> [--username <user>] [--password <pass>] [--dialect <dialect>] [--database <database>] [--table-name <table>] [--out <path_to_avro_schema_file>] [--namespace <namespace>] [--infer-json] [--infer-xml] [--sample-size <n>] [--emit-cloudevents] [--emit-xregistry]
パラメーター:
--connection-string:データベースの接続文字列です。SSL/TLS および統合認証オプションに対応しています(以下の例を参照)。--username:(任意)データベースのユーザー名です。接続文字列内のユーザー名より優先されます。コマンド履歴に認証情報を残さないために使用します。--password:(任意)データベースのパスワードです。接続文字列内のパスワードより優先されます。コマンド履歴に認証情報を残さないために使用します。--dialect:(任意)SQL の方言です。postgres(デフォルト)、mysql、sqlserver、oracle、またはsqliteを指定します。--database:(任意)接続文字列に指定されていない場合のデータベース名です。--table-name:(任意)変換する特定のテーブルです。省略した場合、すべてのテーブルが変換されます。--out:Avrotize Schema ファイルのパスです。省略した場合、出力は stdout に送られます。--namespace:(任意)生成されるスキーマの Avro 名前空間です。--infer-json:(任意、デフォルト:true)データをサンプリングして、JSON/JSONB 列のスキーマを推論します。--infer-xml:(任意、デフォルト:true)データをサンプリングして、XML 列のスキーマを推論します。--sample-size:(任意、デフォルト:100)JSON/XML スキーマの推論でサンプリングする行数です。--emit-cloudevents:(任意)CloudEvents テーブルを検出し、CloudEvents 宣言を出力します。--emit-xregistry:(任意)単一のスキーマファイルの代わりに xRegistry マニフェストを出力します。
接続文字列の例:
# PostgreSQL with separate credentials (preferred for security)
avrotize sql2a --connection-string "postgresql://host:5432/mydb?sslmode=require" --username myuser --password mypass --out schema.avsc
# PostgreSQL with SSL (credentials in URL)
avrotize sql2a --connection-string "postgresql://user:pass@host:5432/mydb?sslmode=require" --out schema.avsc
# MySQL with SSL
avrotize sql2a --connection-string "mysql://user:pass@host:3306/mydb?ssl=true" --dialect mysql --out schema.avsc
# SQL Server with Windows Authentication (omit user/password)
avrotize sql2a --connection-string "mssql://@host:1433/mydb" --dialect sqlserver --out schema.avsc
# SQL Server with TLS encryption
avrotize sql2a --connection-string "mssql://user:pass@host:1433/mydb?encrypt=true" --dialect sqlserver --out schema.avsc
# SQLite file
avrotize sql2a --connection-string "/path/to/database.db" --dialect sqlite --out schema.avsc
変換に関する注意事項:
- ツールは実行中のデータベースに接続し、information schema またはシステムカタログからスキーマを読み取ります。
- 各方言の型マッピング:
- PostgreSQL:
uuid、jsonb、xml、配列、カスタム型など、すべての標準型に対応します。 - MySQL:
json、enum、set、空間型などの標準型に対応します。 - SQL Server:
uniqueidentifier、xml、money、hierarchyidなどの標準型に対応します。 - Oracle:
number、clob、blob、Oracle 固有の型などの標準型に対応します。 - SQLite:宣言された型のアフィニティに基づいて動的型付けをマッピングします。
- PostgreSQL:
- JSON/JSONB 列(PostgreSQL、MySQL)および XML 列では、ツールがデータをサンプリングして構造を推論します。一部のレコードにのみ現れるフィールドは統合されます。レコード間でフィールドの型が競合する場合、ツールはレコード型のユニオンを出力します。
- キーに Avro 識別子として無効な値(UUID、URL、特殊文字など)が含まれる列では、ツールはレコード型の代わりに
map<string, T>型を生成します。 - テーブルおよび列のコメントは、使用可能な場合、Avro の
doc属性として保持されます。 - 主キー列はスキーマの
unique属性に記載されます。
SurrealQL スキーマを Avrotize Schema に変換
avrotize surreal2a <path_to_surrealql_schema_file> [--out <path_to_avro_schema_file>] [--namespace <namespace>]
パラメーター:
<path_to_surrealql_schema_file>:DEFINE TABLEおよびDEFINE FIELDステートメントを含む SurrealQL スキーマファイルです。--out:Avrotize Schema ファイルのパスです。省略した場合、出力は stdout に送られます。--namespace:(任意)生成されるレコードの Avro 名前空間です。
変換に関する注意事項:
DEFINE TABLE <name> SCHEMAFULL|SCHEMALESSは、<name>という名前の Avro レコードになります。address.cityなどの SurrealDB のドット区切りフィールドパスはネストされた Avro レコードになり、phones[*].numberなどの配列要素のパスはネストされたレコードの配列になります。- SurrealDB のスカラー型は次のようにマッピングされます:
string-> Avrostring、int->long、float/number->double、bool->boolean、bytes->bytes、datetime->timestamp-millisを持つlong、uuid->uuidを持つstring、decimal-> Avrodecimal(precision38、scale9)を持つbytes。 option<T>は、デフォルト値がnullの null 許容 Avro ユニオン['null', T]になります。array<T>およびset<T>は Avro 配列になります。Avro にはネイティブなセットのセマンティクスがないため、一意性は表現されません。durationおよびgeometryは文字列として表現されます。record<T>参照は文字列のレコード ID として表現されます。Avro のレコード参照は、SurrealDB のレコード ID リンクではなく、埋め込みスキーマをモデル化するためです。
JSON ファイルから Avro スキーマを推論する
avrotize json2a <json_files...> [--out <path>] [--type-name <name>] [--namespace <namespace>] [--sample-size <n>] [--infer-choices] [--choice-depth <n>]
パラメーター:
<json_files...>:分析する1つ以上の JSON ファイルです。JSON 配列、単一オブジェクト、JSONL(JSON Lines)形式に対応しています。応答ファイルからファイルパスを読み込むには、@filelist.txtを使用します。--out:Avro スキーマファイルのパスです。省略した場合、標準出力に出力されます。--type-name:(任意)ルート型の名前です(デフォルト:「Document」)。--namespace:(任意)生成される型の Avro 名前空間です。--sample-size:(任意)サンプリングするレコードの最大数です(0 = すべて、デフォルト:0)。--infer-choices:(任意)判別可能なユニオンを検出し、判別フィールドのデフォルト値を設定した Avro ユニオンとして出力します。--choice-depth:(任意)選択肢の推論における最大ネスト深度です(1 = ルートのみ、2 以上 = ネストされたオブジェクト、デフォルト:1)。
例:
# Infer schema from multiple JSON files
avrotize json2a data1.json data2.json --out schema.avsc --type-name Event --namespace com.example
# Infer schema from JSONL file with discriminated union detection
avrotize json2a events.jsonl --out events.avsc --type-name LogEntry --infer-choices
# Use response file for many input files
avrotize json2a @file_list.txt --out schema.avsc --infer-choices --choice-depth 2
JSON ファイルから JSON Structure スキーマを推論する
avrotize json2s <json_files...> [--out <path>] [--type-name <name>] [--base-id <uri>] [--sample-size <n>] [--infer-choices] [--choice-depth <n>] [--infer-enums]
パラメーター:
<json_files...>:分析する1つ以上の JSON ファイルです。応答ファイルからファイルパスを読み込むには、@filelist.txtを使用します。--out:JSON Structure スキーマファイルのパスです。省略した場合、標準出力に出力されます。--type-name:(任意)ルート型の名前です(デフォルト:「Document」)。--base-id:(任意)$idの生成に使用するベース URI です(デフォルト:「https://example.com/」)。--sample-size:(任意)サンプリングするレコードの最大数です(0 = すべて、デフォルト:0)。--infer-choices:(任意)判別可能なユニオンを検出し、判別フィールドのデフォルト値を設定したchoice型として出力します。--choice-depth:(任意)選択肢の推論における最大ネスト深度です(1 = ルートのみ、2 以上 = ネストされたオブジェクト、デフォルト:1)。--infer-enums:(任意)種類の少ない文字列値の繰り返しから列挙型を検出します。
推論ツールは、次の項目も自動的に検出します:
- 日時パターン:ISO 8601 のタイムスタンプ、日付、時刻は、それぞれ
datetime、date、timeとして型付けされます。 - 必須フィールドと任意フィールド:すべてのレコードに存在するフィールドは必須としてマークされ、まばらに存在するフィールドは任意としてマークされます。
例:
# Basic inference
avrotize json2s data.json --out schema.jstruct.json --type-name Person --base-id https://myapi.example.com/schemas/
# Full inference with choices and enums
avrotize json2s events/*.json --out events.jstruct.json --type-name Event --infer-choices --choice-depth 2 --infer-enums
# Process many files via response file
avrotize json2s @file_list.txt --out schema.jstruct.json --infer-choices --infer-enums
XML ファイルから Avro スキーマを推論する
avrotize xml2a <xml_files...> [--out <path>] [--type-name <name>] [--namespace <namespace>] [--sample-size <n>]
パラメーター:
<xml_files...>:分析する1つ以上の XML ファイルです。応答ファイルからファイルパスを読み込むには、@filelist.txtを使用します。--out:Avro スキーマファイルのパスです。省略した場合、標準出力に出力されます。--type-name:(任意)ルート型の名前です(デフォルト:「Document」)。--namespace:(任意)生成される型の Avro 名前空間です。--sample-size:(任意)サンプリングするドキュメントの最大数です(0 = すべて、デフォルト:0)。
例:
avrotize xml2a config.xml --out config.avsc --type-name Configuration --namespace com.example.config
XML ファイルから JSON Structure スキーマを推論する
avrotize xml2s <xml_files...> [--out <path>] [--type-name <name>] [--base-id <uri>] [--sample-size <n>]
パラメーター:
<xml_files...>:分析する1つ以上の XML ファイルです。応答ファイルからファイルパスを読み込むには、@filelist.txtを使用します。--out:JSON Structure スキーマファイルのパスです。省略した場合、標準出力に出力されます。--type-name:(任意)ルート型の名前です(デフォルト:「Document」)。--base-id:(任意)$idの生成に使用するベース URI です(デフォルト:「https://example.com/」)。--sample-size:(任意)サンプリングするドキュメントの最大数です(0 = すべて、デフォルト:0)。
変換に関する注意事項(すべての推論コマンドに適用されます):
- XML 属性は、
@を前置したフィールドに変換されます(有効な識別子に正規化されます)。 - 混合コンテンツ要素内のテキストコンテンツは、
#textフィールドになります。 - 繰り返される要素は配列として推論されます。
- 構造が異なる複数のファイルは、統合スキーマにマージされます。
- まばらなデータ(一部のレコードにのみ存在するフィールド)は、単一の型にまとめられます。
Avrotize Schema を Kusto テーブル宣言に変換
avrotize a2k <path_to_avro_schema_file> [--out <path_to_kusto_kql_file>] [--record-type <record_type>] [--emit-cloudevents-columns] [--emit-cloudevents-dispatch]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Kusto KQL ファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)Kusto テーブルに変換する Avro レコード型の名前です。--emit-cloudevents-columns:(任意)指定すると、ツールはテーブルに CloudEvents 属性列(___id、___source、___subject、___type、___time)を追加します。--emit-cloudevents-dispatch:(任意)指定すると、ツールはスクリプトまたはデータベースに_cloudevents_dispatchという名前のテーブルを追加します。このテーブルは、CloudEvents の取り込みおよびディスパッチ用テーブルとして機能します。テーブルには、CloudEvents の主要な属性列と、CloudEvents データを格納するdata列があります。Avrotize Schema 内の各テーブルについて、type属性が Avro 型名と一致するイベントをそれぞれのテーブルに対応付ける更新ポリシーが作成されます。
変換に関する注意事項:
- Kusto テーブルにマッピングできるのは Avro の
record型のみです。Avrotize Schema にほかの型(enumやarrayなど)が含まれている場合、ツールはそれらを無視します。 - Avrotize Schema 内で最初に見つかった
record型のみが Kusto テーブルに変換されます。ほかのrecord型は無視されます。変換するrecord型は--record-typeオプションで指定できます。 - レコードのフィールドは Kusto テーブルの列にマッピングされます。レコード、配列、マップであるフィールドは、Kusto テーブルの
dynamic型の列にマッピングされます。
JSON Structure Schema を Kusto テーブル宣言に変換
avrotize s2k <path_to_structure_schema_file> [--out <path_to_kusto_kql_file>] [--record-type <record_type>] [--emit-cloudevents-columns] [--emit-cloudevents-dispatch]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Kusto KQL ファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)Kusto テーブルに変換するレコード型の名前です。--emit-cloudevents-columns:(任意)指定すると、ツールはテーブルに CloudEvents 属性列(___id、___source、___subject、___type、___time)を追加します。--emit-cloudevents-dispatch:(任意)指定すると、ツールはスクリプトまたはデータベースに_cloudevents_dispatchという名前のテーブルを追加します。このテーブルは、CloudEvents の取り込みおよびディスパッチ用テーブルとして機能します。テーブルには、CloudEvents の主要な属性列と、CloudEvents データを格納するdata列があります。JSON Structure Schema 内の各テーブルについて、type属性が型名と一致するイベントをそれぞれのテーブルに対応付ける更新ポリシーが作成されます。
変換に関する注意事項:
- Kusto テーブルにマッピングできるのは JSON Structure の
object型のみです。ほかの型(enum、array、choiceなど)は、テーブルに直接変換できません。 - ツールは、スキーマ内で最初に見つかった
object型を変換します。あるいは、--record-typeで指定された型を使用します。 - オブジェクトのプロパティは Kusto テーブルの列にマッピングされます。複合型(オブジェクト、配列、マップ、セット、タプル、選択肢)は
dynamic型の列にマッピングされます。 - JSON Structure のプリミティブ型は、対応する Kusto スカラー型にマッピングされます。
string、uri、jsonpointer→stringboolean→boolinteger、int8、uint8、int16、uint16、int32→intuint32、int64、uint64→longint128、uint128、decimal→decimalnumber、float、double、float8、binary32、binary64→realdate、datetime、timestamp→datetimetime、duration→timespanuuid→guidbinary→dynamic
Avrotize Schema を Tabular Model Scripting Language(TMSL)に変換する
avrotize a2tsml <path_to_avro_schema_file> [--out <path_to_tmsl_file>] [--record-type <record_type>] [--database-name <database_name>] [--compatibility-level <level>] [--emit-cloudevents-columns]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:TMSL JSON ファイルのパスです。省略した場合、出力は stdout に送られます。--record-type:(任意)単純名または完全修飾名でレコードを選択します。省略した場合、すべてのトップレベルレコードがテーブルとして出力されます。--database-name:(任意)表形式モデルのデータベース名を設定します。デフォルトでは、最初に選択されたレコード名が使用されます。--compatibility-level:(任意)表形式モデルの互換性レベルを設定します。デフォルトは1605です。--emit-cloudevents-columns:(任意)各テーブルに NULL 許容の___type、___source、___id、___time、___subject列を追加します。
変換に関する注意事項:
- 各トップレベルの Avro レコードは TMSL テーブルになり、各フィールドは列になります。
- Avro の
uniqueメタデータは、該当する TMSL 列をキーとして指定します。Avro のforeignKeysメタデータは、参照先のレコードが存在する場合に TMSL モデルのリレーションシップになります。 - プリミティブの数値型、ブール型、文字列型、バイナリ型、10 進数型、日時型は、対応する TMSL データ型にマッピングされます。レコード、配列、マップ、一般的なユニオンは
variantにマッピングされます。 - 結果は、データベースとモデル定義を含む TMSL の
createOrReplaceコマンドです。セマンティックモデルの構造を定義しますが、データソースのパーティションを作成したり、データを読み込んだりはしません。
JSON Structure を Tabular Model Scripting Language(TMSL)に変換する
avrotize s2tsml <path_to_structure_schema_file> [--out <path_to_tmsl_file>] [--record-type <record_type>] [--database-name <database_name>] [--compatibility-level <level>] [--emit-cloudevents-columns]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:TMSL JSON ファイルのパスです。省略した場合、出力は stdout に送られます。--record-type:(任意)出力するオブジェクト型を選択します。省略した場合、変換されたすべてのトップレベルレコードがテーブルとして出力されます。--database-name:(任意)表形式モデルのデータベース名を設定します。デフォルトでは、最初に選択された型名が使用されます。--compatibility-level:(任意)表形式モデルの互換性レベルを設定します。デフォルトは1605です。--emit-cloudevents-columns:(任意)各テーブルに NULL 許容の___type、___source、___id、___time、___subject列を追加します。
変換に関する注意事項:
- コンバーターはまず JSON Structure を Avrotize Schema にマッピングし、その後
a2tsmlと同じテーブル、列、キー、リレーションシップ、型のマッピングを適用します。 - ネストされたオブジェクト、コレクション、選択肢など、表形式の同等機能がない JSON Structure の機能は、
variant列として表現されます。 - 結果は、データベースとモデル定義を含む TMSL の
createOrReplaceコマンドです。セマンティックモデルの構造を定義しますが、データソースのパーティションを作成したり、データを読み込んだりはしません。
Avrotize Schema を SQL Schema に変換する
avrotize a2sql [input] --out <path_to_sql_script> --dialect <dialect>
パラメーター:
input:変換する Avrotize スキーマファイルのパスです(省略した場合は stdin から読み込まれます)。--out:変換結果を書き込む SQL スクリプトファイルのパスです。--dialect:変換先の SQL ダイアレクト(データベースの種類)です。次のダイアレクトに対応しています:mysql、mariadb、postgres、sqlserver、oracle、sqlite、bigquery、snowflake、redshift、db2
--emit-cloudevents-columns:(任意)SQL テーブルに CloudEvents 列を追加します。
各 SQL ダイアレクトの詳しい変換ルールと型マッピングについては、SQL Conversion Notes ドキュメントを参照してください。
Avrotize スキーマを SurrealQL スキーマに変換する
avrotize a2surreal <path_to_avro_schema_file> [--out <path_to_surrealql_schema_file>] [--record-type <record_type>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルです。--out:SurrealQL スキーマファイルのパスです。省略すると、標準出力に出力されます。--record-type:(任意)指定した Avro レコードのみを変換します。
変換に関する注意事項:
- 各 Avro レコードは
DEFINE TABLE <name> SCHEMAFULLに変換されます。 - ネストされた Avro レコードは、SurrealDB のドット区切りのフィールドパスとして出力されます。
- Avro の配列は
array<T>に変換されます。レコードの配列は、項目フィールドの定義を[*]付きで出力します。 nullと 1 つの型からなる Avro の nullable なユニオンはoption<T>に変換されます。- Avro の
timestamp-millis、uuid、decimal論理型は、それぞれdatetime、uuid、decimalに変換されます。
JSON Structure スキーマを SQL スキーマに変換する
avrotize s2sql [input] --out <path_to_sql_script> --dialect <dialect> [--emit-cloudevents-columns]
パラメーター:
input:変換する JSON Structure スキーマファイルのパスです(省略した場合は標準入力から読み取ります)。--out:変換結果を書き込む SQL スクリプトファイルのパスです。--dialect:対象とする SQL 方言(データベースの種類)です。次の方言に対応しています:mysql、mariadb、postgres、sqlserver、oracle、sqlite、bigquery、snowflake、redshift、db2
--emit-cloudevents-columns:(任意)SQL テーブルに CloudEvents の列を追加します。
変換に関する注意事項:
- このツールは、JSON Structure スキーマをさまざまなデータベース方言の SQL DDL 文に変換します。
- JSON Structure のプリミティブ型(string、int8-128、uint8-128、float、double、decimal、binary、date、datetime、uuid など)は、各方言に適した SQL 型にマッピングされます。
- 複合型(array、set、map、object、choice、tuple)は、通常、対象データベースの JSON/JSONB 列または同等の型にマッピングされます。
- JSON Structure スキーマで必須のプロパティは、NULL を許容しない列となり、主キーに使用されます。
- JSON Structure スキーマの
namespaceプロパティとnameプロパティを使用して、テーブル名が構成されます。 maxLength、precision、scaleなどの型注釈は、列のコメントに保持されます。
JSON Structure から変換する際の各 SQL 方言の詳細な変換ルールと型のマッピングについては、SQL 変換に関する注意事項 ドキュメントを参照してください。
Avrotize スキーマを MongoDB スキーマに変換する
avrotize a2mongo <path_to_avro_schema_file> [--out <path_to_mongodb_schema>] [--emit-cloudevents-columns]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合は、標準入力からファイルを読み取ります。--out:変換結果を書き込む MongoDB スキーマファイルのパスです。--emit-cloudevents-columns:(任意)設定すると、MongoDB スキーマに CloudEvents 属性列を追加します。
変換に関する注意事項:
- Avro レコード型のフィールドは、MongoDB スキーマのフィールドにマッピングされます。レコード、配列、マップのフィールドは、
object型のフィールドにマッピングされます。 - 出力される MongoDB スキーマファイルは、指定したスキーマでコレクションを作成するために MongoDB の
mongoimportツールで使用できる JSON ファイルです。
新しく追加されたコマンドの「Convert ...」セクションは次のとおりです:
Avrotize スキーマを Cassandra スキーマに変換する
avrotize a2cassandra [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルのパスです(省略した場合は標準入力から読み取ります)。--out:Cassandra スキーマの出力先パスです(必須)。--emit-cloudevents-columns:Cassandra スキーマに CloudEvents の列を追加します(任意。デフォルトは false)。
Cassandra の詳細な変換に関する注意事項については、NoSQL 変換に関する注意事項を参照してください。
JSON Structure スキーマを Cassandra スキーマに変換する
avrotize s2cassandra [input] --out <output_file> [--emit-cloudevents-columns]
パラメーター:
input:JSON Structure スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:Cassandra CQL スキーマファイルの出力先パス(必須)。--emit-cloudevents-columns:Cassandra スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
変換に関する注意事項:
- このツールは JSON Structure スキーマを Cassandra CQL DDL 文に変換します。
- JSON Structure のプリミティブ型は、適切な Cassandra 型にマッピングされます(int32 → int、string → text、uuid → uuid など)。
- 必須プロパティは、テーブルの PRIMARY KEY の構築に使用されます。
- 複合型(array、map、object)は、Cassandra では text 列として保存されます。
Cassandra の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを DynamoDB スキーマに変換する
avrotize a2dynamodb [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:DynamoDB スキーマの出力先パス(必須)。--emit-cloudevents-columns:DynamoDB スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
DynamoDB の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを Elasticsearch スキーマに変換する
avrotize a2es [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:Elasticsearch スキーマの出力先パス(必須)。--emit-cloudevents-columns:Elasticsearch スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
Elasticsearch の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを CouchDB スキーマに変換する
avrotize a2couchdb [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:CouchDB スキーマの出力先パス(必須)。--emit-cloudevents-columns:CouchDB スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
CouchDB の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを Neo4j スキーマに変換する
avrotize a2neo4j [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:Neo4j スキーマの出力先パス(必須)。--emit-cloudevents-columns:Neo4j スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
Neo4j の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを Firebase スキーマに変換する
avrotize a2firebase [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:Firebase スキーマの出力先パス(必須)。--emit-cloudevents-columns:Firebase スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
Firebase の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを CosmosDB スキーマに変換する
avrotize a2cosmos [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:CosmosDB スキーマの出力先パス(必須)。--emit-cloudevents-columns:CosmosDB スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
CosmosDB の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize スキーマを HBase スキーマに変換する
avrotize a2hbase [input] --out <output_directory> [--emit-cloudevents-columns]
input:Avrotize スキーマファイルへのパス(省略した場合は標準入力から読み込みます)。--out:HBase スキーマの出力先パス(必須)。--emit-cloudevents-columns:HBase スキーマに CloudEvents の列を追加します(任意、デフォルト:false)。
HBase の詳細な変換に関する注意事項は、NoSQL Conversion Notes を参照してください。
Avrotize Schema を空の Parquet ファイルに変換する
avrotize a2pq <path_to_avro_schema_file> [--out <path_to_parquet_schema_file>] [--record-type <record-type-from-avro>] [--emit-cloudevents-columns]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合は、標準入力からファイルを読み込みます。--out:変換結果を書き込む Parquet スキーマファイルのパスです。省略した場合は、標準出力に出力します。--record-type:(任意)Parquet スキーマに変換する Avro レコード型の名前です。--emit-cloudevents-columns:(任意)指定すると、ツールは Parquet スキーマに CloudEvents の属性列(__id、__source、__subject、__type、__time)を追加します。
変換に関する注意事項:
- 出力される Parquet ファイルにはスキーマのみが含まれ、データ行は含まれません。
- このツールは、単一の
record型を記述する Avrotize Schema のみを Parquet ファイルに書き込めます。Avrotize Schema にトップレベルのユニオンが含まれている場合は、出力するレコード型を指定するために--record-typeオプションを使用する必要があります。 - レコードのフィールドは Parquet ファイルの列にマッピングされます。配列型およびレコード型のフィールドは、Parquet のネスト型にマッピングされます。Avro の型ユニオンは、ここで使用している PyArrow ライブラリがサポートしていないため、Parquet のユニオンではなく構造体にマッピングされます。
Avrotize Schema を Iceberg スキーマに変換する
avrotize a2ib <path_to_avro_schema_file> [--out <path_to_iceberg_schema_file>] [--record-type <record-type-from-avro>] [--emit-cloudevents-columns] [--format schema|arrow]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合は、標準入力からファイルを読み込みます。--out:変換結果を書き込む Iceberg スキーマファイルのパスです。省略した場合は、標準出力に出力します。--record-type:(任意)Iceberg スキーマに変換する Avro レコード型の名前です。--emit-cloudevents-columns:(任意)指定すると、ツールは Iceberg スキーマに CloudEvents の属性列(__id、__source、__subject、__type、__time)を追加します。--format:(任意)出力形式です。schema(デフォルト)では、Iceberg Table Spec Appendix C に準拠した JSON を出力します。arrowでは、バイナリ形式の Arrow IPC シリアライズ済みスキーマを出力します。
変換に関する注意事項:
- 出力される Iceberg ファイルにはスキーマのみが含まれ、データ行は含まれません。
- このツールは、単一の
record型を記述する Avrotize Schema のみを Iceberg ファイルに書き込めます。Avrotize Schema にトップレベルのユニオンが含まれている場合は、出力するレコード型を指定するために--record-typeオプションを使用する必要があります。 - レコードのフィールドは Iceberg ファイルの列にマッピングされます。配列型およびレコード型のフィールドは、Iceberg のネスト型にマッピングされます。Avro の型ユニオンは、ここで使用している PyArrow ライブラリがサポートしていないため、Iceberg のユニオンではなく構造体にマッピングされます。
JSON 構造を Iceberg スキーマに変換
avrotize s2ib <path_to_structure_schema_file> [--out <path_to_iceberg_schema_file>] [--record-type <record-type-from-structure>] [--emit-cloudevents-columns] [--format schema|arrow]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Iceberg スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)Iceberg スキーマに変換する、definitions 内のレコード型の名前です。--emit-cloudevents-columns:(任意)設定すると、ツールは Iceberg スキーマに CloudEvents 属性列___id、___source、___subject、___type、___timeを追加します。--format:(任意)出力形式です。schema(デフォルト)は Iceberg Table Spec Appendix C に準拠した JSON を出力します。arrowはバイナリの Arrow IPC シリアライズ済みスキーマを出力します。
変換に関する注意事項:
- 出力される Iceberg ファイルにはスキーマのみが含まれ、データ行は含まれません。
- このツールは、トップレベルに
type: "object"を持つ JSON Structure スキーマをサポートします。スキーマに$refが含まれている場合、またはレコード型が definitions 内にある場合は、--record-typeオプションで出力する型を指定できます。 - JSON Structure の型は、次のように Iceberg の型にマッピングされます。
- プリミティブ型:
string→ StringType、boolean→ BooleanType、数値型(int8-128、uint8-128、float、double)→ 対応する IntegerType/LongType/FloatType/DoubleType - 拡張型:
binary/bytes→ BinaryType、date→ DateType、time→ TimeType、datetime/timestamp→ TimestampType、duration→ LongType(マイクロ秒)、decimal→ DecimalType(精度/スケール指定あり)、uuid/uri/jsonpointer→ StringType - 複合型:
object→ StructType、array/set→ ListType、map→ MapType、tuple→ インデックス付きフィールドを持つ StructType - 選択型:代替フィールドを持つ StructType にマッピングされます(Iceberg はネイティブのユニオン型をサポートしていません)。
- プリミティブ型:
precision、scaleなどの型注釈や検証制約は、該当する場合に保持されます。$extends機能がサポートされており、変換時に基本型のプロパティが含まれます。- 必須プロパティと任意プロパティは、Iceberg の
requiredフィールドフラグを使って処理されます。
JSON 構造を空の Parquet ファイルに変換
avrotize s2pq <path_to_structure_schema_file> [--out <path_to_parquet_file>] [--record-type <record-type-from-structure>] [--emit-cloudevents-columns] [--format parquet|schema]
<path_to_structure_schema_file>:変換する JSON 構造スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:変換結果を書き込む Parquet ファイルのパスです。省略した場合、出力は stdout に送られます。--record-type:(任意)Parquet スキーマに変換する、definitions内のレコード型の名前です。--emit-cloudevents-columns:(任意)指定すると、ツールは CloudEvents の属性列___id、___source、___subject、___type、___timeを Parquet スキーマに追加します。--format:(任意)出力形式です。parquet(デフォルト)では、フッターにスキーマを格納した空の Parquet ファイルを書き込みます。schemaでは、派生したスキーマを確認用の JSON として書き込みます。
注:
- 出力される Parquet ファイルにはスキーマのみが含まれ、データ行はありません。
- このツールは、トップレベルに
type: "object"がある JSON 構造スキーマをサポートします。スキーマに$refが含まれる場合、またはレコード型がdefinitionsにある場合は、--record-typeオプションを使って出力する型を指定できます。 - JSON 構造の型は、次のように Parquet(PyArrow)型にマッピングされます。
- プリミティブ型:
string→ string、boolean→ bool、サイズ指定の整数型(int8…int64、uint8…uint64)→ 対応する PyArrow 整数型、float/float32→ float32、double/float64→ float64、decimal→precision/scaleを反映した decimal128、bytes/binary→ binary、uuid/uri/jsonpointer→ string。 - 時間型:
date→ date32、time→ time64[us]、datetime/timestamp→ timestamp[us]、duration→ int64(マイクロ秒)。 - 複合型:
object→ struct、array/set→ list、map→ map、tuple→ インデックス付きフィールドを持つ struct。プロパティのない(オープンな)objectはmap<string, string>になります。 - 選択型:省略可能な選択肢を持つ struct にマッピングされます(Parquet にはネイティブの union 型がありません)。
- プリミティブ型:
$extends機能がサポートされており、変換時に基底型のプロパティが含まれます。- 必須プロパティは null 非許容列として出力され、それ以外はすべて null 許容になります。
JSON Type Definition(JTD)を Avrotize スキーマに変換
avrotize jtd2a <path_to_jtd_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_jtd_file>:変換する JSON Type Definition ファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:変換結果を書き込む Avrotize スキーマファイルのパスです。省略した場合、出力は stdout に送られます。--namespace:(任意)生成される Avro レコードと列挙型の名前空間です。
変換に関する注記:
- JTD の
type形式は Avro プリミティブ型にマッピングされます。timestampはlogicalType: "timestamp-millis"を持つ Avrolongとしてエンコードされます。 - JTD の
enumシンボルは、必要に応じて Avro 名に適合するようにサニタイズされます。ラウンドトリップに備え、元の JTD シンボルはjtdEnumSymbolsメタデータに保持されます。 - JTD の
propertiesは必須の Avro レコードフィールドになります。optionalPropertiesはdefault: nullを持つ null 許容の Avro フィールドになります。 - JTD の
elementsとvaluesは Avro の配列とマップにマッピングされます。definitions/refは名前付き Avro 型にマッピングされます。 - JTD の
discriminator/mappingは、レコードの Avro union にマッピングされます。各分岐には、単一シンボルの列挙型フィールドとして識別子が含まれ、ラウンドトリップに備えてjtdDiscriminator/jtdMappingKeyメタデータが付与されます。 - Avro には JTD の
additionalPropertiesに直接対応する機能がありません。この設定はjtdAdditionalPropertiesメタデータとして保持されますが、Avro では強制されません。
Avrotize Schema を JSON Type Definition(JTD)に変換
avrotize a2jtd <path_to_avro_schema_file> [--out <path_to_jtd_file>] [--record-type <record-type-from-avro>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む JSON Type Definition ファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)ファイルに複数の名前付き型が含まれる場合に、JTD のルートとして使用する Avro レコード型の名前です。
変換に関する注意事項:
- Avro のプリミティブ型は、最も近い JTD の
typeに対応付けられます。jtdTypeなどのコンバーターのメタデータが存在する場合は、それを使用して、より狭い JTD の整数型や浮動小数点型を復元します。 logicalType: "timestamp-millis"を持つ Avro のlongは、JTD のtimestampに対応付けられます。- null 許容の Avro union は
nullable: trueに対応付けられます。default: nullを持つ null 許容フィールドは、JTD のoptionalPropertiesに対応付けられます。 - 一般的な Avro union に対応するネイティブな JTD はありません。
jtd2aが出力した discriminator union のみが、JTD のdiscriminator/mappingにラウンドトリップされます。それ以外の union はメタデータとして保持されます。
JSON Type Definition(JTD)を JSON Structure に変換
avrotize jtd2s <path_to_jtd_file> [--out <path_to_structure_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_jtd_file>:変換する JSON Type Definition ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む JSON Structure ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)中間 Avro レコードおよび列挙型に使用する名前空間です。
変換に関する注意事項:
- この変換では Avrotize Schema を介するため、JTD から Avro への変換に関する制限も適用されます。
JSON Structure を JSON Type Definition(JTD)に変換
avrotize s2jtd <path_to_structure_file> [--out <path_to_jtd_file>] [--record-type <record-type-from-structure>]
パラメーター:
<path_to_structure_file>:変換する JSON Structure ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む JSON Type Definition ファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)JTD のルートとして使用する Structure/Avro レコード型の名前です。
変換に関する注意事項:
- この変換では Avrotize Schema を介するため、JTD に対応するものがない JSON Structure の機能は、簡略化されるかメタデータとして出力される場合があります。
Parquet スキーマを Avrotize Schema に変換
avrotize pq2a <path_to_parquet_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_parquet_file>:変換する Parquet ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)Parquet ファイルで名前空間が定義されていない場合に、Avrotize Schema で使用する名前空間です。
変換に関する注意事項:
- ツールは Parquet ファイルからスキーマを読み込み、Avrotize Schema に変換します。Parquet ファイル内のデータは読み込まれず、変換されません。
- Parquet スキーマのフィールドは Avrotize Schema のフィールドに対応付けられます。ネストされたフィールドは、Avrotize Schema のネストされたレコードに対応付けられます。
CSV ファイルを Avrotize Schema に変換
avrotize csv2a <path_to_csv_file> [--out <path_to_avro_schema_file>] [--namespace <avro_schema_namespace>]
パラメーター:
<path_to_csv_file>:変換する CSV ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。省略した場合、出力は標準出力に送られます。--namespace:(任意)CSV ファイルで名前空間が定義されていない場合に、Avrotize Schema で使用する名前空間です。
変換に関する注意事項:
- ツールは CSV ファイルを読み込み、Avrotize Schema に変換します。CSV ファイルの先頭行は、フィールド名を含むヘッダー行とみなされます。
- CSV ファイルのフィールドは Avrotize Schema のフィールドに対応付けられます。ツールは CSV ファイル内のデータからフィールドの型を推定します。
Kafka Connect Schema を Avrotize Schema に変換
avrotize kstruct2a [input] --out <path_to_avro_schema_file>
パラメーター:
input:変換する Kafka Struct ファイルのパスです(省略した場合は標準入力から読み込みます)。--out:変換結果を書き込む Avrotize Schema ファイルのパスです。--kstruct:非推奨:Kafka Struct ファイルのパスです(後方互換性のため)。
変換に関する注意:
- このツールは Kafka Struct 定義を Avrotize Schema に変換し、Kafka のデータ型を対応する Avro の型にマッピングします。
- Kafka Struct は通常、Kafka Connect やその他の Kafka ベースのアプリケーションのデータ構造を定義するために使用されます。このコマンドを使うと、これらの定義を Avro に変換して、各種のシリアライズツールやスキーマレジストリツールでさらに利用できるため、相互運用性が向上します。
Avrotize Schema を C# クラスに変換
avrotize a2cs <path_to_avro_schema_file> [--out <path_to_csharp_dir>] [--namespace <csharp_namespace>] [--avro-annotation] [--system_text_json_annotation] [--newtonsoft-json-annotation] [--pascal-properties] [--target-framework <tfm>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合は、ファイルを標準入力から読み込みます。--out:C# クラスを書き込むディレクトリのパスです。必須です。--namespace:(任意)C# クラスで使用する名前空間です。--avro-annotation:(任意)Avro アノテーションを使用します。--system_text_json_annotation:(任意)System.Text.Json アノテーションを使用します。--newtonsoft-json-annotation:(任意)Newtonsoft.Json アノテーションを使用します。--pascal-properties:(任意)プロパティに PascalCase を使用します。--target-framework:(任意)生成する.csprojの対象フレームワーク(例:net8.0、またはマルチターゲットの場合はnet8.0;net10.0)です。既定値はnet10.0です。
変換に関する注意:
- このツールは Avrotize Schema から C# クラスを生成します。Avrotize Schema の各レコード型は C# クラスに変換されます。
- レコードのフィールドは、C# クラスのプロパティにマッピングされます。ネストされたレコードは、C# クラス内のネストされたクラスにマッピングされます。
- このツールは、C# クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションは Avro アノテーションを追加し、--system_text_json_annotationオプションは System.Text.Json アノテーションを追加し、--newtonsoft-json-annotationオプションは Newtonsoft.Json アノテーションを追加します。 --pascal-propertiesオプションは、プロパティの命名規則を PascalCase に変更します。
Avrotize Schema を Java クラスに変換
avrotize a2java <path_to_avro_schema_file> [--out <path_to_java_dir>] [--package <java_package>] [--avro-annotation] [--jackson-annotation] [--pascal-properties]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合は、ファイルを標準入力から読み込みます。--out:Java クラスを書き込むディレクトリのパスです。必須です。--package:(任意)Java クラスで使用するパッケージです。--avro-annotation:(任意)Avro アノテーションを使用します。--jackson-annotation:(任意)Jackson アノテーションを使用します。--pascal-properties:(任意)プロパティに PascalCase を使用します。
変換に関する注意:
- このツールは Avrotize Schema から Java クラスを生成します。Avrotize Schema の各レコード型は Java クラスに変換されます。
- レコードのフィールドは、Java クラスのプロパティにマッピングされます。ネストされたレコードは、Java クラス内のネストされたクラスにマッピングされます。
- このツールは、Java クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションは Avro アノテーションを追加し、--jackson-annotationオプションは Jackson アノテーションを追加します。 --pascal-propertiesオプションは、プロパティの命名規則を PascalCase に変更します。
Avrotize Schema を Python クラスに変換する
avrotize a2py <path_to_avro_schema_file> [--out <path_to_python_dir>] [--package <python_package>] [--dataclasses-json-annotation] [--avro-annotation]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:Python クラスの出力先ディレクトリのパスです。必須です。--package:(任意)Python クラスで使用するパッケージです。--dataclasses-json-annotation:(任意)dataclasses-json のアノテーションを使用します。--avro-annotation:(任意)Avro のアノテーションを使用します。
変換に関する注意事項:
- このツールは Avrotize Schema から Python クラスを生成します。Avrotize Schema の各レコード型は Python クラスに変換されます。
- レコードのフィールドは Python クラスのプロパティにマッピングされます。ネストされたレコードは Python クラス内のネストされたクラスにマッピングされます。
- このツールでは、Python クラスのプロパティにアノテーションを追加できます。
--dataclasses-json-annotationオプションは dataclasses-json のアノテーションを追加し、--avro-annotationオプションは Avro のアノテーションを追加します。
Avrotize Schema を TypeScript クラスに変換する
avrotize a2ts <path_to_avro_schema_file> [--out <path_to_typescript_dir>] [--package <typescript_package>] [--avro-annotation] [--typedjson-annotation]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:TypeScript クラスの出力先ディレクトリのパスです。必須です。--package:(任意)TypeScript クラスで使用するパッケージです。--avro-annotation:(任意)Avro のアノテーションを使用します。--typedjson-annotation:(任意)TypedJSON のアノテーションを使用します。
変換に関する注意事項:
- このツールは Avrotize Schema から TypeScript クラスを生成します。Avrotize Schema の各レコード型は TypeScript クラスに変換されます。
- レコードのフィールドは TypeScript クラスのプロパティにマッピングされます。ネストされたレコードは TypeScript クラス内のネストされたクラスにマッピングされます。
type、namespace、module、readonlyなどの TypeScript の文脈依存キーワードは、フィールド名として使用された場合、そのまま保持されます。- このツールでは、TypeScript クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションは Avro のアノテーションを追加し、--typedjson-annotationオプションは TypedJSON のアノテーションを追加します。
JSON Structure を TypeScript クラスに変換
avrotize s2ts <path_to_structure_schema_file> [--out <path_to_typescript_dir>] [--package <typescript_package>] [--typedjson-annotation] [--avro-annotation]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:TypeScript クラスの出力先ディレクトリのパスです。必須です。--package:(任意)生成するプロジェクトの TypeScript パッケージ名です。--typedjson-annotation:(任意)JSON シリアル化をサポートする TypedJSON アノテーションを使用します。--avro-annotation:(任意)埋め込み Structure スキーマを含む Avro バイナリシリアル化のサポートを追加します。
変換に関する注意事項:
- このツールは、JSON Structure スキーマから TypeScript クラスを生成します。JSON Structure スキーマ内の各オブジェクト型が TypeScript クラスに変換されます。
- JSON Structure Core のすべての型に対応しています。具体的には、以下のとおりです。
- プリミティブ型:string、number、boolean、null
- 拡張型:binary、int8-128、uint8-128、float8/float/double、decimal、date、datetime、time、duration、uuid、uri、jsonpointer
- 複合型:object、array、set、map、tuple、any、choice(ユニオン)
- JSON Structure の機能に対応しています。
- $ref 参照:型参照が解決され、個別のクラスとして生成されます。
- $extends 継承:基底クラスのプロパティが派生クラスに含まれます。
- $offers/$uses アドイン:アドインのプロパティが、それを使用するクラスにマージされます。
- 抽象型:TypeScript の
abstractキーワードでマークされます。 - 必須/任意のプロパティ:必須プロパティは非 null 許容、任意プロパティは null 許容になります。
- Choice 型:TypeScript のユニオン型に変換されます。
- 生成されるプロジェクトには、以下が含まれます。
src/ディレクトリ内の TypeScript ソースファイル- 依存関係を記述した
package.json - TypeScript のコンパイル用
tsconfig.json .gitignoreファイル- 生成されたすべての型をエクスポートする
index.ts
- TypeScript コードは
npm run buildでコンパイルできます(事前にnpm installが必要です)。 - JSON Structure の処理について詳しくは、jsonstructure.md を参照してください。
Avrotize Schema を JavaScript クラスに変換
avrotize a2js <path_to_avro_schema_file> [--out <path_to_javascript_dir>] [--package <javascript_package>] [--avro-annotation]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:JavaScript クラスの出力先ディレクトリのパスです。必須です。--package:(任意)JavaScript クラスで使用するパッケージです。--avro-annotation:(任意)Avro アノテーションを使用します。
変換に関する注意事項:
- このツールは、Avrotize Schema から JavaScript クラスを生成します。Avrotize Schema 内の各レコード型が JavaScript クラスに変換されます。
- レコードの各フィールドは、JavaScript クラスのプロパティにマッピングされます。ネストされたレコードは、JavaScript クラス内のネストされたクラスにマッピングされます。
- JavaScript クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションを指定すると、Avro アノテーションが追加されます。
Avrotize Schema を C++ クラスに変換
avrotize a2cpp <path_to_avro_schema_file> [--out <path_to_cpp_dir>] [--namespace <cpp_namespace>] [--avro-annotation] [--json-annotation]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:C++ クラスの出力先ディレクトリのパスです。必須です。--namespace:(任意)C++ クラスで使用する名前空間です。--avro-annotation:(任意)Avro アノテーションを使用します。--json-annotation:(任意)JSON アノテーションを使用します。--xml-annotation:(任意)encoding/xmlタグと XML シリアル化を使用します。
変換に関する注意事項:
-
このツールは、Avrotize Schema から C++ クラスを生成します。Avrotize Schema 内の各レコード型が C++ クラスに変換されます。
-
レコードの各フィールドは、C++ クラスのプロパティにマッピングされます。ネストされたレコードは、C++ クラス内のネストされたクラスにマッピングされます。
-
C++ クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションで Avro アノテーションを、--json-annotationオプションで JSON アノテーションを、--xml-annotationオプションで XML アノテーションを追加します。
Avrotize スキーマを Go クラスに変換する
avrotize a2go <path_to_avro_schema_file> [--out <path_to_go_dir>] [--package <go_package>] [--avro-annotation] [--json-annotation] [--xml-annotation] [--package-site <go_package_site>] [--package-username <go_package_username>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:Go クラスを書き込むディレクトリのパスです。必須です。--package:(任意)Go クラスで使用するパッケージです。--package-site:(任意)Go クラスで使用するパッケージサイトです。--package-username:(任意)Go クラスで使用するパッケージのユーザー名です。--avro-annotation:(任意)Avro アノテーションを使用します。--json-annotation:(任意)JSON アノテーションを使用します。
変換に関する注意事項:
- このツールは Avrotize スキーマから Go クラスを生成します。Avrotize スキーマ内の各レコード型は、Go クラスに変換されます。
- レコードのフィールドは、Go クラスのプロパティに割り当てられます。ネストされたレコードは、Go クラス内のネストされたクラスに割り当てられます。
- このツールでは、Go クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションは Avro アノテーションを追加し、--json-annotationオプションは JSON アノテーションを追加します。
Avrotize スキーマを Rust クラスに変換する
avrotize a2rust <path_to_avro_schema_file> [--out <path_to_rust_dir>] [--package <rust_package>] [--avro-annotation] [--serde-annotation]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:Rust クラスを書き込むディレクトリのパスです。必須です。--package:(任意)Rust クラスで使用するパッケージです。--avro-annotation:(任意)Avro アノテーションを使用します。--serde-annotation:(任意)Serde アノテーションを使用します。
変換に関する注意事項:
- このツールは Avrotize スキーマから Rust クラスを生成します。Avrotize スキーマ内の各レコード型は、Rust クラスに変換されます。
- レコードのフィールドは、Rust クラスのプロパティに割り当てられます。ネストされたレコードは、Rust クラス内のネストされたクラスに割り当てられます。
- このツールでは、Rust クラスのプロパティにアノテーションを追加できます。
--avro-annotationオプションは Avro アノテーションを追加し、--serde-annotationオプションは Serde アノテーションを追加します。
JSON Structure を C++ クラスに変換する
avrotize s2cpp <path_to_structure_file> --out <path_to_cpp_dir> [--namespace <cpp_namespace>] [--json-annotation]
パラメーター:
<path_to_structure_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:C++ クラスを書き込むディレクトリのパスです。必須です。--namespace:(任意)C++ クラスで使用する名前空間です。--json-annotation:(任意)JSON シリアライズのサポートを含めます(デフォルト:true)。
変換に関する注意事項:
- このツールは JSON Structure スキーマから C++ クラスを生成します。JSON Structure スキーマ内の各オブジェクト型は、C++ クラスに変換されます。
- オブジェクトのフィールドは、C++ クラスのプロパティに割り当てられます。ネストされたオブジェクトは、ネストされたクラスに割り当てられます。
- このツールは、プリミティブ型(string、number、boolean)、拡張型(int8-128、uint8-128、float、double、decimal、binary、date、datetime、time、duration、uuid、uri)、複合型(object、array、set、map、tuple、choice)を含む、すべての JSON Structure Core 型をサポートしています。
- $ref 型参照、名前空間、定義、コンテナー型エイリアスなど、JSON Structure 固有の機能もサポートしています。
- 生成されたコードには、簡単に統合できるように、CMake ビルドファイルと vcpkg による依存関係管理が含まれています。
JSON StructureをRustクラスに変換
avrotize s2rust <path_to_structure_schema_file> [--out <path_to_rust_dir>] [--package <rust_package>] [--json-annotation]
パラメーター:
<path_to_structure_schema_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:Rustクラスの出力先ディレクトリのパスです。必須です。--package:(任意)Rustクラスで使用するパッケージ名です。--json-annotation:(任意)シリアライズをサポートするため、Serde JSONアノテーションを使用します。
変換に関する注意事項:
- このツールは、JSON StructureスキーマからRustの構造体と列挙型を生成します。JSON Structureスキーマ内の各オブジェクト型はRustの構造体に変換されます。
- オブジェクトのフィールドは、適切なRust型を持つ構造体フィールドにマッピングされます。ネストされたオブジェクトはネストされた構造体にマッピングされます。
- JSON Structure Coreのすべての型がサポートされています:
- プリミティブ型:string、number、boolean、null
- 拡張型:binary、int8-128、uint8-128、float8/float/double、decimal、date、datetime、time、duration、uuid、uri、jsonpointer
- 複合型:object、array、set、map、tuple、any、choice(判別共用体)
- JSON Structure固有の機能がサポートされています:
- 名前空間と定義
- 型参照($ref)
- 必須および任意のプロパティ
- 抽象型
- 拡張($extends)
--json-annotationオプションを指定すると、JSONのシリアライズとデシリアライズ用のSerde deriveマクロが追加されます。- 生成されるコードには、構造体の作成とシリアライズ(アノテーションが有効な場合)を検証する単体テストが埋め込まれています。
JSON StructureをGoクラスに変換
avrotize s2go <path_to_structure_file> --out <path_to_go_dir> [--package <go_package>] [--json-annotation] [--avro-annotation] [--xml-annotation] [--package-site <package_site>] [--package-username <username>]
パラメーター:
<path_to_structure_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:Go構造体の出力先ディレクトリのパスです。必須です。--package:(任意)Goコードで使用するパッケージ名です。--json-annotation:(任意)encoding/json用のJSON構造体タグを追加します。--xml-annotation:(任意)encoding/xmlタグとXMLシリアライズを追加します。--avro-annotation:(任意)Avro構造体タグを追加します。--package-site:(任意)Goモジュールのパッケージサイトです(例:github.com)。--package-username:(任意)Goモジュールのユーザー名または組織名です。
変換に関する注意事項:
- このツールは、JSON StructureスキーマからGo構造体を生成します。各オブジェクト型はGo構造体に変換されます。
- JSON Structureのプリミティブ型はGoの型にマッピングされます。
date、time、datetimeなどの拡張型はtime.Timeにマッピングされます。 - 整数型(int8、int16、int32、int64、uint8など)は、対応するGoの整数型にマッピングされます。
- choice型は、柔軟性を確保するためinterface{}型として生成されます。
- このツールは、go.modファイル、構造体定義、ヘルパー関数、単体テストを含む完全なGoモジュールを生成します。
- 生成されるコードには、アノテーションが有効な場合、JSONのシリアライズとデシリアライズ用のメソッドが含まれます。
JSON StructureをJavaクラスに変換する
avrotize s2java <path_to_structure_schema_file> [--out <path_to_java_dir>] [--package <java_package>] [--jackson-annotation] [--pascal-properties]
パラメーター:
<path_to_structure_schema_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:生成したJavaクラスを書き込むディレクトリのパスです。必須です。--package:(任意)生成するクラスのJavaパッケージ名です。--jackson-annotation:(任意)JSONシリアライズにJacksonアノテーションを使用します(デフォルト:true)。--pascal-properties:(任意)プロパティ名にPascalCaseを使用します。
変換に関する注意:
- このツールはJSON StructureスキーマからJavaクラスを生成します。各オブジェクト型は、getter/setterメソッドを持つJavaクラスに変換されます。
- JSON Structureのプリミティブ型はJava型にマッピングされます。
date、time、datetimeなどの拡張型は、LocalDate、LocalTime、Instantにマッピングされます。 - 整数型(int8-int64、uint8-uint64)は、対応するJava型にマッピングされます。
uint64は、全範囲をサポートするためにBigIntegerを使用します。 - Choice型(判別可能なユニオン)では、
@JsonTypeInfoと@JsonSubTypesアノテーションを使用したJacksonのポリモーフィズムが使われます。 - Tuple型は、
@JsonFormat(shape = Shape.ARRAY)を使用してJSON配列としてシリアライズされます。 - このツールは、Jackson依存関係を含むpom.xmlを備えた完全なMavenプロジェクトを生成します。
- 生成されたクラスには、
equals()とhashCode()の実装が含まれます。
JSON StructureをJavaScriptクラスに変換する
avrotize s2js <path_to_structure_schema_file> [--out <path_to_js_dir>] [--package <package_name>] [--avro-annotation]
パラメーター:
<path_to_structure_schema_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:生成したJavaScriptクラスを書き込むディレクトリのパスです。必須です。--package:(任意)生成するクラスのパッケージ名です。--avro-annotation:(任意)Avroバイナリシリアライズのサポートを追加します。
変換に関する注意:
- このツールは、型を完全にサポートしたJavaScript ES6クラスをJSON Structureスキーマから生成します。
- JSON Structureのプリミティブ型はJavaScript型にマッピングされます。
date、time、datetimeなどの拡張型は、Dateオブジェクトまたは文字列として扱われます。 - 整数型は、サイズに応じてJavaScriptのNumberまたはBigIntにマッピングされます。
- Choice型は、ファクトリーメソッドを備えたユニオン型クラスとして生成されます。
- Tuple型は、固定長の配列として生成されます。
- このツールは、package.jsonを含む完全なnpmパッケージを生成します。
- 生成されたクラスには、シリアライズ/デシリアライズメソッドが含まれます。また、有効にした場合はオプションでAvroもサポートされます。
AvrotizeスキーマをDatapackageスキーマに変換する
avrotize a2dp <path_to_avro_schema_file> [--out <path_to_datapackage_file>] [--record-type <record-type-from-avro>]
パラメーター:
<path_to_avro_schema_file>:変換するAvrotize Schemaファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込むDatapackageスキーマファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)Datapackageスキーマに変換するAvroレコード型の名前です。
変換に関する注意:
- このツールはAvrotize SchemaからDatapackageスキーマを生成します。Avrotize Schema内の各レコード型は、Datapackageリソースに変換されます。
- レコードのフィールドは、Datapackageリソース内のフィールドにマッピングされます。ネストされたレコードは、Datapackage内のネストされたリソースにマッピングされます。
JSON Structure スキーマを Datapackage スキーマに変換
avrotize s2dp <path_to_structure_schema_file> [--out <path_to_datapackage_file>] [--record-type <record-type-from-structure>]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Datapackage スキーマファイルのパスです。省略した場合、出力は標準出力に送られます。--record-type:(任意)Datapackage スキーマに変換する JSON Structure レコード型の名前です。
変換に関する注意事項:
- このツールは、JSON Structure スキーマから Datapackage スキーマを生成します。JSON Structure スキーマ内の各オブジェクト型は、Datapackage リソースに変換されます。
- オブジェクトのプロパティは、Datapackage リソーススキーマのフィールドにマッピングされます。
- 以下を含む、すべての JSON Structure Core 型に対応しています。
- JSON プリミティブ型(string、number、boolean、null)
- 拡張プリミティブ型(int8-128、uint8-128、float/double、decimal、binary、date、datetime、time、duration、uuid、uri、jsonpointer)
- 複合型(object、array、set、map、tuple、choice/union)
- JSON Structure 固有の機能は保持されます。
- 名前空間を使用してリソースを整理します
- 型参照($ref)を解決します
- 型注釈(maxLength、minLength、pattern、minimum、maximum、enum)を Data Package のフィールド制約に変換します
- Union 型(nullable フィールド)を適切に処理します
Avrotize スキーマを Markdown ドキュメントに変換
avrotize a2md <path_to_avro_schema_file> [--out <path_to_markdown_file>]
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize Schema ファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Markdown ファイルのパスです。省略した場合、出力は標準出力に送られます。
変換に関する注意事項:
- このツールは、Avrotize Schema から Markdown ドキュメントを生成します。Avrotize Schema 内の各レコード型は、Markdown セクションに変換されます。
- レコードのフィールドは、Markdown セクション内の表に記載されます。ネストされたレコードは、Markdown ファイル内のネストされたセクションに記載されます。
JSON Structure スキーマを Markdown ドキュメントに変換
avrotize s2md <path_to_structure_schema_file> [--out <path_to_markdown_file>]
パラメーター:
<path_to_structure_schema_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out:変換結果を書き込む Markdown ファイルのパスです。省略した場合、出力は標準出力に送られます。
変換に関する注意事項:
- このツールは、Avrotize Schema から Markdown へのコンバーターで確立されたパターンに従い、JSON Structure Core スキーマから Markdown ドキュメントを生成します。
- 以下を含む、すべての JSON Structure Core 型に対応しています。
- JSON プリミティブ型:string、number、boolean、null
- 拡張プリミティブ型:binary、int8-128、uint8-128、float8/float/double、decimal、date、datetime、time、duration、uuid、uri、jsonpointer
- 複合型:object、array、set、map、tuple、any、choice(タグ付き union とインライン union の両方)
- JSON Structure Core の機能に対応しています。
- 名前空間と定義は、それぞれ別のセクションに記載されます
- 型参照($ref)は Markdown リンクに変換されます
- 拡張($extends)と抽象型は明確に示されます
- 必須プロパティと任意プロパティが示されます
- 拡張機能(スキーマに含まれている場合):
- 検証制約(minLength、maxLength、minimum、maximum、pattern など)は、プロパティと併せて記載されます
- 型固有の注釈(decimal の precision、scale、配列の minItems/maxItems など)
- スキーマ内の各オブジェクト型は、プロパティを構造化されたリスト形式で記載した Markdown セクションに変換されます。
- Choice 型(union)は、セレクター(存在する場合)と選択可能な項目を記載します。
- 定義セクションには、再利用可能なすべての型定義が記載されます。
JSON StructureをCSV Schemaに変換
avrotize s2csv <path_to_structure_schema_file> [--out <path_to_csv_schema_file>]
パラメーター:
<path_to_structure_schema_file>:変換するJSON Structureスキーマファイルのパスです。省略した場合、ファイルはstdinから読み込まれます。--out:変換結果を書き込むCSVスキーマファイルのパスです。省略した場合、出力はstdoutに送られます。
変換に関する注意:
- このツールはJSON StructureスキーマをCSV Schema形式に変換します。
- プリミティブ(string、number、boolean、null、integer)、拡張型(int8-128、uint8-128、float/double、decimal、date、datetime、time、duration、uuid、uri、binary)、複合型(object、array、set、map、tuple、choice)を含む、すべてのJSON Structure Core型に対応しています。
- CSV形式には複雑なネスト構造をネイティブにサポートする機能がないため、複合型(配列、オブジェクト、マップ)はCSVスキーマ内で文字列として表現されます。
- 必須/任意のプロパティは、
nullableフラグを使って保持されます。 - 検証制約(maxLength、minLength、pattern、minimum、maximum、precision、scale)はCSVスキーマ内で保持されます。
- enumキーワードとconstキーワードに対応しており、出力でも保持されます。
$ref、$extends、definitions、namespacesなどのJSON Structure固有の機能は、変換時に解決されます。
Avrotize SchemaをCSV Schemaに変換
avrotize a2csv <path_to_avro_schema_file> [--out <path_to_csv_schema_file>]
パラメーター:
<path_to_avro_schema_file>:変換するAvrotizeスキーマファイルのパスです。省略した場合、ファイルはstdinから読み込まれます。--out:変換結果を書き込むCSVスキーマファイルのパスです。省略した場合、出力はstdoutに送られます。
変換に関する注意:
- このツールはAvrotizeスキーマをCSV Schema形式に変換します。
- Avroのプリミティブ型(string、int、long、float、double、boolean、bytes)は、適切なCSVスキーマ型にマッピングされます。
- Avroの論理型(date、timestamp-millis、decimal、uuid)は出力で保持されます。
- CSV形式にはネスト構造をネイティブにサポートする機能がないため、複合型(レコード、配列、マップ)はCSVスキーマ内で文字列として表現されます。
- CSVスキーマに変換できるのは単一のレコード型のみです。
RAMLデータ型をJSON Structureに変換
avrotize raml2s <path_to_raml_file> [--out <path_to_json_structure_file>] [--namespace <avro_schema_namespace>]
Avrotize Schemaを介して変換し、RAML 1.0データ型をJSON Structureに変換します。RAMLフェーズ1の制限が適用されます。対象となるのはインラインのtypes:データ型のみです。APIリソース、メソッド、traits、resourceTypes、securitySchemes、annotations、および外部の!includeの展開は対象外です。
JSON StructureをRAMLデータ型に変換
avrotize s2raml <path_to_json_structure_file> [--out <path_to_raml_file>] [--namespace <namespace_to_strip>]
Avrotize Schemaを介して変換し、JSON StructureをRAML 1.0ライブラリに変換します。出力にはRAMLデータ型のみが含まれ、APIリソースやメソッドは生成されません。
JSON Structure を Protocol Buffers に変換
avrotize s2p <path_to_json_structure_file> --out <path_to_proto_directory> [--naming-mode <naming_mode>] [--allow-optional]
パラメーター:
<path_to_json_structure_file>:変換する JSON Structure スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out:変換結果を書き込む Protocol Buffers スキーマディレクトリのパスです。proto ファイルはディレクトリに書き込む必要があるため、このパラメーターは必須です。--naming-mode:(任意)型の命名規則です。選択肢はsnake、camel、pascalです。デフォルトはpascalです。--allow-optional:(任意)null 許容フィールドに対するoptionalキーワードのサポートを有効にします(proto3)。
変換に関する注意事項:
- このツールは Avrotize Schema を経由せず、JSON Structure スキーマを Protocol Buffers の
.protoファイルに直接変換します。 - JSON Structure のプリミティブ型(string、number、boolean、null)と拡張型(int8-128、uint8-128、float32/64、decimal、date、datetime、time、duration、uuid、uri)は、適切な Protocol Buffers 型にマッピングされます。
- 複合型(object、array、set、map、tuple、choice)は、Protocol Buffers のメッセージ、repeated フィールド、map フィールド、oneof 構造に変換されます。
- JSON Structure の名前空間は、個別の proto パッケージ定義に解決されます。
- 型参照(
$ref)は解決され、適切なメッセージ型に変換されます。 - choice 型(ユニオン)は、Protocol Buffers の
oneof構造に変換されます。 - 抽象型と拡張(
$extends)は、適切なメッセージ階層を生成して処理されます。
Smithy IDL のデータシェイプを JSON Structure に変換
avrotize smithy2s <path_to_smithy_file> [--out <path_to_json_structure_file>] [--namespace <avro_schema_namespace>]
このコマンドは、Avrotize Schema を介して Smithy 2.0 IDL のデータシェイプを JSON Structure に変換します。smithy2a と同じ Smithy フェーズ 1 の対象範囲と制限が適用され、サービス、オペレーション、リソース、プロトコルのモデリングは対象外となり、スキップされます。
JSON Structure を Smithy IDL のデータシェイプに変換
avrotize s2smithy <path_to_json_structure_file> [--out <path_to_smithy_file>] [--namespace <smithy_namespace>]
このコマンドは、Avrotize Schema を介して JSON Structure を Smithy 2.0 IDL のデータシェイプに変換します。出力するのはデータシェイプのみです。フェーズ 1 では、Smithy のサービスおよびオペレーションのモデリングは明示的に対象外です。
OpenAPI を JSON Structure に変換
avrotize oas2s <path_to_openapi_file> --out <path_to_json_structure_file> [--namespace <namespace>] [--preserve-composition] [--detect-discriminators] [--lift-inline-schemas]
パラメーター:
<path_to_openapi_file>:OpenAPI 3.x ドキュメント(JSON または YAML)のパスです。省略した場合、ファイルは stdin から読み込まれます。--out:変換結果を書き込む JSON Structure スキーマファイルのパスです。省略した場合、結果は stdout に書き込まれます。--namespace:(任意)JSON Structure スキーマの名前空間です。--preserve-composition:(任意)合成キーワード(allOf、oneOf、anyOf)を保持します。デフォルトはtrueです。--detect-discriminators:(任意)OpenAPI のディスクリミネーターのパターンを検出し、choice 型に変換します。デフォルトはtrueです。--lift-inline-schemas:(任意)パスやオペレーション内のインラインスキーマを名前付き定義に引き上げます。デフォルトはfalseです。
変換に関する注意事項:
- このツールは、OpenAPI ドキュメントの
components.schemasからスキーマ定義を抽出し、JSON Structure 形式に変換します。 - OpenAPI 固有のキーワードは、次のように処理されます。
nullable:nullを含む型ユニオンに変換されますreadOnly、writeOnly、deprecated:メタデータ注釈にマッピングされますdiscriminator:適切なディスクリミネーターのマッピングを持つ choice 型の作成に使用されます
- OpenAPI の
$ref参照(例:#/components/schemas/Pet)は、JSON Structure の参照(#/definitions/Pet)に変換されます。 - JSON Schema コンバーターがサポートする JSON Schema の機能は、次のものを含めすべて保持されます。
- プロパティと必須フィールドを含むオブジェクト構造
- 列挙型
- 数値および文字列の制約(minimum、maximum、minLength、maxLength、pattern)
- 配列型とセット型(uniqueItems を含む)
- マップ型(additionalProperties から)
- 合成(allOf、oneOf、anyOf)
例:
# Convert an OpenAPI document to JSON Structure
avrotize oas2s petstore.yaml --out petstore.struct.json
# With namespace and inline schema lifting
avrotize oas2s api.json --out api.struct.json --namespace com.example.api --lift-inline-schemas
Avrotize スキーマの解析正規形(PCF)を作成する
avrotize pcf <path_to_avro_schema_file>
パラメーター:
<path_to_avro_schema_file>:変換する Avrotize スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。
変換に関する注意事項:
- Avrotize スキーマの解析正規形(PCF)を生成します。PCF は、スキーマの比較と互換性チェックに使用される正規化形式です。
- PCF は JSON オブジェクトで、stdout に出力されます。
JSON インスタンスをスキーマに対して検証する
avrotize validate <json_files...> --schema <schema_file> [--schema-type <type>] [--quiet]
パラメーター:
<json_files...>:検証する 1 つ以上の JSON ファイルです。単一の JSON オブジェクト、JSON 配列、JSONL(改行区切り JSON)形式に対応しています。--schema <schema_file>:スキーマファイル(Avro の場合は.avsc、JSON Structure の場合は.jstruct.json)のパスです。--schema-type:(任意)スキーマの種類です。avroまたはjstructを指定します。省略した場合は、ファイル拡張子から自動検出されます。--quiet:(任意)出力を抑制します。すべてのインスタンスが有効な場合は終了コード 0、無効なインスタンスがある場合は 1 になります。
検証に関する注意事項:
- Avrotize スキーマ仕様に従って、JSON インスタンスを Avro スキーマに対して検証します。
- Avro のすべてのプリミティブ型(null、boolean、int、long、float、double、bytes、string)に対応しています。
- Avro のすべての複合型(record、enum、array、map、fixed)に対応しています。
- ネイティブ形式と文字列形式の両方のエンコーディングで、論理型(decimal、uuid、date、time-millis、time-micros、timestamp-millis、timestamp-micros、duration)に対応しています。
- JSON のフィールド名マッピング用に、フィールドの
altnamesに対応しています。 - JSON のシンボルマッピング用に、enum の
altsymbolsに対応しています。 - JSON Structure の検証には、
json-structureパッケージが必要です。
例:
# Validate JSON file against Avro schema
avrotize validate data.json --schema schema.avsc
# Validate multiple files
avrotize validate file1.json file2.json --schema schema.avsc
# Validate JSONL file against JSON Structure schema
avrotize validate events.jsonl --schema events.jstruct.json
# Quiet mode for CI/CD pipelines (exit code only)
avrotize validate data.json --schema schema.avsc --quiet
TMSL スクリプトをローカルで検証する
avrotize validate-tmsl [input] [--quiet]
パラメーター:
[input]:TMSL JSON ファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--quiet:(任意)出力を抑制します。有効な場合は終了コード 0、無効な場合は 1 になります。
検証に関する注意事項:
- 互換性レベル 1200 以降における Microsoft TMSL オブジェクト定義に準拠した、ローカルでの構造検証を実行します。
- データベース/モデル/テーブル/列のパスに対する
createOrReplaceコマンドのペイロード形式を検証します。 - 文書化されている列の
dataType列挙値(automatic、string、int64、double、dateTime、decimal、boolean、binary、unknown、variant)を強制します。 - 検証対象のサブセットに対して、オブジェクトのプロパティを厳密にチェックします(
additionalProperties: false)。 - これはセマンティックエンジンによる検証ではありません。セマンティックチェックには、XMLA エンドポイントに対する実行が引き続き必要です。
例:
# Validate a generated TMSL file
avrotize validate-tmsl model.tmsl.json
# CI mode with exit code only
avrotize validate-tmsl model.tmsl.json --quiet
JSON Structure スキーマを GraphQL スキーマに変換する
avrotize s2graphql [input] --out <path_to_graphql_schema_file>
パラメーター:
[input]:JSON Structure スキーマファイルのパスです。省略した場合、ファイルは stdin から読み込まれます。--out <path_to_graphql_schema_file>:出力する GraphQL スキーマファイルのパスです。
変換に関する注意事項:
- JSON Structure Core スキーマを GraphQL スキーマ言語(SDL)に変換します。
- JSON Structure Core のすべてのプリミティブ型(string、number、boolean、null)に対応しています。
- 拡張プリミティブ型(binary、int8-128、uint8-128、float/double、decimal、date、datetime、time、duration、uuid、uri、jsonpointer)に対応しています。
- 複合型(object、array、set、map、tuple、any、choice)に対応しています。
- 型参照($ref)を解決し、適切な依存関係の順序を維持します。
- JSON Structure の名前空間を、シンプルな名前の GraphQL 型にマッピングします。
- 専用型(Date、DateTime、UUID、URI、Decimal、Binary、JSON)用のカスタムスカラーを生成します。
- 必須プロパティには、GraphQL で
!が付けられます。 - 配列とセットは GraphQL のリスト
[Type]として表現されます。 - マップは JSON スカラー型を使用して表現されます。
例:
# Convert a JSON Structure schema to GraphQL
avrotize s2graphql myschema.struct.json --out myschema.graphql
# Read from stdin and write to stdout
cat myschema.struct.json | avrotize s2graphql > myschema.graphql
Avrotize スキーマを GraphQL スキーマに変換する
avrotize a2graphql [input] --out <path_to_graphql_schema_file>
パラメーター:
[input]:Avrotize スキーマファイルのパスです。省略した場合、ファイルは標準入力から読み込まれます。--out <path_to_graphql_schema_file>:出力する GraphQL スキーマファイルのパスです。
変換に関する注意事項:
- Avrotize スキーマを GraphQL スキーマ言語(SDL)に変換します
- Avro のプリミティブ型(string、int、long、float、double、boolean、bytes)は GraphQL のスカラー型にマッピングされます
- Avro の論理型(date、timestamp-millis、decimal、uuid)はカスタム GraphQL スカラーにマッピングされます
- Avro のレコード型は GraphQL オブジェクト型になります
- Avro の配列は GraphQL リスト
[Type]になります - Avro のマップは JSON スカラー型を使用して表現されます
- Avro のユニオンは GraphQL ユニオン型に変換されます
- Avro の列挙型は GraphQL の列挙型になります
例:
# Convert an Avrotize schema to GraphQL
avrotize a2graphql myschema.avsc --out myschema.graphql
# Read from stdin and write to stdout
cat myschema.avsc | avrotize a2graphql > myschema.graphql
リファレンスドキュメント
上記のコマンドリファレンスに加えて、リポジトリには特定の形式や機能について詳しく解説した補足ドキュメントが含まれています。
スキーマモデルと仕様
- Avrotize スキーマ — 正式仕様 — ツールの中間表現として使用される、Apache Avro に基づくスキーマモデルです。
- Apache Avro スキーマ — 正式仕様 — 基盤となる Avro スキーマ形式のリファレンスです。
JSON Schema と JSON Structure
- JSON Schema の処理 — Avrotize による JSON Schema ドキュメントの解釈と変換について説明します。
- JSON Structure の処理 — JSON Structure のサポートとマッピングについて説明します。
- JSON Schema → JSON Structure 変換 — JSON Schema から JSON Structure への変換ルールです。
- JSON Structure → JSON Schema 変換 — JSON Structure から JSON Schema に戻す変換ルールです。
Avro エンコーディングとその他のデータ形式
- Apache Avro の「プレーン JSON」エンコーディング — Avrotize で使用されるプレーン JSON エンコーディングです。
- CDDL の処理 — CDDL(RFC 8610)から JSON Structure への変換(
cddl2s)について説明します。
コード生成
- C# コード生成 — C# の型マッピングと生成コードのオプションについて説明します。
- Java コード生成 — Java の型マッピングと生成コードのオプションについて説明します。
SQL および NoSQL データベース
- SQL 変換に関する注意事項 — サポートされている各方言における Avro → SQL の型マッピング(
a2sql)について説明します。 - SQL → Avro 型マッピング — SQL スキーマを Avro に変換する際に使用される型マッピング(
sql2a)です。 - NoSQL 変換に関する注意事項 — Cassandra、DynamoDB、MongoDB、その他の NoSQL ターゲット向けの型マッピングについて説明します。
MCP サーバー
- VS Code + Copilot MCP クイックスタート — VS Code の GitHub Copilot から Avrotize MCP サーバーを使用する方法を説明します。
プロジェクトのガバナンスと貢献
- 貢献 — 報告、アイデア、プルリクエストを送るための簡単な手順です。
- サポート — 質問する場所と、ベストエフォートでの参加に期待できることを説明します。
- セキュリティ — 脆弱性を非公開で報告する方法です。
- ガバナンス — メンテナーの権限、互換性、レビュー、リリースに関するポリシーを詳しく説明します。
このドキュメントでは、Avrotize の使用方法と機能の概要を説明します。詳しくは、Avrotize スキーマのドキュメントと各コマンドのヘルプメッセージを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。