Перейти к основному содержимому Перейти к дополнительному содержимому

Объединение таблиц с помощью операторов Join и Keep

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

Логика QlikView будет распознавать не отдельные таблицы, а результаты объединения, которые будут представлены в одной внутренней таблице. В некоторых случаях это требуется, однако существуют недостатки:

  • Загруженные таблицы часто становятся больше, и программа QlikView работает медленнее.
  • Некоторая информация может быть потеряна: частота (количество записей) в исходной таблице может быть больше недоступна.

Функция Keep, которая позволяет уменьшить одну или обе таблицы до пересечения данных таблиц перед сохранением таблиц в программу QlikView, предназначена для уменьшения количества случаев, когда необходимо использовать явные объединения.

Примечание к информацииВ данном руководстве термин «объединение» обычно используется для объединений, выполненных до создания внутренних таблиц. Однако связывание, выполненное после создания внутренних таблиц, по сути, также является объединением.

Join

Самым простым способом создания объединения является использование префикса Join в скрипте, который позволяет объединять внутреннюю таблицу с другой именованной таблицей или последней созданной таблицей. Объединение будет иметь тип outer join и позволит создать все возможные сочетания значений из двух таблиц.

Пример:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Результирующая внутренняя таблица имеет поля a, b, c и d. Количество записей различается в зависимости от значений полей этих двух таблиц.

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

Keep

Одной из основных функций программы QlikView является способность к связыванию таблиц вместо их объединения, что позволяет сократить использование памяти, повысить скорость обработки и гибкость. Функция keep предназначена для сокращения числа случаев необходимого использования явных объединений.

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

Inner

Перед префиксами Join и Keep в языке скриптов QlikView можно использовать префикс Inner.

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

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

Пример:  

В этих таблицах используются исходные таблицы Table1 и Table2:

Inner example tables, with one record appearing in both tables
Примеры исходных таблиц Inner

Сначала выполняется Inner Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая только одну строку, только одну запись, существующую в обеих таблицах, с данными из обеих таблиц.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

Inner Join example table, with the one record that appeared in both tables
Пример Inner Join

Если вместо этого выполняется Inner Keep, таблиц все равно будет две. Две таблицы, разумеется, связаны посредством общего поля A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Inner Keep example tables, both tables reduced to the one record that appeared in both tables
Пример Inner Keep

Left

Перед префиксами Join и Keep в языке скриптов QlikView можно использовать префикс left.

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

Если этот префикс используется перед префиксом Keep, он указывает, что вторую таблицу следует уменьшить до области взаимного пересечения с первой таблицей перед сохранением в программе QlikView.

Пример:  

В этих таблицах используются исходные таблицы Table1 и Table2:

Left example tables, with one record that appears in both tables
Примеры исходных таблиц Left

Сначала выполняется Left Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая все строки из таблицы Table1, совмещенные с полями из совпадающих строк в таблице Table2.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

Left Join example table, with all records from the first table and the one record that appeared in both tables added from the second table
Пример Left Join

Если вместо этого выполняется Left Keep, таблиц все равно будет две. Две таблицы, разумеется, связаны посредством общего поля A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Left Keep example tables, with the first table unchanged and the second table containing only the one record that appeared in both tables
Пример Left Keep

Right

Перед префиксами Join и Keep в языке скриптов QlikView можно использовать префикс right.

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

Если этот префикс используется перед префиксом Keep, он указывает, что первую таблицу следует уменьшить до области взаимного пересечения со второй таблицей перед сохранением в программе QlikView.

Пример:  

В этих таблицах используются исходные таблицы Table1 и Table2:

Right example tables, with one record that appears in both tables
Примеры исходных таблиц Right

Сначала выполняется Right Join в отношении таблиц, в результате чего образуется таблица VTable, содержащая все строки из таблицы Table2, совмещенные с полями из совпадающих строк в таблице Table1.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

Right Join example table, with all records from the second table and the one record that appeared in both tables added from the first table
Пример Right Join

Если вместо этого выполняется Right Keep, таблиц все равно будет две. Две таблицы, разумеется, связаны посредством общего поля A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Right Keep example tables, with the second table unchanged and the first table containing only the one record that appeared in both tables
Пример Right Keep

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!

Присоединяйтесь к программе модернизации аналитики

Remove banner from view

Модернизируйте ваши важные приложения QlikView без ущерба с помощью программы модернизации аналитики. Щелкните здесь для получения дополнительной информации или свяжитесь с нами: ampquestions@qlik.com