我有一个 10Tb (Parquet) 的事实表,其中包含 100 多个列。当我创建另一个只有事实表中的 10 列且大小为 2TB 的表时。
- 我预计大小应该为几 GB,因为我只存储了几 (10) 列?
- 我的问题是,当我们拥有更多列时,Parquet 格式是否能以更高效的方式存储?
最佳答案
Parquet 是一种基于列的存储。假设我有一个包含字段 userId、姓名、地址、州、电话号码的表。 在非 Parquet 存储中,如果我执行 select * where state = "TN",它将遍历表中的每条记录(即每行的所有列)并输出与我的 where 条件匹配的记录。然而,在 Parquet 格式中,所有列都存储在一起,因此我不需要遍历所有其他列。同样的选择查询将直接转到'state'列并输出与where条件匹配的记录。 Parquet 有利于更快的检索(更快地获得结果)。总共有多少列并不重要。
Parquet 使用快速压缩。由于所有列都存储在一起,因此压缩非常有效。
关于apache-spark - Spark如何存储Parquet Table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69166135/