我正在学习KDB +和Q编程,并阅读以下语句 - “select在列列表上执行向量操作”。 矢量操作是什么意思?有人可以用一个例子来解释吗?另外,它如何比标准SQL更快?KDB/Q:什么是矢量操作?
0
A
回答
4
载体操作是采用一个或一个以上向量,并产生另一种载体的操作。例如+
在q是一个矢量运算:
q)a:1 2 3
q)b:10 20 30
q)a + b
11 22 33
如果a
和b
是表中的列,您可以在select
声明中对其执行矢量操作。与继续前面的例子,让我们把a
和b
向量在表中作为列:
q)([]a;b)
a b
----
1 10
2 20
3 30
现在,
q)select c:a + b from ([]a;b)
c
--
11
22
33
select语句执行相同的a+b
向量加法,而是把输入和返回的输出作为表列。
如何其比标准SQL快?
“标准” SQL实现通常由行存储数据的行。在包含许多列的表中,列的第一个元素和第二个元素可以通过其他列中的数据在内存中分离。数据连续存储时,现代计算机运行效率最高。在kdb +中,这是通过逐列存储表来实现的。
0
甲vector是相同类型的原子的列表。一些示例:
2 3 4 5 /int
"A fine, clear day" /char
`ibm`goog`aapl`ibm`msft /symbol
2017.01 2017.02 2017.03m/month
Kdb +非常高效地存储和处理载体。 Q operators - 不仅仅是+-*%
而且例如mcount
,ratios
,prds
- 针对载体进行了优化。
当矢量有,如u
(无重复项目)和s
(项目按升序排列)时,这些运算符会更有效。
当表的列是向量,这些相同的效率是可用的。这些效率不适用于标准SQL,它将表视为无序的行集。
作为列为导向,kdb +可以splay大表,将每列存储为单独的文件,从大表中选择时减少文件I/O。
0
这句话意味着,当你引用一个表的一个列标签的特定列,它被分解成整列列表,而不是它的每一个元素,并在其上的任何操作应被理解为列表操作。
q)show t: flip `a`b!(til 3;10*til 3)
a b
----
0 0
1 10
2 20
q)select x: count a, y: type b from t
x y
---
3 7
q)type t[`b]
7h
q)type first t[`b]
-7h
在上述Q-SQL count a
相当于count t[`a]
这是count 0 1 2
= 3。同样是type b
;正值返回值7意味着b
是列表而非原子:http://code.kx.com/q/ref/datatypes/#primitive-datatypes
相关问题
- 1. 什么是矢量?
- 2. 矢量==操作符
- 3. Paper.js矢量操作
- 4. 什么是图像矢量?
- 5. 什么是矢量引用?
- 6. 什么是RHS矢量
- 7. 什么是矢量图?
- 8. 什么是位矢量?
- 9. 矢量::的push_back VS矢量::操作符[]
- 10. 矢量化(SIMD)树操作
- 11. 操作矢量+ =失败
- 12. C++ 2D矢量和操作
- 13. R中的矢量操作
- 14. 矢量矢量有什么问题?
- 15. 什么是矢量长度和矢量缓存大小?
- 16. 什么是矢量和矢量<>之间的differenece
- 17. 什么操作都是原子操作
- 18. 什么是unity4的矢量engin
- 19. numpy的矢量化是做什么的?
- 20. 为什么我的矢量是空的?
- 21. 为什么对象是矢量?
- 22. 矢量化的限制是什么?
- 23. 什么是矢量数据结构
- 24. 什么是glsl中的半光矢量?
- 25. 稀疏矢量,它们是什么?
- 26. pandas timedelta int作为矢量化操作
- 27. 什么是=后跟==操作?
- 28. 什么是MTMSREE PowerPC操作?
- 29. 什么是语义操作?
- 30. 为什么矢量的矢量不能保证是连续的? (或者是吗?)
感谢您的详细解释Alexander。 – userknight