`

KDB+ database 第一段 数据类型

    博客分类:
  • KDB+
阅读更多

二.Atoms(基本数据类型)

预览

所有的数据最终都是通过基本数据类型构造出来的,所有我们从基本数据类型开始学习.一个基本数据类型是一个不可再分的带一个特定类型值的.q里的基本数据类型和传统的SQL有一部分协调,像日期,时间类型,时间序列.我们在下表中总结了出来,也给出了SQL在java和c#中的类型,我们将会在转换与枚举中讲到.

注意:在q中boolean,short,int等不是关键字,所有在文本中不会特别地显示.它们有特殊的意义当它们应用在操作的时候.你应该避免使用它们做命名.

下表中收集了每一个q数据类型的重要信息.我们将在后面提到它们.

整型数据

基本的整型数据类型几乎在所有的语言中都是一样.

整型

一个整型占有四个字节,一个numeric类型值被看作是一个整型,实际上仅仅包含numericdigits,possiblywithaleadingminussign,withoutadecimalpoint.在特殊情况,没有尾字符指示它是另一个数字类型,下面是一个典型的整型

短整型和长整型

另外两种整型是短整型和长整型.短整型占两个字节以'h'结尾,长整型以'j'结尾

重要:自动类型提升在q中是基本的操作.然而,如果一个特定的整型在list被用到和一个窄类型表现-如:如果需要一个整型但用短整型表示刚会发生错误(不能自动转),这可能是从C语言继承过来的,但是可能会在上文提到的表中产生误会.

浮点型数据

支持单精度和双精度的数据类型

浮点型

浮点型遵从IEEE标准占八位,在其它语言中可能被叫做双精度.以'f'结尾浮点型至少能存15位精度数.

如:

实型

实现是4四节的浮点型数据'e'结尾.在有些语言下实型被叫做是浮点型.它至少能保存6精度数,7是一个标准的实型,因而是一个有效的实型

提示:q控制台缩写了浮点型和实型后面的零

 

这种行为取代了不同宽度的浮点型类似于整型.

科学计算法

浮点型和实型都可以用IEEE标准的科学计数法来表示.

默认的,q控制台只显示出前七位有效有数学.

你可以改变,用\P命令(大写p)指定显示16位有效数字

二进制数据

二进制数据可以表示为位或者是字节

布尔型

布型用一个字节存储一个单独的位'b'结尾

字节

一个字节存储八位用'0x'表示一个十六进制数

二进制数是数字

处理二进制数的时候,q很像c语言,所有的二进制都被看作是无符号整型,所以能参与表达式运算或者是和其它数比较.没有true或者是false关键字,也不是逻辑操作符.像上面的a和pi.是一个整型是一个浮点型,自动类型提升.

字符型

在q中有两种原始字符类型.它比起高级语言中的字符类型更类似SQL中的CHAR和VARCHAR.

字符

一个字符型存储一个单一的ASCII码一个字节.和SQL中的CHAR符合.一个字符放在引号中.

一些键盘字符如双括号,不能直接输入,它在q中特殊的意思.像在C中,这些字符用\

处理.当控制台显示也包括escape,它们实际上是单一的字符.

 

你也可以escape一个字符用一个标的数表示三位八进制数

符号

一个符号类型保存了一系列的字符.用`开头

一个符号类型是不能复位的,意味着单独的字符组成的不能直接访问.符号类型经常性用来保存其它实体的名字.

 

重要:一个符号类型不是一个字符串.我们将会在lists一章中看到有一个跟字符串相似的,也就是一系列的字符.当一系列的字符组成一个符号类型的时候,我们强调一个符号类型不是由字符组成的.`a和"a"是不一样的.字符"q"和`kdb都有是原始的实体.

高级:你可能会问是否一个符号类型可以包括空格和特殊字符像`回答是可以的.你创建一个这样的符号通过一系列的字符和符号类型之间的关系.参看从字符串创建符号会有更详细的讲解.

注意:符号类型稍微有点类似SQL里的VARCHAR,所以能保存任意的字符.不同的是原始类型.字符"q"和符号`kdb都原子型实体.

