Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow apacheavro使用@AvroSchema从javapojo生成错误的Avro模式_Google Cloud Dataflow_Apache Beam_Avro - Fatal编程技术网

Google cloud dataflow apacheavro使用@AvroSchema从javapojo生成错误的Avro模式

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

我有一个带有日期的简单POJO,在导入Google BigQuery之前,它将作为Avro存储在存储器中。日期转换为long,我试图使用@AvroSchema覆盖日期字段的模式生成,以便BigQuery了解字段的类型

简单的POJO:

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"
}

基本上,您的模式是正确的,每次需要使用某种逻辑类型时,您都可以像这样构建模式。

什么让您认为它是错误的?这个模式是一个有效的模式。根据我的回答,这是一个有效的模式。但它在某种程度上造成了问题吗?是什么让你认为它错了?这个模式是一个有效的模式。根据我的回答,这是一个有效的模式。但它在某种程度上造成了问题吗?谢谢你们,看来我并没有足够好地阅读规范!谢谢,伙计们,看来我没有读到足够好的规格!