我正在使用apache,并希望从我的模式中获得逻辑类型。我尝试使用函数getLogicalType()
,但它返回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"]}
]
}
下面是我访问logicalType的代码
for(Schema.Field currField : schema.getFields()) {
field = createFieldList(currField.name(), currField.schema().getType().toString(), currField.schema().getLogicalType());
fields.add(field);
}
发布于 2017-05-05 13:05:44
伙计们我想我找到答案了。逻辑类型的声明方式是错误的。
而不是
{
"name": "favorite_number",
"type": "int",
"logicalType": "decimal",
"precision": 2,
"scale": "2"
},
它应该是
{
"name": "favorite_number",
"type": {
"type": "int",
"logicalType": "decimal",
"precision": 2,
"scale": "2"
}
},
现在,当我使用getlogicalType()函数时,它给出了预期的结果
发布于 2017-05-05 07:54:27
您需要使用解析方法,该方法将设置logicalType、这里或logicalType,后者将初始化这里。我对这个库没有经验,但基于代码,我看不到其他方法。
然后,您使用的getLogicalType方法将返回此变量。
发布于 2022-06-14 20:58:27
发生这种情况的另一个原因是当它是一个联合数据类型时。然后,
currField.schema().getType()
变成null,但是你应该去调查
currField.schema().getTypes()
返回类型列表。迭代这些类型,以找到具有逻辑类型详细信息的类型。
https://stackoverflow.com/questions/43799353
复制相似问题