时间型数据类型

一个主要的优势是q可以有效地,协调地,有风格地处理包括时间序列和关系数据.q继承了基础SQL的日期和时间数据类型促进时间的算法,whichisminimalinSQLandcanbeclumsyinverboselanguages(e.g.,Java'sdatelibraryanditsuseoftimezones).当开始处理与SQL相同的时间类型,在q中传统的时间类型分为日期和时间

日期

一个日期占四个字节格式为yyyy.mm.dd,yyyy指年,mm指月,dd指天.一个日期类型存储从2000年1月1日以来的天数.

重要:月份和天是从1开始所以一月是'01'.而不是0

月份天数中间的0不可以省略

 

高级:标地天数可以通过将日期转化为整来获得.

时间

占四个字节格式为hh:mm:ss.uuuh表示小时24小时制,m表现分钟,s表示秒,u表示毫秒.一个时间类型存储从午夜开始以来的毫秒数.

重复一次,0不能省略.

高级:毫秒可以通过将时间类型转为整型来得到

日期时间类型(datetime)

Datetime是日期和时间的组合类型,用ISO标准'T'格式来分开表示.datetime存储了从2000年1.1日午夜开始的天数.

高级:datetime实际保存的天数可以将其转化为float类型而得到

月类型(month)

月类型用四个字节存储格式为yyyy.mm用'm'结尾.一个月类型值存储了从年头开始的月份数

高级:month实际保存的月份数可以将其转化为整型而获得

分类型(minute)

分类型用四个字节格式为hh:mm一个分类型存储了从午夜开始的分钟数

注意:min在q中是保留字

高级:分类型实际保存的分分钟数可能通过将其转化为整来获得

秒类型(second)

秒类型用四个字节格式为hh:mm:ss一个秒类型存储了从午夜以来的秒数

秒类型的表示法看起来像每天的时间值,然而,一个q的时间值是从午夜开始计算的毫秒数,所以实际上它们值是不同的.

高级:通过将秒类型转化为整开始得到实际保存的秒数.但是会有不同情况

Constituents和圆括号

日期,时间,日期时间类型的要素可以用圆括号来取得.每个单独的域值都被都作一个int型来取得.日期型的域值分别叫年月日.

类似的,时间的域值叫做时分秒.

注意:在写这个文档的时候(Jun2007)还没有得到毫秒要素的语法,通过计算得到

除单独域外,你也可以得到higher-order的要素

当然,对于datetime类型也一样

高级:在q中有一个怪现象就是在函数中用圆括号访问时间要素是不行的,如

而是,转化为元素类型

无穷和NaN

除了规则的数字和时间类型值,特殊的值是无穷,指表示了它比一般的值都大

重要:注意大写W与小写w的区别

被零除的正的非零值结果为float无穷,表示为0w.被零除的负值表示为负的float无穷,表示为-0w.要记这个,可以想像一个w和∞.

在正常的整除法当中不能产生整型无穷值,结果一般是float.

被零除的0值,值为undefined,所有q语言表示float空值为0n.

在q的哲学中任何有效的算法表达式可以产生一个结果而不是一个错误,因此,被零除都得到一个特殊的浮点值而不是一个异常.你可以执行一个复杂的序列计算而不用担心中间的事和讨厌的异常.我们将可以在PrimitiveOperations(原始操作)里面了解到更多.

高级:无穷有参与运算.q在位模式上执行操作.数学家发现了以下的情况:

空值NullValues

空值的概念一般是指丢失数据.这是q与高级语言和SQL不同的地方.

 

在JavaC++和C#中,空值应到到复杂的实体中(例如,Objects),它们被指针或引用间接地访问.一个空值就像一个没有初始化的指针,意思是它还没有被分配地址和内存空间.简单类型没有空值的概念.在允许为空的类型中,你可测试一个值是否为空.

 

在SQL中空值是指不适用的或是丢失的意思.空值与其它任何类型不一样,它没有'='的说法.那就是说,你不能测试一个域null=NULL.而是,你可用看它是否为NULL.因为NULL是一个分开的值,Boolean域实际上有三个状态:0,1和NULL.

 

在q中,这种情况很有趣.每个类型都有自己的null值,有一些类型还没有指定null值的表示法

 

以下表格为现在已经归纳的类型的空值的总结:

二进制空值

让我们从二进制类型开始,就像你看到的,没有特殊的空值,意味着空值与零值相等.因此,你可能分不清一个丢失的boolean值与一个false之间的区别.

实际上,这不是问题,自从大多数应用不是criticaldistinction.如果你应用中的boolean的默认值flag不是零那可能就是一个问题,所有你必须保证这种情况不会发生.一个近似的防范就是用byte值.

数字和时间空值

接下来看数字和时间的空值.这里有种情况跟SQL里有点像,你可以区分从标地数据为0的丢失的数据.SQL中不同的是没有通用的空值.

 

在q中空值有一个优势就是它可以有equals的语法.但是作为折衷当你在类型检查的时候你必须使用正确的空值.

字符空值

最后我们来考虑一下字符型.鉴于symbol是字符的集合判断一个空的symbol,看一个symbol是否为空,空symbol表示为`

 

对比字符的空值,字符空值由""组成.在二进制数据中,你分不清丢失的char值和一个空白值.重申一次,中练习中没有什么限制,但是你得保证在实际应用中不能有这些问题.

 

注意:""值不是空的char.而是指一个char值里没有填入其它的值

<!--EndFragment-->

分享到:
评论

相关推荐

    q_and_kdb+.pdf

    - **kdb+**:一个高速时间序列数据库管理系统,能够高效处理大量实时和历史数据。 2. **Q 和 kdb+ 解决的问题** - **快速数据处理需求**:在金融市场中,数据处理速度是至关重要的,Q 和 kdb+ 能够满足这种需求。...

    Wind Kdb+数据及交易接口V1.1(新版)说明1

    **Wind Kdb+数据及交易接口V1.1(新版)说明** 本文将详细介绍Wind Kdb+数据及交易接口的新版V1.1,该接口是基于Wind C++ V1.1构建的,旨在为金融分析和交易提供高效的数据获取和处理能力。这个接口允许用户通过C++...

    q_Wind, 基于 kdb+/q 接口库的风量化 API.zip

    q_Wind, 基于 kdb+/q 接口库的风量化 API q_Wind用于风力api的/q 接口( 非com版)该项目为风信息有限公司提供的4套不同api提供 kdb+/q 支持,中国财务信息和解决方案提供商:这也提供了一些市场数据源,风量 API ;...

    kdb-master.zip

    Kdb+,全称为Query Database Plus,是由Kx Systems公司开发的一款高性能、实时、内存数据库系统,尤其在金融领域有着广泛的应用。当我们提到“kdb-master.zip”时,这通常意味着我们正在讨论kdb+的一个源代码版本...

    docker-kdb:用于运行KDB +的最小(Alpine Linux)Docker容器

    这个小项目解决了这个问题,它提供了一个占用空间小的Alpine Linux,32位库支持以及一个配置为运行KDB +的环境。如何使用它? 首先,克隆或下载此仓库。 完成后,您需要为Linux下载免费的32位KDB +(在这里我不能...

    kdb+tick 文档

    kdb+tick 文档 基于q语言的 内存数据库, 支持billion级的数据秒级查询

    kdb-c-interface:从 C 与 kdb+ 接口的一些示例代码

    将 KDB+ 与 C 接口该项目演示了如何使用 Kx 提供的接口在 kdb+ 和 C 之间编组数据。 构建了一个共享对象作为输出,并提供了一个 aq 脚本,该脚本将显示如何将 C 函数动态加载到 kdb+ 中。 此资源的 PDF 文档可在以及...

    solace:用于 KDB+ 的 Solace 中间件客户端。 允许从 KDB+ 发布订阅

    该接口为 Solace PubSub+ 代理提供了一种与 kdb+ 交互的机制。 该接口是围绕记录的 Solace C api 的薄包装器 kdb+ 新手? Kdb+ 是世界上最快的时间序列数据库,针对摄取、分析和存储海量结构化数据进行了优化。 要...

    kdb-cpp:连接到kdb +的C ++类

    连接到kdb +的示例C ++代码如何使用从下载KH 和合作从 。 将它们放在include/external/ 。 编译并构建示例简单表查询-examples / query_table.cpp g++ -std=c++11 -lpthread -o kdb_cpp include/internal/*.cpp ...

    kdb:kdb +教程和代码示例

    数据库 kdb +教程和代码示例

    matlab期货代码-qWind:WindAPI的kdb+/q接口(WAPI,COM​​版本)

    Kdb+数据及交易接口V1.1(新版)说明》。WindKdb+ V1.0旧版()可继续使用,不过推荐改用新版WindKdb+接口(V1.1)。 常见问题:找不到wind接口文件。解决:把WIND 接口DLL所在的路径(如 D:\Wind\WAPI.PE\bin)加到 ...

    kdb:伴随文件到kdb +和q

    总之,kdb+伴生文件是数据库管理系统不可或缺的一部分,它们与kdb+和q紧密结合,共同构建了一个高效、灵活且可扩展的数据处理环境。掌握伴生文件的使用技巧,不仅能提升数据处理的效率,还能增强系统的可靠性和安全...

    kxsystems.github.io:GitHub上的kdb +和q存储库索引

    kdb+是一种列式数据库,设计用于快速处理大量结构化数据,特别是在实时交易和大数据分析中。q则是一种简洁的编程语言,专门用来操作kdb+数据库。它具有极高的性能和效率,适合处理金融时间序列数据和其他复杂数据...

    matlab方差分析代码-kdb.q.kalman.filter.beta.ETFs:kdb+/qkalmanbetamatlabpython

    KDB +代码编写。 代码互为镜像 我的贡献是将matlab文件转换为q / KDB +,用于卡尔曼增益部分。 代码引用以下方程式:书:Ernest P Chan“算法交易-策略及其理性”(2013年) Matlab文件使用卡尔曼增益实现了计算两个...

    DFT的matlab源代码-q-fftw:适用于KDB+/q的FFTW

    q-FFTW为KDB + / q 3.x启用FFTW 3.x()。 FFTW是一个C兼容库,可使用FFT(快速傅立叶变换)算法在O(n log n)时间内高效地计算傅立叶变换。 q-FFTW由两个主要文件组成: 动态库qfftw.so / qfftw.dll (已静态链接到...

    rust_kdb_c_api:kdb + C API的Rust包装器

    由于没有办法让所有人都可以创建一个这样的包装器来为kdb +编写一个共享库,因此有人提供包装器可能很有意义,而我们做到了。 安装 使用kdb_c_api在图书馆名称Cargo.toml 。 [ dependencies ] kdb_c_api = " ^0.1 ...

    vscode-q:vscode kdb + q扩展

    q的vscode扩展 此扩展提供了kdb + \ q语言支持: q语法 服务器列表按标签分组 服务器资源管理器 由和支持的查询网 基于查询虚拟化 ... 定义的功能和服务器功能的签名帮助(类型:100、104)。 配

    enterprise-components:适用于kdb +的企业组件

    enterprise-components是在kdb+之上的一组开源构建块,使您可以通过几个简单的步骤就可以建立用于数据仓库和分析的系统。 它有助于构建专业数据系统,其中包括: 资料汇入 贮存 质量保证 数据分析 数据提取 与其他...

    q-REST:Java REST服务,用于连接到kdb +

    必备配置特性资源文件夹中有一个application.properties文件,可通过更新以下属性来连接其余服务和kdb实例: kdb.host=localhostkdb.port=6007kdb.username=adminkdb.password=adminserver.port=8080证明书请求以...

    quantQ:Novotny等人的《使用kdb + q进行机器学习和大数据的存储库》

    kdb+是一款高效、内存优化的数据库系统,特别适合处理时间序列数据,而在金融、生物信息学等领域,这种数据类型十分常见。q是kdb+的语言,以其简洁的语法和强大的数据处理能力而著称。 在机器学习方面,quantQ提供...

Global site tag (gtag.js) - Google Analytics