gpt4 book ai didi

parquet - 在 DuckDB 中读取分区的 Parquet 文件

转载 作者:行者123 更新时间:2023-12-05 02:30:08 28 4
gpt4 key购买 nike

背景:

  • DuckDB 允许直接查询 parquet 文件。例如con.execute("从'Hierarchy.parquet'中选择 *)

  • Parquet 允许按列值对文件进行分区。当一个 Parquet 文件被分区时,一个顶级文件夹被创建,其中包含 Parquet 文件的名称和列值的子文件夹,然后这些子文件夹包含实际的 Parquet 数据文件。例如Hierarchy.parquet(文件夹)--> date=20220401(子文件夹)--> part1.parquet

预期行为

DuckDB 查询分区和未分区的 parquet 文件。

观察到的行为

DuckDB 在查询分区的 parquet 文件时失败并处理未分区的 parquet 文件。

con.execute("Select * from 'Hierarchy.parquet'") 失败运行时错误:IO 错误:当 Hierarchy.parquet 被分区时,找不到与模式“Hierarchy.parquet”匹配的文件

查询底层个人数据文件工作正常:con.execute("Select * from 'Hierarchy.parquet/date=20220401/part1.parquet'")

有没有办法用 DuckDB 查询分区的 parquet 文件?或者这是一个限制/错误?

最佳答案

这在

中作为 DuckDB 问题/功能请求进行讨论

“支持 parquet 文件的 hive 式分区” https://github.com/duckdb/duckdb/issues/2186 .

建议的解决方法是:

  • 将 parquet 文件作为带有分区参数的箭头/pyarrow 数据集打开
  • 将数据集注册为 DuckDB 中的 View
  • 查询 View
import pyarrow.dataset as ds
import duckdb

con = duckdb.connect()

dataset = ds.dataset('Hierarchy.parquet", format="parquet", partitioning="hive")
con.register_arrow("Hierarchy", dataset)
con.execute("Select * from Hierarchy").df()

DuckDB 的直接支持会更好......但这工作正常并且很容易。

关于parquet - 在 DuckDB 中读取分区的 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71952623/

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