Объединение таблиц с помощью Join и Keep | Qlik Cloud Справка
Перейти к основному содержимому Перейти к дополнительному содержимому

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

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

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

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

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

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

Объединения в операторе SQL SELECT

В некоторых драйверах ODBC можно выполнить объединение в операторе SELECT. Это почти эквивалентно выполнению объединения с помощью префикса Join.

Однако большинство драйверов ODBC не могут выполнить полное (двунаправленное) внешнее объединение. Они могут выполнять только левое или правое внешнее объединение. Левое (правое) внешнее объединение включает только те комбинации, в которых ключ объединения существует в левой (правой) таблице. Полное внешнее объединение включает любую комбинацию. Qlik Sense автоматически выполняет полное внешнее объединение.

Кроме того, выполнение объединений в операторах SELECT намного сложнее, чем выполнение объединений в Qlik Sense.

SELECT DISTINCTROW

[Order Details].ProductID, [Order Details].

UnitPrice, Orders.OrderID, Orders.OrderDate, Orders.CustomerID

FROM Orders

RIGHT JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID;

Этот оператор SELECT объединяет таблицу, содержащую заказы фиктивной компании, с таблицей, содержащей сведения о заказах. Это правое внешнее объединение, что означает, что включены все записи из OrderDetails, а также те, у которых OrderID не существует в таблице Orders. Однако заказы, которые существуют в Orders, но не в OrderDetails, не включены.

Join

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

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

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

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

Для получения дополнительной информации см. Join.

Keep

Явный префикс Join в скрипте загрузки данных выполняет полное объединение двух таблиц. Результатом является одна таблица. Во многих случаях такие объединения приводят к созданию очень больших таблиц. Одной из главных особенностей Qlik Sense является возможность создавать ассоциации между таблицами вместо их объединения, что экономит место в памяти, увеличивает скорость и обеспечивает огромную гибкость. Функциональность keep была разработана для сокращения количества случаев, когда необходимо использовать явные объединения.

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

Для получения дополнительной информации см. Keep.

Inner

Префиксам Join и Keep в скрипте загрузки данных может предшествовать префикс Inner.

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

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

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

Table 1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Inner Join

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

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

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

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Для получения дополнительной информации см. Inner.

Left

Префиксам Join и Keep в скрипте загрузки данных может предшествовать префикс left.

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

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

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

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

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

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

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

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Для получения дополнительной информации см. Left.

Right

Префиксам Join и Keep в скрипте загрузки данных может предшествовать префикс right.

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

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

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

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

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

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

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

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Для получения дополнительной информации см. Right.

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

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