问题标签 [avro-tools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
255 浏览

google-cloud-platform - Google Cloud Storage 中的 Concat Avro 文件

我在 Google Cloud Storage 中有一些大.avro文件,我想将它们全部合并到一个文件中。

我有

java -jar avro-tools.jar concat

但是,由于我的文件位于 google 存储路径中:gs://files.avro我无法使用 avro-tools 连接它们。关于如何解决它的任何建议?

0 投票
0 回答
685 浏览

java - 如何从多个依赖的 avro 文件中获取 Avro Schema

我有一个用例,我们定义自定义用户数据类型,如 CustomDate、CustomBigDecimal 等,这些都在一个 avsc 文件中,比如说 datatype.avsc 现在我们创建另一个主 avro 文件,比如说 main.avsc,它使用这个文件文件

例如

如何获取 main.avsc 的架构,因为我只能在解析器中指定一个文件名

如何指定它应该使用 ref.avsc 来获取依赖类型?

如果要在应用程序之外执行此操作,我将按如下方式执行

我同样认为我想以编程方式实现

0 投票
0 回答
175 浏览

java - 没有中央注册表的 Avro SchemaStore 和版本控制

我对 Avro 比较陌生,但我相当确定我已经阅读并进行了足够多的实验以了解它通常是如何工作的。

我正在开发一个 Java 分布式系统,其中 Avro 模式由单个使用者定义。这些模式用于生成 POJO,然后由生产者应用程序导入。由于我们系统的可变发布节奏,不同的生产者应用程序可以使用旧版本的模式生成消息——这就是我们选择 Avro 的原因。

由于我们在单个 Maven 模块中定义和生成模式的方式,我们实际上不需要部署完整的注册表。我们没有需要动态查找模式以进行序列化或反序列化的用例。

我们真正需要的只是一个策略(和工具),它允许我们编写一个由类路径上的模式文件支持的 SchemaStore 的实现。该模块可以返回捆绑到一个 Maven 包中并导​​入到生产者应用程序中。

是否有人知道任何允许我们管理多个版本的模式文件、跟踪版本号并自动生成 POJO 类的方法或工具?

我在想象一些有点像旧的 Maven 版本插件的东西。我们在代码中提交了架构的“当前”版本。当我们想要进行更改时,我们更改此文件,然后运行插件,该插件会自动将其提交为新版本并生成新的 POJO。旧版本被维护并在代码中提交,以便它对 SchemaStore 仍然可用。

值得注意的是,我们没有使用 Kafka 或任何其他类型的流媒体系统。所有消息都使用普通的 REST 端点发送,并使用单对象编码进行序列化(因此它们包含模式指纹)

我希望这一切都有意义。任何帮助将非常感激!

0 投票
1 回答
172 浏览

java - 将 JSON(不是由 AVRO 生成)转换为 Avro 特定记录

我有一个用例将 JSON 数据转换为特定于 Avro 的记录。当我说 JSON 时,它是纯 JSON(不是由 Avro 生成的具有类型信息的)。我有 Avro Schema 及其生成的类。

当我尝试转换 using Avro 实用程序时,出现以下异常,

如果 JSON 由 Avro 库生成,则 Avro 实用程序运行良好,因为它向其中添加了类型和联合信息。但是,在我的用例中,我有一个纯 JSON,没有其他服务生成的类型信息。

经过长时间的研究,我在 JIRA 中发现了未解决的问题 - https://issues.apache.org/jira/browse/AVRO-1582

上面的问题是关于通用用例的,但是,我有模式及其生成的类,那么当我有使用 Java 的模式时,是否有任何选项可以将 JSON 转换为 Avro 特定记录?

0 投票
0 回答
377 浏览

avro - avro 可选字段默认 null 不起作用

我有以下文件:

然后当我做

我会得到错误:

我想我已经正确设置了可选字段的架构,但是为什么仍然存在这个错误?当未提供 f2 时,应将其设置为默认 null 对吗?

谢谢

0 投票
0 回答
60 浏览

java - JSONArray 抛出“请求的数组大小超过 VM 限制”

我正在使用一个自定义 jar 来读取 AVRO 文件并将其转换为 JSON

AVRO 文件大小为 200 MB,每条记录由 1500 多个 JSON 元素(名称/值对)组成。我将很快与您分享自定义 Jar。

尽管堆大小足够,但“请求的数组大小超过 VM 限制”仍会出现此错误。或者推荐的大小来读取这样的文件。

虽然相同的程序在较小的 AVRO 文件上运行良好。

0 投票
0 回答
43 浏览

avro - 检测架构的 Avro 规范版本

有没有办法确定用于定义架构的 Avro 规范的版本?JSON Schema 提供$schema关键字来声明规范版本。

Avro 模式有类似的东西吗?我在Avro 规范中没有看到任何描述这一点的关键字或元模式字段。

背景:我正在尝试建立一种验证机制来接受针对某些规范编写的模式。接受 Avro 1.9.2 但不接受 1.10.1

0 投票
1 回答
82 浏览

java - avro maven 插件无法为地图模式生成代码

我的 avsc 文件是

但是在我使用之后mvn compile,没有报告错误,但没有生成特定的类。当 avsc 模式大约为enumorrecord时,avro maven 插件运行良好。如何为地图模式生成相关类?

0 投票
1 回答
121 浏览

java - 如何将使用旧版本模式反序列化的 Avro 消息转换为更新的编译模式?

假设我使用 avro-tools 为“mySchema”的 v2 生成代码,并且一条消息出现在使用“mySchema”的 v1 编写的队列中。如果我理解正确,处理这种情况的最佳方法是意识到消息是使用“mySchema”的 v1 编写的,使用模式注册表获取 v1 模式,并使用 v1 反序列化消息。

此时,是否有可能以某种方式将结果对象转换为 avro-tools 为 v2 生成的代码中的相应字段和对象?

到目前为止,看起来处理消息的唯一方法会导致“GenericRecord”,它需要字符串键来访问字段的值。我更喜欢为 v2 使用生成的代码,并将任何拼写错误变成编译错误而不是运行时错误,在编码时知道值的数据类型,并避免设置一堆枚举来包含字符串键。

0 投票
1 回答
456 浏览

java - 泛型类型的 AVRO 模式 - Java

我想为我的 Kafka 消息有效负载包含 traceId 和元数据。所以我为 Kafka 消息有效负载定义了以下类型。

然后我有两种类型的狗和猫。我还创建了两种 Kafka 消息有效负载类型两种。

我想在 Avro 模式中表示这两种类型。有可能这样吗?如果是这样,请帮助我。

我可以为 Kafka 消息生产者和消费者使用 JSON 序列化器/反序列化器。但我期待使用 Avro。

谢谢。