Q語言 - 連線



q語言中,我們根據提供的輸入表和所需的連線表型別,有不同型別的連線。連線將來自兩個表的資料組合在一起。除了外部索引鍵查詢外,還有四種其他方法可以連線表:

  • 簡單連線
  • 截至連線 (asof join)
  • 左連線 (left join)
  • 聯合連線 (union join)

本章將詳細討論這些連線中的每一個。

簡單連線

簡單連線是最基本的連線型別,使用逗號“,”執行。在這種情況下,兩個表必須是型別一致的,即兩個表具有相同數量的列,順序相同,並且鍵相同。

table1,:table2 / table1 is assigned the value of table2

我們可以使用逗號連線每個長度相同的表來進行橫向連線。這裡可以對其中一個表進行鍵控。

Table1, `Table2

截至連線 (aj)

這是最強大的連線,用於獲取一個表中某個欄位的值,該值截至另一個表中的時間。它通常用於獲取每次交易時的現行買入價和賣出價。

通用格式

aj[joinColumns;tbl1;tbl2]

例如:

aj[`sym`time;trade;quote]

示例

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show aj[`a`b;tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

左連線 (lj)

這是aj的一個特例,其中第二個引數是鍵控表,第一個引數包含右引數鍵的列。

通用格式

table1 lj Keyed-table

示例

q)/Left join- syntax table1 lj table2 or lj[table1;table2]

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([a:(2 3 4);b:(3 4 5)]; c:( 4 5 6))

q)show lj[tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

聯合連線 (uj)

它允許建立具有不同模式的兩個表的聯合。它基本上是對簡單連線 (,) 的擴充套件。

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show uj[tab1;tab2]

 a  b  d  c
------------
 1  2  6
 2  3  7
 3  4  8
 4  5  9
 2  3     4
 3  4     5
 4  5     6

如果在鍵控表上使用uj,則主鍵必須匹配。

廣告