Сравните данные в двух разных таблицах в kdb - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы сравнить данные для двух разных экземпляров для одной и той же таблицы. Я думаю, что могу сравнить нулевые значения в таблице, однако я не уверен, как мне это сделать, чтобы обобщить все таблицы.

Например: Это таблица, которую я имею:

a:([]a:0n 2 3;b:"a", " ","c")

Я пытаюсь использовать приведенный ниже код для подсчета нулевого значения для всех столбцов:

{count where (null a[x]) =1b} each  cols a 

Как я могу использовать это для обобщения всех таблиц? и использовать код для сравнения с удаленными таблицами?

h: hopen `:2001

1 Ответ

0 голосов
/ 07 сентября 2018

Сравнение данных из удаленной таблицы может быть довольно сложным, и это будет зависеть от множества факторов, таких как размер таблицы, является ли таблица секционированной и т. Д.

Предполагая, что таблицы находятся в памяти, и вы используете пустые проверки в качестве сигнатуры таблицы, вы можете выполнить это в удаленном сеансе и затем сравнить его с вашим локальным экземпляром.

/Remote service - port 2001
q)table1:([]col1:0n 2 3 0n ;col2:"a", " ","ca")
q)table2:([]col3:1 2 0n 4 ;col4:```b`)

/local
q)table1:([]col1:0n 2 3 0n ;col2:"a", " ","ca")
q)table2:([]col3:1 2 0n 4 ;col4:```b`d)   //different from remote
q)table3:([]col5:1 2 0n 4 ;col6:```b`d)    //local table

q)f: { tables[]!{[t] (), {sum null x} each flip 0!value t}each tables[]}  //tables unkeyed

q)remote:`::2001(f;::)
q)remote 
(`s#`table1`table2)!((`col1`col2)!2 1;(`col3`col4)!1 3)

q)local:f[]
q)local
(`s#`table1`table2`table3)!((`col1`col2)!2 1;(`col3`col4)!1 2;(`col5`col6)!1 2)

q)remote~'local   //only table1 signature matches
(`table1`table2`table3)!100b
...