2017-05-05 10 views
0

私はapache avroを使用していて、自分のスキーマから論理型を取得したいと考えています。私は関数getLogicalType()を使ってみましたが、nullを返します。私は何が間違っているのか分からない。私のスキーマは以下の通りです。続きapacheのgetLogicalType()関数avroapiが存在する場合でもnullを返します。

{ 
    "namespace": "example.avro", 
    "type": "record", 
    "name": "User", 
    "fields": [ 
     {"name": "name", "type": "string"}, 
     {"name": "favorite_number", "type": "int", "logicalType": "decimal", "precision": 2, "scale": "2"}, 
     {"name": "favorite_color", "type": ["string", "null"]} 
    ] 
} 

私は

for(Schema.Field currField : schema.getFields()) { 

     field = createFieldList(currField.name(), currField.schema().getType().toString(), currField.schema().getLogicalType()); 
     fields.add(field); 
    } 
+0

を与えます2番目のフィールドに対してのみ* logicalType *を定義したので、getLogicalType()は少なくとも1番目と3番目のフィールドでnullを返します。 createFieldList()で使用する代わりに、各フィールドにgetLogicalTypeの結果を出力してみてください。 – LLL

+0

いいえ、すべてnullになります – Hazzard

答えて

0

私は答えを見つけたと思う。論理型が宣言されている方法は間違っていました。私はgetl​​ogicalType()関数を使用するとき、私はあなたが持っている私の答えにコメントで書いたように

それは

{ 
    "name": "favorite_number", 
    "type": { 
    "type": "int", 
    "logicalType": "decimal", 
    "precision": 2, 
    "scale": "2" 
    } 
}, 

でなければなりません

代わりの

{ 
    "name": "favorite_number", 
    "type": "int", 
    "logicalType": "decimal", 
    "precision": 2, 
    "scale": "2" 
}, 

は、今では私に期待される結果

+0

これが解決策なら、私はSchemaParseExceptionを取得するべきだと思っています。あなたはそれを得ていないと書いたので、avroのバグかもしれないと思います。とにかくそれはあなたのために働く良い。 – LLL

+1

ところで、関数getObjectProps()を使って最初のインスタンスのlogicalTypeにアクセスすることができます。フィールドのすべての属性にアクセスできるマップを返します。それが例外を投げるべきかどうかに関しては、私は本当にそれが必要かどうかわかりません。ご協力いただきありがとうございます。 – Hazzard

0

あなたはそれhereを初期化しますlogicalType hereまたはsetLogicalTypeを設定します解析メソッドを使用する必要がlogicalTypeにアクセスしていますが、コードです。私はこのライブラリを経験していませんが、コードに基づいて私は他の方法を見ていません。

この変数は、使用している方法getLogicalTypeによって返されます。

+0

私はparseメソッドを使用しました。それから私はフィールドにアクセスしようとし、論理型を取得しようとしました。しかし、それはnullを返しました。 currField.schema()。getLogicalType()。ここでcurrFieldはField型です – Hazzard

+0

あなたはキャッチして無視しませんでした。 SchemaParseException? – LLL

+0

Err。それがなぜその例外を投げるのだろうか?上記のスキーマは解析されます。 – Hazzard

関連する問題