Запрос нескольких таблиц в KDB

Я хочу запросить несколько таблиц в KDB. Например Как написать следующий запрос SQL в KDB (я не очень хорош в SQL, поэтому формат запроса может быть неправильным):

select from table1,table2 where table1.sym=table2.sym and table1.price>table2.price

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

Также в SQL мы можем расширить вышеуказанный запрос до количества n таблиц и фильтров. Можем ли мы сделать это в KDB без сложного выражения?

1 ответ

Короткий ответ: нет, я боюсь.

Вы можете запросить только 1 таблицу за один раз. Вы должны сделать соединение первым. Я не очень хорошо знаю SQL, но я уверен, что движок SQL все равно выполняет операцию соединения, чтобы иметь возможность сделать это (?), Так что если есть способ сделать это в q через функцию это будет делать соединение.

Если вы хотите извлечь векторы столбцов, вы можете просто проиндексировать таблицу следующим образом (избегайте точечных обозначений внутри функций):

table[`sym]

(получил бы столбец sym как вектор, предполагая, что таблица не является ключевой) (NB Будьте осторожны, когда делаете это на развернутой таблице!)

Вы можете использовать это для in запросы в предложении where, например. Или, если ваши таблицы имеют одинаковую длину, вы можете использовать их для создания новой временной промежуточной таблицы (но это по-прежнему объединение!)

Это так близко, как вы собираетесь получить без использования обычного ,, lj, uj, так далее

Нет.

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

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

Кроме того, Q работает со столбцами, а не со строками. Так table1.price>table2.price не имеет смысла, если только table1 и table2 имеют одинаковую длину. Обычно люди обрабатывают это, переименовывая второй столбец, выполняя соединение, а затем фильтруя полученную единственную таблицу.

Другие вопросы по тегам