【发布时间】:2020-10-11 17:51:09
【问题描述】:
我是 Snowflake 的新手,但我的公司一直在成功使用它。
Parquet 文件目前正在使用 Java parquet-avro v1.10.1 使用现有的 Avro Schema 编写。
为了使用最新的 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 类型,似乎一切正常。我还有其他具有庞大架构的海量文件,许多联合类型转换为镶木地板中的组,但是当它们不包含任何“地图”类型时,它们都可以成功写入和读取。
但是,当我重新添加“地图”类型时,我会在尝试摄取 1.11.0 版本时从 Snowflake 收到奇怪的错误消息(但是 1.10.1 版本会成功加载)。但是 1.11.0、1.10.1 等的 parquet-tools 仍然可以读取文件。
我从comment 了解到 Parquet 1.11.0 中的逻辑类型发生了变化,但它应该仍然兼容旧版本。
但是有谁知道 Snowflake 使用什么版本的 Parquet 来解析这些文件?这里还有其他可能发生的事情吗?
感谢任何帮助
【问题讨论】:
标签: avro parquet snowflake-cloud-data-platform