【问题标题】:How to change data type in KDb+?如何更改 KDb+ 中的数据类型?
【发布时间】:2018-08-24 06:22:18
【问题描述】:

我在 KDb+ 中创建了如下表:

test:([doc_id:`symbol$()];doc_displayid:`symbol$();doc_created_date:`date$();doc_aacess_date:`timestamp$();is_native_exist:`boolean$();file_size:`real$())

现在我想将 doc_id 列的数据类型从 symbol 更改为 int

如何更改测试表和更改数据类型

【问题讨论】:

    标签: kdb alter-table


    【解决方案1】:

    您需要先将列转换为字符串,然后才能将其转换为 int:

    q)update "I"$string doc_id from test
    doc_id| doc_displayid doc_created_date doc_aacess_date is_native_exist file_s..
    ------| ---------------------------------------------------------------------..
    

    您可以使用meta 验证新类型:

    q)meta update "I"$string doc_id from test
    c               | t f a
    ----------------| -----
    doc_id          | i
    doc_displayid   | s
    doc_created_date| d
    doc_aacess_date | p
    is_native_exist | b
    file_size       | e
    

    【讨论】:

    • 为什么要转成字符串?
    • 我已经检查了在转换为整数之前不需要转换为字符串。谢谢@thomas-smyth
    • 如果您尝试直接从 symbol 转换为 int,您会发现它会抛出错误(例如 "I"$`123`456)。转换为字符串基本上是两种类型之间的中间人。
    • 正如你为什么必须将其转换为字符串:kdb 中的符号是内部字符串,即所有字符串值的唯一副本存储在全局字典中,符号只是对该字典的引用.结果,当您编写 "I"$`123 时,您实际上要转换的是参考(将其想象为尝试更改盒子上的标签,而不是盒子里的东西!)当您编写 "I"$string `123 时,您首先会得到参考指向的值,然后您将其转换(更改框中的内容)希望这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 2010-11-24
    • 2020-07-27
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2016-08-25
    相关资源
    最近更新 更多