この項では、ストアのAvroスキーマの追加、変更、有効化と無効化および表示方法を説明します。
Avroスキーマは、フラット・テキスト・ファイルで定義してから、コマンドライン・インタフェースを使用してストアに追加します。たとえば、my_schema.avsc
というファイルでスキーマが定義されるとします。次に、(ストアが実行中と仮定して)コマンドライン・インタフェースを起動してスキーマを次のように追加します。
> java -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フェーズ・アップグレードでは、フェーズ1ですべてのクライアントが読取りのみにスキーマの使用を開始してから(古いスキーマがまだ書込みに使用されています)、フェーズ2で読取りおよび書込みの両方に新規スキーマを使用します。フェーズ2は、フェーズ1が終了するまで始まらない可能性があります。つまり、すべてのクライアントが読取りに新規スキーマを使用するまでは、どのクライアントもそのスキーマを書込みに使用しないということです。
次のような警告が考えられます。
デフォルト値が含まれていない古いスキーマのフィールドが、新しいスキーマで削除されています。
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