gpt4 book ai didi

avro - 使用 v1.11.0 编写时将 Parquet 数据加载到 Snowflake Cloud 数据库的问题

转载 作者:行者123 更新时间:2023-12-04 09:37:25 24 4
gpt4 key购买 nike

我是 Snowflake 的新手,但我的公司一直在成功使用它。
Parquet 文件目前正在使用现有的 Avro 模式编写,使用 Java parquet-avro v1.10.1。
我一直在更新依赖项以使用最新的 Avro,其中一部分将 Parquet 推到了 1.11.0。
Avro 架构保持不变。但是,当使用 COPY INTO Snowflake 命令时,我收到一个 LOAD FAILED 错误:Error parsing the parquet file: Logical type Null can not be applied to group node但没有其他错误详细信息:(
问题是文件中没有空列。
我已经削减了 Avro 架构,并发现 Avro 架构中存在 MAP 类型导致了这个问题。
该领域是

    {
"name": "FeatureAmounts",
"type": {
"type": "map",
"values": "records.MoneyDecimal"
}
}
使用 parquet-tools 的 Parquet 模式示例。
message record.ResponseRecord {
required binary GroupId (STRING);
required int64 EntryTime (TIMESTAMP(MILLIS,true));
required int64 HandlingDuration;
required binary Id (STRING);
optional binary ResponseId (STRING);
required binary RequestId (STRING);
optional fixed_len_byte_array(12) CostInUSD (DECIMAL(28,15));
required group FeatureAmounts (MAP) {
repeated group map (MAP_KEY_VALUE) {
required binary key (STRING);
required fixed_len_byte_array(12) value (DECIMAL(28,15));
}
}
}
我用 Parquet 1.10.1 和 1.11.0 编写的 2 个文件输出了相同的模式。
我还尝试了一个更大的架构示例,如果架构中不存在“map”avro 类型,则似乎一切正常。我还有其他具有巨大架构的大型文件,许多联合类型可以转换为 Parquet 中的组,但是当它们不包含任何“ map ”类型时,所有文件都可以成功写入和读取。
但是,一旦我添加回“ map ”类型,当我尝试摄取 1.11.0 版本时,我就会收到来自 Snowflake 的奇怪错误消息(但是 1.10.1 版本将成功加载)。但是 1.11.0、1.10.1 等版本的 Parquet 工具仍然可以读取文件。
我从这里了解到 comment Parquet 1.11.0 中的逻辑类型发生了变化,但它应该仍然兼容旧版本以供阅读。
但是有谁知道 Snowflake 使用什么版本的 Parquet 来解析这些文件?这里还有其他可能发生的事情吗?
感谢任何帮助

最佳答案

Logical type Null can not be applied to group node


查看上面的错误,似乎是 Apache Arrow's parquet libraries的版本正在用于读取文件。
然而,仔细观察,真正的问题在于 Avro based Parquet Writer implementation 中遗留类型的使用。 (以下假设使用 Java 编写文件)。
new logicalTypes 架构元数据 introduced in Parquet定义了许多类型,包括 singular MAP type .历史上,前者 convertedTypes架构字段 supported use of MAP AND MAP_KEY_VALUE 对于传统读者。使用 logicalTypes 的新作家(1.11.0+) should not be using the legacy map type anymore ,但工作 hasn't been done尚未更新 Avro 到 Parquet 架构转换以删除 MAP_KEY_VALUE类型完全。
因此, MAP_KEY_VALUE 的架构字段用 UNKNOWN 写出 logicalType 的值,这会触发 Arrow 的实现 only understands logicalType values of MAP and LIST (understandably) .
考虑将此记录为针对 Apache Parquet project 的错误。更新他们的 Avro 编写器以停止嵌套遗产 MAP_KEY_VALUE将 Avro 模式转换为 Parquet 模式时的类型。理想情况下,它应该作为 PARQUET-1410 的一部分完成。 .
不幸的是,这是硬编码的行为,并且没有影响 map 类型的配置选项可以帮助为 Apache Arrow(以及扩展名的 Snowflake)生成正确的文件。在 Apache Parquet 开发人员发布适当的修复程序之前,您需要使用较旧版本的编写器。

关于avro - 使用 v1.11.0 编写时将 Parquet 数据加载到 Snowflake Cloud 数据库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62504757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com