我正在學習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