Google cloud dataflow apacheavro使用@AvroSchema从javapojo生成错误的Avro模式
我有一个带有日期的简单POJO,在导入Google BigQuery之前,它将作为Avro存储在存储器中。日期转换为long,我试图使用@AvroSchema覆盖日期字段的模式生成,以便BigQuery了解字段的类型 简单的POJO:Google cloud dataflow apacheavro使用@AvroSchema从javapojo生成错误的Avro模式,google-cloud-dataflow,apache-beam,avro,Google Cloud Dataflow,Apache Beam,Avro,我有一个带有日期的简单POJO,在导入Google BigQuery之前,它将作为Avro存储在存储器中。日期转换为long,我试图使用@AvroSchema覆盖日期字段的模式生成,以便BigQuery了解字段的类型 简单的POJO: public class SomeAvroMessage implements Serializable { @AvroSchema("{\"type\":\"long\",\"logicalTy
public class SomeAvroMessage implements Serializable {
@AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}")
private long tm;
@AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}")
private long created;
public SomeAvroMessage() {
}
}
这将以以下AVRO模式结束:
{"type":"record","name":"SomeAvroMessage",
"namespace":"some.namespace",
"fields":[
{"name":"tm","type":{"type":"long","logicalType":"timestamp-millis"}},
{"name":"created","type":{"type":"long","logicalType":"timestamp-millis"}}
]}
这些似乎是错误的,应该是简单的{“name”:“tm”,“type”:“long”,“logicalType”:“timestamp millis”}
这在Google数据流中使用,Apache Beam 2.22是用Java编写的
我遗漏了什么吗?值{“name”:“tm”,“type”:{“type”:“long”,“logicalType”:“timestamp millis”}
是正确的。如果我们将其扩展为更清晰的伪代码,它是:
Field {
name: "tm",
type: Schema {
type: "long",
logicalType: "timestamp-millis"
}
}
您可以看到该字段有一个名称
和一个类型
。Avro字段的类型
必须是Avro架构。logicalType
字段位于架构内部,而不是与其相邻。值{“name”:“tm”,“type”:{“type”:“long”,“logicalType”:“timestamp milliss”}
是正确的。如果我们将其扩展为更清晰的伪代码,它是:
Field {
name: "tm",
type: Schema {
type: "long",
logicalType: "timestamp-millis"
}
}
您可以看到该字段有一个名称
和一个类型
。Avro字段的类型
必须是Avro架构。logicalType
字段位于架构内部,与架构不相邻。可以在以下内容中找到:
逻辑类型是Avro基元或具有额外
属性来表示派生类型。属性logicalType必须为
对于逻辑类型,始终存在,并且是名称为的字符串
本节后面列出的逻辑类型之一。其他
可以为特定逻辑类型定义属性
本文档还提供了avro模式中日期类型的示例:
{
"type": "int",
"logicalType": "date"
}
基本上,您的模式是正确的,每次需要使用某种逻辑类型时,您都可以这样构建模式。可以在以下内容中找到:
逻辑类型是Avro基元或具有额外
属性来表示派生类型。属性logicalType必须为
对于逻辑类型,始终存在,并且是名称为的字符串
本节后面列出的逻辑类型之一。其他
可以为特定逻辑类型定义属性
本文档还提供了avro模式中日期类型的示例:
{
"type": "int",
"logicalType": "date"
}
基本上,您的模式是正确的,每次需要使用某种逻辑类型时,您都可以像这样构建模式。什么让您认为它是错误的?这个模式是一个有效的模式。根据我的回答,这是一个有效的模式。但它在某种程度上造成了问题吗?是什么让你认为它错了?这个模式是一个有效的模式。根据我的回答,这是一个有效的模式。但它在某种程度上造成了问题吗?谢谢你们,看来我并没有足够好地阅读规范!谢谢,伙计们,看来我没有读到足够好的规格!