いくつかのフィールドが**タイプString
である必要がある** 1つのAvroスキーマを作成しましたが、AvroはタイプCharSequence
のフィールドを生成しました。
タイプString
のフィールドを作成するようにAvroに指示する方法を見つけることができません。
使ってみました
"fields": [
{
"name":"startTime",
"type":"string",
"avro.Java.stringImpl":"String"
},
{
"name":"endTime",
"type":"string",
"avro.Java.string":"String"
}
]
ただし、両方のフィールドについて、AvroはタイプCharSequence
のフィールドを生成しています。
タイプString
のフィールドを作成する他の方法はありますか?
すべての文字列フィールドを_Java.lang.String
_のインスタンスにしたい場合は、コンパイラを構成するだけで済みます。
_Java -jar /path/to/avro-tools-1.7.7.jar compile -string schema
_
または、Mavenプラグインを使用している場合
_<plugin>
<groupId>org.Apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.7.7</version>
<configuration>
<stringType>String</stringType>
</configuration>
[...]
</plugin>
_
1つの特定のフィールドをJava.lang.String型にしたい場合は、できません。コンパイラではサポートされていません。リフレクトAPIで「Javaクラス」を使用できますが、コンパイラは気にしません。
詳細を知りたい場合は、SpecificCompilerの372行目のAvro1.7.7にブレークポイントを設定できます。 addStringType()
を呼び出す前に、スキーマのprops
フィールドに必要な情報があることがわかります。このスキーマをSpecificCompiler.javaType()
に渡すと、必要な処理が実行されます。ただし、addStringType
はスキーマを静的スキーマに置き換えます。要点がわからないので、メーリングリストで質問する可能性が高いです。
フィールドレベルごとに設定し、タイプをオブジェクトに変更して、「type」:「string」と「avro.Java.string」:「String」を含めることができます。
たとえば、以下を参照してください。
{
"type": "record",
"name": "test",
"fields": [
{
"name": "name",
"type": {
"type": "string",
"avro.Java.string": "String"
}
}
]
}