我试图使用DuckDB来显示用户创建的模式,我已经写进了一个Parquet文件。我可以在Python中演示(使用代码示例在Python中的获得模式的parque文件),模式是我想要的,但似乎无法在DuckDB中找到获取此信息的方法。
以下查询均不报告用户创建的架构
select * from parquet_schema('FileWithMetadata.parquet')
select * from parquet_metadata('FileWithMetadata.parquet')
更新:
以下是在Parquet文件中创建元数据的代码片段,其中a是用于许多不同模拟的每日盆地流的Pandas数据帧:
table = pa.Table.from_pandas(a)
my_schema = pa.schema([
pa.field("Flow", "float", True, metadata={"data":"flow in mm per day"}),
pa.field("DayIndex", "int64", False, metadata={"data":"index of days"}),
pa.field("BasinIndex", "string", True, metadata={"data":"flow in mm per day"}),
pa.field("Simulation", "int64", True, metadata={"data":"simulation number"})
],
metadata={"info":"long format basin flows"})
t2 = table.cast(my_schema)
pq.write_table(t2, 'SHALongWithMetadata1.parquet')
读回它的代码是:
import pyarrow.parquet as pq
pfile = pq.read_table("C:\Projects\CSDP\PythonCSDP\Parquet\SHALongWithMetadata1.parquet")
print("Column names: {}".format(pfile.column_names))
print("Schema: {}".format(pfile.schema))
这产生了输出:
Column names: ['Flow', 'DayIndex', 'BasinIndex', 'Simulation']
Schema: Flow: float
-- field metadata --
data: 'flow in mm per day'
DayIndex: int64 not null
-- field metadata --
data: 'index of days'
BasinIndex: string
-- field metadata --
data: 'flow in mm per day'
Simulation: int64
-- field metadata --
data: 'simulation number'
-- schema metadata --
info: 'long format basin flows'
使用DESCRIBE关键字:
DESCRIBE
SELECT *
FROM 'FileWithMetadata.parquet';
DESCRIBE TABLE
'FileWithMetadata.parquet';
表函数parquet_metadata
为Parquet文件中的每个行组重复相同的信息,因此使用SELECT DISTINCT
仅报告一组唯一的列名和类型:
SELECT DISTINCT
path_in_schema,
type
FROM parquet_metadata('FileWithMetadata.parquet');