You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame写入磁盘上的kdb+分区表

将Pandas DataFrame写入kdb+磁盘分区表的方法

要将Pandas DataFrame写入kdb+的磁盘分区表,核心是利用kdb+内置的分区表写入函数(比如.Q.dpft),配合qPython完成数据传递与执行。以下是具体实现步骤和代码示例:

前提准备

  • 确保kdb+服务器有目标分区目录的读写权限,可提前在服务器端创建分区根目录(比如/data/partitioned_db),也可通过代码调用系统命令创建。
  • DataFrame需要包含分区字段(最常用的是日期字段date,也可根据业务选择其他字段),且字段类型需与kdb+对应(比如日期字段要转为kdb+的date类型)。

代码实现

1. 准备带分区字段的DataFrame并写入分区表

import pandas as pd
from qpython import qconnection

# 构造包含分区字段date的DataFrame
df = pd.DataFrame({
    'sym': ['abc', 'def', 'ghi', 'abc', 'def'],
    'price': [10.1, 10.2, 10.3, 10.4, 10.5],
    'date': ['2024-05-20', '2024-05-20', '2024-05-20', '2024-05-21', '2024-05-21']
})
# 将date字段转为kdb+兼容的date类型(映射为q的date类型)
df['date'] = pd.to_datetime(df['date']).dt.date

# 连接kdb+服务器
with qconnection.QConnection(host='localhost', port=5001, pandas=True) as q:
    # 自动创建分区根目录(若不存在)
    q.sendSync('system "mkdir -p /data/partitioned_db"')
    
    # 调用kdb+内置函数.Q.dpft写入分区表
    # 参数说明:分区根目录、分区字段、目标表名、要写入的DataFrame
    q.sendSync('.Q.dpft[`/data/partitioned_db;`date;`t;x]', df)

2. 查询分区表数据

with qconnection.QConnection(host='localhost', port=5001, pandas=True) as q:
    # 方式1:加载整个分区表到内存后查询
    q.sendSync('t::.Q.par[`/data/partitioned_db;`t]')
    df_all = q.sendSync('select from t')
    
    # 方式2:直接查询指定分区,无需加载全表(更高效)
    df_target = q.sendSync('select from .Q.par[`/data/partitioned_db;`t] where date=2024.05.20')
    print(df_target)

关键说明

  • .Q.dpft是kdb+专门用于写入分区表的内置函数,会自动根据分区字段的值,将数据拆分到对应子目录的分区文件中。
  • 若需要追加数据到已有分区表,直接重复调用.Q.dpft即可,函数会自动将新数据追加到对应分区的文件里。
  • 确保DataFrame的字段类型与kdb+匹配,比如字符串字段对应q的symbol类型,数值字段对应float/long等,qPython会自动完成大部分类型映射,但日期字段需手动转换为python的date对象。

内容的提问来源于stack exchange,提问作者ningl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:47:50