Учебники

Q Language — Joins

В языке q у нас есть различные виды объединений, основанные на предоставленных входных таблицах и желаемых типах объединяемых таблиц. Объединение объединяет данные из двух таблиц. Помимо отслеживания внешнего ключа, есть еще четыре способа объединения таблиц:

  • Простое соединение
  • Asof присоединиться
  • Левый присоединиться
  • Союз присоединиться

Здесь, в этой главе, мы подробно обсудим каждое из этих объединений.

Простое соединение

Простое объединение — это самый простой тип объединения, выполняемый с запятой ‘,’. В этом случае две таблицы должны соответствовать типу , т. Е. Обе таблицы имеют одинаковое количество столбцов в одинаковом порядке и одинаковый ключ.

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

Мы можем использовать объединение через запятую для таблиц одинаковой длины, чтобы соединять вбок. Здесь можно ввести одну из таблиц,

Table1, `Table2

Asof Регистрация (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

Union Join (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 в таблицах с ключами, то первичные ключи должны совпадать.