提问者:小点点

如何使用DuckDB在Parquet文件中显示用户模式?


我试图使用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'

共1个答案

匿名用户

使用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');