ストアのAvroスキーマの管理

スキーマの追加
スキーマの変更
スキーマの無効化と有効化
スキーマの表示

この項では、ストアのAvroスキーマの追加、変更、有効化と無効化および表示方法を説明します。

スキーマの追加

Avroスキーマは、フラット・テキスト・ファイルで定義してから、コマンドライン・インタフェースを使用してストアに追加します。たとえば、my_schema.avscというファイルでスキーマが定義されるとします。次に、(ストアが実行中と仮定して)コマンドライン・インタフェースを起動してスキーマを次のように追加します。

> java -Xmx256m -Xms256m \
-jar <kvhome>/lib/kvstore.jar runadmin -port <port> -host <host>
kv-> ddl add-schema -file my_schema.avsc

スキーマをストアに追加する際、スキーマが正しく構成されているか確認するためにエラー・チェックが実行されます。エラーは、スキーマをストアに追加できるようにするために、対処が求められる問題です。警告は対処が必要な問題ですが、それほど重大ではないためCLIがスキーマの追加を拒否します。ただし、警告付きでスキーマを追加するには、-forceスイッチを使用する必要があります。

このリリース現在、フィールドのデフォルト値がフィールドの型に一致しない場合にのみ、エラーが生成されます。たとえば、スキーマで、文字列が必須のところに整数をデフォルト値として指定した場合です。

このリリース現在、スキーマにデフォルト値が指定されていないフィールドがある場合にのみ、警告が生成されます。スキーマを変更(展開)する予定がある場合は、デフォルト値は必須です。そうでない場合は、デフォルト値がなくても問題ありません。

スキーマの変更

既存のスキーマを変更(展開)するには、-evolveフラグを使用します。

kv-> ddl add-schema -file my_schema.avsc -evolve 

ストア内のスキーマを変更する際、スキーマ展開が正しく実施できるか確認するためにエラー・チェックが実行されます。このエラー・チェックでは新規スキーマが、そのスキーマの現在有効なすべてのバージョンと比較されます。

このエラー・チェックでエラーまたは警告が発生する場合があります。エラーは、変更されたスキーマをストアに追加できるようにするために、対処が求められる重大な問題です。エラーは、古いバージョンのスキーマで書き込まれたデータが、新しいバージョンのスキーマを使用してクライアントで読み取れない状況を表します。

次のようなエラーが考えられます。

  • デフォルト値なしでフィールドが追加されています。

  • 固定型のサイズが変更されています。

  • enumシンボルが削除されています。

  • ユニオン型が削除されているか、ユニオン型がユニオン以外の型に変更され、その新しい型が古いユニオンの唯一の型と異なります。

  • Avroの仕様で定義されているように、フィールドの型に対する変更(特に別の型名への変更)は、型昇格の場合を除いてエラーとみなされます。型昇格の場合でも、警告が発生します(次を参照)。ユニオン以外の型からユニオンに変更する場合も例外です(次を参照)。

警告は、2フェーズ・アップグレード・プロセスを使用して回避できる問題です。2フェーズ・アップグレードでは、フェーズIですべてのクライアントが読取りのみにスキーマを使用し始め(書込みには古いスキーマが引き続き使用されます)、フェーズIIで読取りおよび書込みの両方に新しいスキーマを使用します。フェーズIIは、フェーズIが完了するまで始まりません。つまり、すべてのクライアントが新しいスキーマを読取りに使用するまで、どのクライアントもそれを書き込みに使用できません。

次のような警告が考えられます。

  • デフォルト値が含まれていない古いスキーマのフィールドが、新しいスキーマで削除されています。

  • enumシンボルが追加されています。

  • ユニオン型が追加されているか、ユニオン以外の型が元の型と追加の型を含むユニオンに変更されています。

  • Avroの仕様で定義されているように、フィールドの型が昇格されています。型昇格には、int型からlong型、float型、double型、またはlong型からfloat型、double型、あるいはfloat型からdouble型があります。

スキーマの無効化および有効化

スキーマは削除できませんが、無効にすることはできます。

kv-> ddl disable-schema -name avro.MyInfo.1 

無効になっているスキーマを有効にするには、次のようにします。

kv-> ddl enable-schema -name avro.MyInfo.1 

スキーマの表示

ストアで現在有効なすべてのスキーマを表示するには、次のようにします。

kv-> show schemas 

現在無効なスキーマも含めて、すべてのスキーマを表示するには、次のようにします。

kv-> show schemas -disabled