• 从 Kdb+ 到 DolphinDB


    一直以来,Kdb+ 以程序体积小、代码简洁、运行速度快而闻名。它是美国华尔街各大金融机构20多年来处理大规模时序数据的首选系统,通常用于高频交易,非常适用于高速存储、分析、处理和检索时序数据集。Kdb+ 还提供了专门的编程语言 q 语言,简洁而且灵活,天生具有处理大规模时序数据的能力。

    2018年初发布的 DolphinDB,同样是性能极佳的时间序列数据库。作为一款国产的高性能分布式数据库产品,DolphinDB 迅速崛起,成为国内头部券商、私募公募的首选方案。DolphinDB 功能强大的编程语言和高容量高速度的流数据分析系统,能在满足低延时高吞吐量数据读写的要求的同时,轻松实现因子挖掘、流式计算、股票行情回放、实时计算高频因子等功能,为金融和物联网领域的数据存储和分析计算提供一站式解决方案。近几年来,DolphinDB 天然的分布式构架,强大的流式增量计算能力,丰富的函数库,以及易用性等优势吸引了大量海内外用户使用 DolphinDB 代替 Kdb+。

    本教程旨在为 Kdb+ 使用者迁移到 DolphinDB 提供一份简明的参考,考察了两者的相同点和区别,介绍了如何将 Kdb+ 数据迁移到 DolphinDB,并总结了从 Kdb+ 到 DolphinDB 编程语法方面的映射。

    1. Kdb+ vs DolphinDB

    Kdb+诞生于上世纪90年代末,主要用于金融场景的数据处理。DolphinDB 的首次发布在2018,相隔 Kdb+ 20年。

    1.1 DolphinDB 与 Kdb+ 的相同点

    1)数据库类型

    DolphinDB 和 Kdb+ 都是列存储的时间序列数据库,都包括磁盘数据库和内存数据库,同样支持并鼓励对表进行分区。数据库系统都包括了编程语言,非常适合库内开发重度的数据应用。

    2)编程语言

    DolphinDB 和 Kdb+ 在编程语言方面有许多相似的地方。DolphinDB 同样支持元编程、向量处理和函数式编程,部分 SQL 语句可以在 DolphinDB 脚本中直接使用。Kdb+ 的数据类型、函数和关键字大多能在 DolphinDB 中找到对应,大部分的 Kdb+ 脚本都可以一对一翻译为 DolphinDB 脚本。

    3)金融支持

    DolphinDB 和 Kdb+ 都对金融领域有非常好的支持。作为列式存储的时序数据库,两者不仅有着常规数据库的精确性、稳定性和安全性,还在存储和处理结构化时间序列数据的场景下有天然的优势,并且都支持对向量、矩阵、表等多种类型的数据进行数值分析的操作,非常适合追求高性能和高灵活性的金融应用领域。此外,DolphinDB 和 Kdb+ 还都具备对海量流数据进行实时分析的能力,是流数据库、内存数据库和历史数据三合一的全栈数据平台。

    1.2 DolphinDB 与 Kdb+ 的区别

    1)系统架构

    DolphinDB 和 Kdb+ 在架构上有很大的不同。DolphinDB 的构架引入了分布式文件系统,天然具备数据高可用、系统高容错、集群易扩展等分布式系统设计所带来的优势。相比之下,主要基于高性能计算机设计的 Kdb+,虽然也能通过脚本修改路由网关的方式,运行在多服务器集群上,但这种方式具有很大的局限性。除了集群的部署难度和扩展性受限,Kdb+ 很难像 DolphinDB 一样实现自动平衡节点负载来提升并行计算的性能,或是在某个节点故障时保证系统的高可用性。

    2)多用户接入支持

    DolphinDB 相对于 Kdb+ 在架构上的优势还体现在它对多线程的支持上。DolphinDB 支持多用户同时接入系统进行作业,用户可以使用 Web 端管理页面、VS code 插件或是桌面端的 DolphinDB GUI 连接服务器运行脚本。而 Kdb+ 虽然支持并发运算,它对多用户并发任务的支持却没有那么完善,一个运行非常耗时的任务作业就会导致整个数据库系统的阻塞,从而无法响应其他用户。实际生产中,这个缺陷在临近市场开放和结束的一段时间里可能会造成问题。

    同时,Kdb+ 对多用户接入的设计是让所有用户共享一个 session,用 domain 来区分不同用户创建的变量或自定义函数,但不强制要求用户创建自己的namespace。而 DolphhinDB 为每一个用户创建自己的session,相互之间不可见,自定义变量和函数的共享则通过使用 share 关键字以及创建 module 或 functionView 的方式实现。相对而言,Kdb+ 的用户 session 管理机制对用户自己操作规范的要求更高。

    3)数据库特性

    DolphinDB 和 Kdb+ 磁盘存储的模式不同。Kdb+ 使用离线存储模式,数据持久化需要频繁读写磁盘,在部分应用场景会因为 IO 的限制而效率较低。DolphinDB 使用在线存储,可以保持数据随时可用的状态。

    此外,DolphinDB 数据库还有许多 Kdb+ 没有的特性。DolphinDB 内置了 OLAP 和 TSDB 双引擎,对事务的 ACID 有严格的支持。DolphinDB 提供包括技术分析指标库(TA-lib)、MyTT(My麦语言 T通达信 T同花顺)指标库和 WorldQuant 101 Alpha 因子指标库在内的1000多个内置函数,能更好地支持金融领域的应用场景。针对高频数据的实时分析处理,DolphinDB 内置多种流计算引擎,支持增量计算和并发计算,窗口函数的性能不受限于窗口长度,能很好地满足物联网和金融领域的应用需求。

    4)编程友好

    DolphinDB 和 Kdb+ 编程语言的设计理念有很大不同。Kdb+ 要求代码尽可能简短,来减小整个程序的footprint,从而换取更少的访存时间。Kdb+ 编程语言对同一操作符做了多种重载,表达式从左到右解析,运算符没有优先级,错误信息也非常简单。而 DolphinDB 的编程语言设计上非常注重代码的可读性,语法更接近 Python,表达式跟大部分编程语言的习惯相同,从右到左解析,并尊重运算符的优先级。DolphinDB 编程语言可读性高,上手难度低,代码更容易更新维护,是比 Kdb+ 更加适合现代软件工程团队协作的编程语言。

    5)中文友好

    与 Kdb+ 相比,DolphinDB 对中文用户更加友好。DolphinDB 由浙江智臾科技有限公司自主研发,有丰富的中文教程和交流氛围良好的技术交流社区,DolphinDB 团队也在不断地对产品进行更新和维护。

    2. 从 Kdb+ 导入数据到 DolphinDB

    DolphinDB 为导入 Kdb+ 数据提供插件支持,插件代码已开源在 github/gitee 平台,具体使用请参考 github 上的教程gitee 上的教程

    DolphinDB 的 Kdb+ 插件为用户提供了两种数据导入方式:连接正在运行的 Kdb+ 数据库,以 Kdb+ 数据库作为中间管道导入数据;直接读取磁盘上的 Kdb+ 数据文件进行导入。两种方式都会将数据加载为 DolphinDB 的内存表。

    使用 DolphinDB 的 Kdb+ 插件导入数据,在脚本中用 loadPlugin("/path/to/plugin/PluginKDB.txt") 语句加载插件,就可以用插件提供的函数进行数据导入。对于第一种导入方式,首先需要使用 connect 函数建立与 Kdb+ 数据库的连接,获取连接句柄,之后可以用 close 函数断开连接。使用 loadTable 函数通过 Kdb+ 数据库读取数据,需要提供表文件的路径和 sym 文件路径,sym 文件路径可以为空。

    1. // 加载插件
    2. loadPlugin("/home/DolphinDBPlugin/kdb/build/PluginKDB.txt")
    3. // 确保插件加载完毕再执行之后的代码
    4. go
    5. // 连接 kdb+ 数据库,用户名和密码字段可以为空
    6. handle = kdb::connect("127.0.0.1", 5000, "admin:123456")
    7. // 指定文件路径
    8. DATA_DIR="/home/kdb/data/kdb_sample"
    9. // 通过 loadTable,加载数据到 DolphinDB
    10. Daily = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Daily/", DATA_DIR + "/sym")
    11. Minute = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Minute", DATA_DIR + "/sym")
    12. Ticks = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Ticks/", DATA_DIR + "/sym")
    13. Orders = kdb::loadTable(handle, DATA_DIR + "/2022.06.17/Orders", DATA_DIR + "/sym")
    14. // 关闭连接
    15. kdb::close(handle)

    对于第二种文件导入方式,使用 loadFile 函数直接读取磁盘上的 Kdb+ 文件,需要提供表文件的路径和可选的 sym 文件路径,sym 文件路径可以为空。

    1. // 加载插件
    2. loadPlugin("/home/DolphinDBPlugin/kdb/build/PluginKDB.txt")
    3. // 确保插件加载完毕再执行之后的代码
    4. go
    5. // 指定文件路径
    6. DATA_DIR="/home/kdb/data/kdb_sample"
    7. // 通过 loadFile,加载数据到 DolphinDB
    8. Daily2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Daily", DATA_DIR + "/sym")
    9. Minute2= kdb::loadFile(DATA_DIR + "/2022.06.17/Minute/", DATA_DIR + "/sym")
    10. Ticks2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Ticks/", DATA_DIR + "/sym")
    11. Orders2 = kdb::loadFile(DATA_DIR + "/2022.06.17/Orders/", DATA_DIR + "/sym")

    3. 给 Kdb+ 使用者的 DolphinDB 语法参考

    本节的编写基于 Kdb+ 和 q 官方参考文档DolphinDB 2.0用户手册

    本节所提及的 Kdb+ 函数或关键字在 DolphinDB 中的对应,仅保证功能上的可替代性,使用方法可能与原函数略有差异。建议在实际使用前查阅 DolphinDB 2.0用户手册

    3.1 数据类型

    3.1.1 基本数据类型

    Kdb+ 数据类型

    DolphinDB 数据类型

    举例

    字节数

    范围

    VOID

    NULL

    Void

    boolean

    BOOL

    1b, 0b, true, false

    1

    0~1

    byte

    char

    CHAR

    'a', 97c

    1

    -2 7 +1~2 7 -1

    short

    SHORT

    122h

    2

    -2 15 +1~2 15 -1

    int

    INT

    21

    4

    -2 31 +1~2 31 -1

    long

    LONG

    22, 22l

    8

    -2 63 +1~2 63 -1

    real

    FLOAT

    2.1f

    4

    有效位数:06~09 位

    float

    DOUBLE

    2.1

    8

    有效位数:15~17 位

    date

    DATE

    2013.06.13

    4

    month

    MONTH

    2012.06M

    4

    time

    TIME

    13:30:10.008

    4

    minute

    MINUTE

    13:30m

    4

    second

    SECOND

    13:30:10

    4

    (datetime)

    DATETIME

    2012.06.13 13:30:10 or 2012.06.13T13:30:10

    4

    TIMESTAMP

    2012.06.13 13:30:10.008 or 2012.06.13T13:30:10.008

    8

    DATEHOUR

    2012.06.13T13

    4

    timespan

    NANOTIME

    13:30:10.008007006

    8

    timestamp

    NANOTIMESTAMP

    2012.06.13 13:30:10.008007006 or 2012.06.13T13:30:10.008007006

    8

    symbol

    SYMBOL

    4

    STRING

    "Hello" or 'Hello' or `Hello

    guid

    UUID

    5d212a78-cc48-e3b1-4235-b4d91473ee87

    16

    • DolphinDB 目前没有可以直接对应 Kdb+ 中 byte 的数据类型。

    • Kdb+ 中的 char 类型使用双引号标识,而 DolphinDB 的 CHAR 使用单引号。"c" 在 DolphinDB 中会被识别为字符串。

    • Kdb+ 中的 long 类型与 DolphinDB 的 LONG 数据类型符号不同。一个值为42的长型整数若表示为 42j,则无法被 DolphinDB 识别。

    • Kdb+ 中的 month 类型与 DolphinDB 的 MONTH 数据类型符号不同,2006.07m 在 DolphinDB 中会报错。对于时间类型的值,DolphinDB 用小写字母 m 作分钟类型的后缀,而月份类型的后缀使用了大写字母 M。

    • DolphinDB 中 DATETIME 类型大小为4字节,而 Kdb+ 中 datetime 类型大小为8字节。

    • DolphinDB 的 SYMBOL 类型是特殊的字符串类型,相当于枚举类型,数据在 DolphinDB 系统内部存储为一个整数,因此数据排序和比较更有效率。具体使用请参照《DolphinDB 2.0用户手册》中“数据类型”一节。

    关于 NULL 和 INF

    与 Kdb+ 不同,DolphinDB 没有专门用于表示各个类型正负无穷值的字面量,类型数据溢出时,会被处理为该类型的 NULL 值。通常,在赋值语句或表达式中使用无返回值的函数时,也会得到一个 VOID 类型的 NULL。

    通过函数 isVoid 判断是否为 VOID 类型的 NULL,通过函数 isNullisValid 可以检查所有 NULL 值,包括 VOID 和有类型的 NULL。对于不关心 NULL 类型的用户,建议使用 isNullisValid 进行条件判断。

    对于 NULL 值的初始化、运算,以及在普通向量函数、聚合函数和高阶函数中的使用方法,《DolphinDB 2.0用户手册》中“NULL 值的操作”一节有详细的说明。

    3.1.2 其他数据类型

    Kdb+ 数据类型

    DolphinDB 数据结构

    举例

    list

    ANY, MATRIX, DICTIONARY

    (1,2,3)

    enums

    anymap

    ANY DICTIONARY, DICTIONARY

    {a:1,b:2}

    dictionary

    table

    IN-MEMORY TABLE

    • ANY DICTIONARY 是 DolphinDB 中表示 JSON 的数据类型。

    • DolphinDB 的字典支持嵌套,键必须是标量,值可以是任何数据形式与数据类型。Kdb+ 的字典在输出或进行遍历时,键值对会保留输入时的顺序,而 DolphinDB 的字典按照 key 在 bucket 内的顺序输出键值对。

    • Kdb+ 的矩阵由嵌套的 list 表示,遵循行优先。DolphinDB 的矩阵有专门的数据类型 matrix,遵循列优先,Kdb+ 矩阵输入到 DolphinDB 时需要转换方向。

    • DolphinDB支持包括标量、向量、数据对、矩阵、集合、字典和表在内的多种数据形式,并针对不同的使用场景做了具体优化,请参考《DolphinDB 2.0文档》中“数据形式”一节。

    3.1.3 数据类型检查函数

    DolphinDB提供了 typestrtype 这两个用于检查数据类型。typestr 返回的是数据类型的名称(字符串常量);type 返回的是数据类型 ID(整数)。

    3.2 关键字

    3.2.1 control 类

    Kdb+

    DolphinDB

    do

    do-while

    exit

    if

    if-else

    while

    do-while

    3.2.2 env 类

    Kdb+

    DolphinDB

    getenv

    getEnv

    gtime

    gmtime

    ltime

    localtime

    setenv

    3.2.3 interpret 类

    Kdb+

    DolphinDB

    eval

    eval

    parse

    parseExpr

    reval

    show

    print

    system

    shell

    value

    查询字典、表的值:

    values

    查询普通变量的值:

    print

    将字符串作为元代码执行:

    parseExpr

    将列表作为元代码执行:

    expr

    3.2.4 join 类

    join 方式

    Kdb+

    DolphinDB

    as-of join

    aj, aj0, ajf, ajf0, asof

    aj

    equal join

    ej

    ej, sej

    innner join

    ij, ijf

    inner join

    left join

    lj, ljf

    lj, lsj

    plus join

    pj

    union join

    uj, ujf

    window join

    wj, wj1

    wj, pwj

    3.2.5 list 类

    Kdb+

    DolphinDB

    count

    非NULL元素个数:

    count

    包括NULL的元素个数:

    size

    mcount

    mcount

    cross

    join:C, cross(join, X, Y)

    cut

    cut

    enlist

    [], array, bigArray

    except

    fills

    ffill, ffill!

    first

    first

    last

    last

    flip

    flip, transpose

    group

    groups

    in

    in

    inter

    intersection(set(X), set(Y))

    next

    next

    prev

    prev

    xprev

    move

    raze

    将一个矩阵或一系列向量转换成一维向量:

    flatten

    reverse

    reverse

    rotate

    sublist

    head, tail, subarray, subtuple

    sv

    连接字符、字符串向量:

    concat

    til

    til

    union

    union(set(X), set(Y))

    distinct(join(X, Y))

    vs

    分割字符串:

    split

    where

    3.2.6 logic 类

    Kdb+

    DolphinDB

    all

    all

    and

    and

    any

    any

    not

    not

    or

    or

    3.2.7 math 类

    Kdb+

    DolphinDB

    abs

    abs

    cos

    cos

    acos

    acos

    sin

    sin

    asin

    asin

    tan

    tan

    atan

    atan

    avg

    avg, mean

    avgs

    cumavg

    ceiling

    ceil

    cor

    corr

    cov

    scov

    covar

    deltas

    deltas

    dev

    stdp

    mdev

    mstdp

    sdev

    std

    div

    div

    ema

    ema

    exp

    exp

    xexp

    pow

    floor

    floor

    inv

    inverse

    log

    log

    xlog

    lsq

    mavg

    mavg

    wavg

    wavg

    max

    max

    maxs

    cummax

    mmax

    mmax

    med

    med

    min

    min

    mins

    cummin

    mmin

    mmin

    mmu

    dot

    mod

    mod

    sum

    sum

    sums

    cumsum

    msum

    msum

    wsum

    wsum

    neg

    neg

    prd

    prod

    prds

    cumprod

    rand

    rand

    ratios

    ratios

    reciprocal

    reciprocal

    signum

    signum

    sqrt

    sqrt

    within

    between, in

    var

    varp

    svar

    var

    • DolphinDB 的 TA-lib 系列函数窗口确定规则与 Kdb+ 不同,会忽略元素开头的空值,并将这些空值保留到结果中,然后从第一个非空元素开始进行滑动窗口的计算。当以元素个数衡量窗口时,根据滑动窗口的计算规则,只有当 window 内的元素填满窗口时,才开始第一次计算,即前(window - 1)个元素的计算结果默认为 NULL。

    • DolphinDB 的 m 系列(滑动窗口系列)函数的窗口确定规则,在没有指定 minPeriods 参数的情况下,将前 (window - 1)个元素视为 NULL。若要得到与 Kdb+ 相同的计算结果,请将 minPeriods 参数指定为1。

    • DolphinDB 的 ratios 函数,若输入参数是向量,返回结果的第一个元素是 NULL。

    3.2.8 meta 类

    Kdb+

    DolphinDB

    attr

    null

    isNull, isNothing, isVoid

    tables

    getTables

    type

    type, typestr, form

    view, views

    3.2.9 SQL类

    Kdb+

    DolphinDB

    delete

    delete, sqlDelete

    exec

    exec

    fby

    contextby

    select

    select

    update

    更改记录:

    update, sqlUpdate

    添加新的记录:

    insert into

    添加新的列:

    alter, addColumn

    3.2.10 sort 类

    Kdb+

    DolphinDB

    asc

    sort, sort!

    iasc

    isort, isort!

    xasc

    sortBy!

    bin, binr

    binsrch

    desc

    sort, sort!

    idesc

    isort, isort!

    xdesc

    sortBy!

    differ

    valueChanged

    distinct

    distinct

    rank

    rank

    xbar

    bar

    xrank

    bucket

    3.2.11 table 类

    Kdb+

    DolphinDB

    cols

    columnNames

    xcol

    rename!

    xcols

    reorderColumns!

    csv

    csv 格式分隔符:

    ,

    fkeys, key, keys, xkey

    insert

    insert into, tableInsert, append!, push!

    meta

    schema

    ungroup, xgroup

    upsert

    insert into, tableInsert, append!, push!

    xasc

    sortBy!

    xdesc

    sortBy!

    3.2.12 text 类

    Kdb+

    DolphinDB

    like

    like, iliek

    lower

    lower

    upper

    upper

    trim

    trim

    ltrim

    ltrim

    rtrim

    rtrim

    md5

    md5

    ss

    regexFind

    ssr

    regexReplace

    string

    string

    3.2.13 自定义函数

    Kdb+

    DolphinDB

    signed lambda:

    f:{[x;y](x*x)+(y*y)+2*x*y}

    unsigned lambda:

    {(x*x)+(y*y)+2*x*y}[20;4]

    命名函数:

    def func(x, y) { return (x*x)+(y*y)+2*x*y; }

    匿名函数:

    def (x, y) { return (x*x)+(y*y)+2*x*y; }

    lambda表达式(只有一个语句的函数):

    def func(x,y):(x*x)+(y*y)+2*x*y;

    def(x,y):(x*x)+(y*y)+2*x*y;

    def(x,y)-> (x*x)+(y*y)+2*x*y;

    x->x*x

    • 在 Kdb+ 的语法中,“lambda”与“function“这两个词是等价、可互换的。而在 DolphinDB 中,lambda 表达式是只有一个语句的函数。

    • Kdb+ 允许无参数列表的函数定义,会默认 x, y, z 按顺序作为可使用的参数名。而 DolphinDB 要求自定义函数必须有非空或者空的参数列表。

    • DolphinDB 支持在定义函数时使用默认参数,支持使用 const 和 mutable 关键字修饰参数。

    1. // default argument
    2. def func(x=1): x+1;
    3. // mutable argument
    4. def i2t(mutable tb) { return tb.replaceColumn!(`time, time(tb.time/10); }
    • DolphinDB 对自定义函数支持即时编译(JIT),能保证函数的执行效率。

    • DolphinDB 允许自定义函数使用内置函数的全部调用方式,即可以用标准格式(前缀)和对象方法格式(后缀)调用用户的自定义函数,若用户定义函数的参数数量为一个或两个,还可以使用运算符格式(中缀)调用函数。

    1. def f(x, y): x+y+1;
    2. p = 2;
    3. q = 3;
    4. f(p, q); // standard
    5. p.f(q); // method of object
    6. p f q; // operator

    3.3 运算符

    与 Kdb+ 相同,DolphinDB 的运算符根据作用对象的数目可分为一元运算符和二元运算符。DolphinDB 支持许多类型的基本运算符,包括算术运算符、布尔运算符、关系运算符、成员运算符等,以及多种运算数据类型,包括标量、向量、集合、矩阵、字典和表。

    与 Kdb+ 不同的是,DolphinDB 表达式的运算顺序是从左往右,也存在运算符优先级的概念。DolphinDB 的运算符优先级顺序与大多数编程语言相似,表达式中优先级最高的运算符首先被执行,具有相同优先级的运算符则按从左到右的顺序执行。

    Kdb+ 符号

    Kdb+ 含义

    DolphinDB

    .

    Apply

    call()

    Index

    []

    Trap

    try-catch

    Amend

    @

    Apply At

    call()

    Index At

    []

    Trap At

    try-catch

    Amend At

    $

    Cast

    $, cast()

    Tok

    类型转换函数可直接转换字符串

    Enumerate

    Pad

    lpad(), rpad()

    mmu

    **

    !

    Dict

    dict()

    Enkey, Unkey, Enumeration, Flip Splayed, internal

    Display

    print()

    Update

    update(), update!()

    Delete

    erase!()

    ?

    Find

    in(), find()

    Roll

    rand()

    Deal, Enum Extend

    Select

    select

    Exec, Simple Exec

    exec

    Vector Conditional

    iif()

    +

    Add

    +

    -

    Substract

    -

    *

    Multiply

    *

    %

    Divide

    \

    =

    Equals

    ==

    <>

    Not Equals

    !=

    ~

    Match

    <

    Less Than

    <

    <=

    Up To

    <=

    >=

    At Least

    >=

    >

    Greater Than

    >

    |

    Greater

    max()

    OR

    |

    &

    Lesser

    min()

    AND

    &

    #

    Take

    take()

    Set Attribute

    _

    Cut

    cut()

    Drop

    drop()

    :

    Assign

    =

    ^

    Fill

    ffill(), ffill!()

    Coalesce

    append!()

    ,

    Join

    <-

    '

    Compose

    0: 1: 2:

    File Text, File Binary, Dynamic Load

    loadText(), saveText()

    0 ±1 ±2 ±n

    write to console, stdout, stderr, handle n

    print()

    3.4 副词

    Kdb+ 和 DolphinDB 中的副词,也就是高阶函数,是以一个函数与数据对象作为输入内容的函数,用以扩展或增强函数或者运算符的功能。通常,输入数据首先以一种预设的方式被分解成多个数据块(可能重叠),然后将函数应用于每个数据块,最后将所有的结果组合为一个对象返回。

    Kdb+ 中副词的作用对象是 list,而 DolphinDB 高阶函数的输入数据可以是标量、向量、矩阵、字典或表。通常来说,一个向量被分解成多个标量,一个矩阵被分解成多列(向量),一个表被分解成多行(字典)。在组装阶段,标量类型合并组成一个向量,向量合并成一个矩阵,字典合并成一张表。DolphinDB 高阶函数按元素遍历向量,按列遍历矩阵,按行遍历表。

    Kdb+ 符号

    Kdb+ 含义

    DolphinDB

    '

    Each, each

    each():E

    Case

    Each Parallel, peach

    peach()

    Each Prior, prior

    eachPre():P

    /:

    Each Right

    eachRight():R

    \:

    Each Left

    eachLeft():L

    /

    Over, over

    reduce():T

    \

    Scan, scan

    accumulate():A

    3.5 执行控制

    Kdb+ 符号

    Kdb+ 含义

    DolphinDB

    .[f;x;e]

    Trap

    try-catch

    @[f;x;e]

    Trap-At

    try-catch

    :

    Return

    return

    '

    Signal

    throw

    do

    do-while

    exit

    quit

    while

    do-while

    if

    if-else

    $[x;y;z]

    Cond

    if-else

    x:y

    Assign

    =

    x[i]:y

    Indexed assign

    [index]=

    x op:y, op:[x;y]

    x[i]op:y, op:[x i;y]

    Assign through operator

    支持以下运算符扩展的赋值:

    +=, -=. *=, /=, \=

    \t

    Timer

    timer

    • DolphinDB 支持多变量赋值,可将一个或多个值一次性赋予多个变量。

    • DolphinDB 支持引用赋值,直接引用原值的内存地址来避免不必要的拷贝,有效地节约内存空间。例如,对于交换两个变量的值的操作,引用赋值的效率高于按值赋值的效率。

    1. n=20000000;
    2. x=rand(200000.0, n);
    3. y=rand(200000.0, n);
    4. timer x, y = y, x; // Time elapsed: 1240.119 ms
    5. timer {&t=x;&x=y;&y=t;} // Time elapsed: 0.004 ms
    • DolphinDB 允许用户通过取消变量或函数定义来手动释放内存。使用 undef=NULL,详情请参考《DolphinDB 2.0用户手册》。

  • 相关阅读:
    文件IO(Linux)
    mediasoup学习与实践
    浏览器复制功能
    计算机网络连接的主要对象是什么
    Oracle GoldenGate(OGG)到入土
    边缘计算显现更多硬核价值——车企应用场景探索
    【Python第三方包】爬虫前言(request包)
    Elasticsearch(简称ES)简易介绍
    爬虫入门到精通_框架篇18(Scrapy中选择器用法)_sector,xpath,css,re
    第16章总结
  • 原文地址:https://blog.csdn.net/qq_41996852/article/details/127682784