菜鸟科技网

kdb命令如何使用?

下面我将从几个方面为您详细介绍kdb+的命令:

kdb命令如何使用?-图1
(图片来源网络,侵删)
  1. 核心概念:q语言是命令的集合
  2. 基本分类和常用命令
  3. 实用命令和函数
  4. 重要提示:q是区分大小写的

核心概念:q语言是命令的集合

在q中,几乎所有的操作都是通过函数来完成的,这些函数既可以由语言内置,也可以由用户自定义,在q的交互式环境(q console)中,你输入的任何有效表达式都会被执行,其结果会立即显示。

42 不仅仅是一个数字,它本身也是一个函数,调用它会返回自身。 是一个加法函数。

q会话示例:

q)42  / 输入数字42,按回车
42    / q返回结果42
q)2+3 / 调用加法函数,参数是2和3
5     / 返回结果5
q)first 10 1 20 / 调用first函数,获取列表10 1 20的第一个元素
10

基本分类和常用命令

q的命令(函数)通常非常简洁,很多符号都承载了多重含义(多态),以下是按功能分类的一些核心命令。

kdb命令如何使用?-图2
(图片来源网络,侵删)

A. 数据类型 和 列表

q的核心数据结构是列表,所有数据,无论是单个数字、字符还是复杂对象,最终都以列表的形式存在。

命令/符号 描述 示例
int, float, boolean, char, symbol, date, timestamp, timespan, month, datetime, minute, second 基本数据类型 42 (int), 14 (float), 1b (true), a (char), `ibm (symbol), 10.27 (date)
enlist x 创建只包含x的单项列表 enlist 10 -> (10, )
list x y z ... 创建列表(用空格分隔元素) 10 20 30 -> 10 20 30
x, y 连接两个列表 10 20, 30 40 -> 10 20 30 40
x#y 从y中取前x个元素,或重复y x次 2#10 20 30 -> 10 20
3#10 -> 10 10 10
count x 返回列表x的元素个数 count 10 20 30 -> 3
first x, last x 获取列表的第一个或最后一个元素 first 10 20 30 -> 10
x[i] 获取列表的第i个元素 (索引从0开始) 10 20 30[1] -> 20
x[i;j] 获取嵌套列表的元素 (10 20; 30 40)[0;1] -> 20
til n 生成一个从0到n-1的列表 til 5 -> 0 1 2 3 4

B. 算术和比较运算符

这些运算符是原子操作,对列表的每个元素分别进行计算。

命令/符号 描述 示例
, , , 加、减、乘、除 10 20 30 + 1 -> 11 21 31
div, mod 整除、取模 10 div 3 -> 3
10 mod 3 -> 1
neg x 取负 neg 10 -> -10
, <>, <, >, <=, >= 等于、不等于、小于、大于、小于等于、大于等于 10 20 30 = 20 -> 0b 1b 0b (返回布尔列表)

C. 应用和修改

命令/符号 描述 示例
f/x 对列表x的每个元素应用函数f(一元应用) neg / 10 20 30 -> -10 -20 -30
x f/y 对列表y的元素从左到右累积应用函数f(二元折叠) + / 1 2 3 4 -> 10 (求和)
* / 1 2 3 4 -> 24 (求积)
x f'y 对列表y的元素从右到左累积应用函数f \ 1 2 3 4->1 - (2 - (3 - 4))->2`
x (f;y;z) 对列表x的每个元素应用函数f,参数为y,z(多元应用) 10 20 30 (+;5) -> 15 25 35
x f/: y 对x中的每个元素和y中的每个元素应用f(笛卡尔积) 10 20 (+/:) til 2 -> (10 11; 20 21)
set 给变量赋值 set a: 42 或直接 a: 42
, 赋值, 是局部赋值, 是全局赋值 a: 10 (局部)
b:: 20 (全局)

D. 条件和逻辑

命令/符号 描述 示例
if, then, else 条件判断 if[2 > 3; "yes"; "no"] -> "no"
and, or, not 逻辑与、或、非 1b and 0b -> 0b
not 1b -> 0b
x ? y 查找y在x中的位置(第一个匹配项的索引) 10 20 30 20 ? 20 -> 1
x in y 判断x是否在y中(返回布尔值) 20 in 10 20 30 -> 1b

E. 字典 和 表

字典是kdb+的核心数据结构,表可以看作是列名相同的字典列表

命令/符号 描述 示例
enlist[d] 创建只有一个键值对的字典 enlist[name]!John`` -> ``name|John``
`key1`key2 ! (val1; val2) | 创建字典 | `name`age ! (`John; 42) -> name| `John`<br>age| 42
d[key]| 获取字典中key对应的值 | ``(nameage ! (John; 42))[name]`` -> ``John``
d[key]: new_val| 修改字典中key对应的值 |d[name]:Jane`
xkey y 用x的列名创建表y ([] sym:ibmgoog; price:100 200)
select, update, delete 表查询/修改操作 select from t where price > 150
update price: price * 1.1 from t
delete from t where price < 50
exec 从表中提取指定列 exec price from t -> 100 200
by selectupdate配合使用,进行分组聚合 select sum price by sym from t

实用命令和函数

这些命令主要用于系统管理、调试和信息查看。

kdb命令如何使用?-图3
(图片来源网络,侵删)
命令 描述
\l <filename> 加载一个q脚本文件(.q)或数据库(.q.d
\s 显示当前工作空间中的所有变量和函数
\v 显示当前工作空间中的所有变量
\t <expression> 执行表达式并返回其耗时(纳秒级)
\p 显示或设置默认端口号
\z 显示或设置时区
\D 显示或设置调试级别
\g 显示或设置图形化选项
show x 打印x的值,常用于调试
value x 执行一个字符串形式的q代码
string x 将x转换为字符串
parse x 将字符串x解析为q数据
count each t 对表t的每一列应用count函数,得到每列的元素个数
desc x, asc x 对列表x进行降序或升序排序

重要提示:q是区分大小写的

这一点至关重要,也是初学者常犯的错误。

  • ibmIBM 是两个完全不同的符号。
  • MyFuncmyfunc 是两个不同的函数。
  • Tabtab 是两个不同的变量。

kdb+/q的命令体系设计哲学是简洁、高效、函数化,要熟练掌握它,最好的方式就是:

  1. 打开q控制台,亲手尝试每一个命令。
  2. 从列表和基本运算开始,理解原子操作的概念。
  3. 深入学习字典和表,它们是处理结构化数据的基石。
  4. 练习查询select, update, exec, by 是日常数据分析的核心。

希望这份详细的命令列表对您有所帮助!如果您有更具体的问题,比如如何实现某个功能,可以随时提出。

分享:
扫描分享到社交APP
上一篇
下一篇