apache - 将空值写入 Parquet 文件
问题描述
我正在使用Parquet CPP 库将数据从 MySQL 数据库写入 parquet 文件。我有两个问题:
1)模式中的重复是什么意思?当我们将列定义为 NULL 或 NOT NULL 时,它是否与表约束有关?
2) 如何在列中插入 NULL 值?我只是将一个空指针传递给 value 参数吗?
WriteBatch(int64_t num_levels, const int16_t* def_levels,
const int16_t* rep_levels,
const typename ParquetType::c_type* values)
提前致谢!
解决方案
@Ivy.WI 最近在工作中一直在使用 parquet CPP,这就是我理解 Parquet 模式需要了解您将要读取和写入的表的每一列的内容。如果该列是可空的,则意味着它repetitionType
是可选的,如果它不是可空的,则意味着它repetitionType
是必需的,否则它将被重复(对于嵌套结构,如地图、列表等)。让我快速介绍一下定义和重复级别:
parquet 中的定义级别是识别要写入的值是否可以为空,即我们应该告诉特定字段的级别NULL
。所以基本上,如果你想重建模式,我们可以使用定义和重复级别。字段可以是可选的/必需的/重复的。如果该字段是必需的,则意味着它不能为空,因此不需要定义级别。如果它是可选的,它将是0
fornull
和1
for 非 null。如果模式是嵌套的,我们会相应地使用附加值。例如
message ExampleDefinitionLevel {
optional group a {
optional group b {
optional string c;
}
}
}
a 的定义级别为 0,b 的定义级别为 1,c 的定义级别为 2。 在此处输入图像描述
重复级别:重复级别仅适用于嵌套结构,例如列表、地图等。例如,当用户可以拥有多个电话号码时,该字段将被“重复”。例如
message list{
repeated string list;
}
数据会像:["a","b","c"]
并且看起来像:
{
list:"a",
list:"b",
list:"c"
}
要写入 null,请确保架构知道该列是可以为空的,并且只需传递定义级别0
,parquetwritebatch
应该负责其余的工作。
请参考https://blog.twitter.com/engineering/en_us/a/2013/dremel-made-simple-with-parquet.html
推荐阅读
- python - 从字典中提取不同级别的嵌套键值对
- php - PhpStorm:如何生成具有所有父属性和子属性的构造函数
- vhdl - VHDL:(数据流和控制单元)计算 log2,表示为无符号 8 位整数
- .net - 如何在不安装的情况下在 Avalon 应用程序中包含外部字体
- elasticsearch - sbt无法在项目中导入两个不同版本的elasticsearch库
- ms-access - pdf在访问中打印多个带有图像的表格
- php - 缩略图 url 已更改,但在调整 ajax 大小之前不会反映
- qt - Qt单选按钮颜色变化
- php - 无法在 laravel 项目的文件中加载 FFMpeg
- django - django通过外键关系访问相关模型实例时,什么时候查询数据库?