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

如何动态构建HDB查询:支持byClause、selectCols、whereCols配置

实现动态构建HDB查询语句的get_hdb_data函数

完整函数实现

get_hdb_data:{[args]
    // 提取参数并设置默认值
    startDate: args[`startDate];
    endDate: args[`endDate];
    syms: args[`syms];
    valid: args[`valid];
    byCols: @[args; `byCols; ::; `];  // 默认不分组
    selCols: @[args; `selCols; ::; `];  // 默认查询全列

    // 构建WHERE筛选条件
    whereCond: ();
    // 添加日期范围筛选(仅当起止日期都存在时)
    if[not null startDate; not null endDate; whereCond,:=(date; within; (startDate; endDate))];
    // 添加sym筛选(仅当syms不是`时)
    if[syms ~/: `; whereCond,:=(sym; in; syms)];
    // 添加is_active状态筛选
    if[not null valid; whereCond,:=(is_active; =; valid)];

    // 处理查询列:全列或指定列
    selectCols: $[selCols ~ `; cols tab; selCols];

    // 处理分组子句:无分组或按指定列分组
    byClause: $[byCols ~ `; (); (byCols; ())];

    // 执行函数式查询
    ?[tab; whereCond; byClause; selectCols]
}

功能说明

参数处理逻辑

  • 可选参数byCols/selCols默认值为`,分别代表「不分组」和「查询全列」
  • 必填参数包含startDate/endDate(日期范围)、syms(sym筛选规则)、valid(is_active状态)

WHERE条件动态生成

  • 日期范围:仅当startDate和endDate都非空时,添加date within (startDate; endDate)筛选
  • Sym筛选:当传入的syms不是时,添加sym in syms筛选;传入则跳过该条件(查询全量sym)
  • 状态筛选:根据valid值添加is_active = valid筛选

列与分组处理

  • 查询列:若selCols为`,自动读取表的所有列;否则使用指定列列表
  • 分组:若byCols为`,不执行分组;否则按指定列列表分组(无聚合函数时直接返回分组后的数据)

执行方式

采用KDB+原生的函数式查询语法执行,比字符串拼接更安全,避免注入风险,同时保持查询性能。

测试用例

1. 筛选指定sym与状态

args1: (`startDate`endDate`syms`valid)!(.z.d-10; .z.d; `GOOGL`MSFT; 1b);
get_hdb_data[args1];

等价于手动查询:

select from tab where date within (.z.d-10; .z.d), sym in `GOOGL`MSFT, is_active=1b

2. 全sym+单分组

args2: (`startDate`endDate`syms`valid`byCols)!(.z.d-10; .z.d; `; 1b; `sym);
get_hdb_data[args2];

等价于手动查询:

select by sym from tab where date within (.z.d-10; .z.d), is_active=1b

3. 指定查询列+多列分组

args3: (`startDate`endDate`syms`valid`byCols`selCols)!(.z.d-10; .z.d; `; 1b; `date`sym`group_name_symbol; `sym`ranks);
get_hdb_data[args3];

等价于手动查询:

select sym,ranks by date,sym,group_name_symbol from tab where date within (.z.d-10; .z.d), is_active=1b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:15:02