기본 콘텐츠로 건너뛰기

Join 및 Keep을 사용한 테이블 결합

이 페이지에서

JoinKeep을 사용한 테이블 결합

조인은 두 테이블을 하나로 결합하는 연산입니다. 결과 테이블의 레코드는 원래 테이블에 있는 레코드의 조합이며, 결과 테이블 내의 일정한 조합에 기여하는 2개의 레코드가 하나 또는 여러 공통 필드에 대해 공통의 값을 가지는 이른바 자연 조인이라 불리는 조인이 일반적으로 수행됩니다. Qlik Sense의 경우 스크립트에서 조인을 수행하여 논리 테이블을 생성할 수 있습니다.

이미 스크립트에 있는 테이블을 조인할 수 있습니다. 그러면 Qlik Sense 논리에서는 별도의 테이블이 아니라 조인의 결과인 단일 내부 테이블을 보게 됩니다. 경우에 따라서는 이러한 작업 방식이 필요할 수 있지만 단점이 되는 경우도 있습니다.

  • 로드한 테이블이 커져서 Qlik Sense가 느리게 작동할 수 있습니다.
  • 일부 정보가 손실될 수 있습니다. 원래 테이블의 빈도(레코드의 수)를 더 이상 사용할 수 없게 될 수 있습니다.

테이블을 Qlik Sense에 저장하기 전에 두 테이블 중 하나 또는 둘 다 테이블 데이터의 교집합으로 축소하는 효과를 제공하는 Keep 기능은 명시적 조인을 사용해야 하는 경우의 수를 줄이기 위해 설계되었습니다.

참고: 이 설명서에서는 일반적으로 내부 테이블이 생성되기 전에 수행되는 조인에 대해 조인이라는 용어를 사용합니다. 내부 테이블이 생성된 후 수행되는 연결도 기본적으로 조인입니다.

Join

Join을 수행하는 가장 간단한 방법은 스크립트에서 join 접두사를 사용하여 내부 테이블을 다른 명명된 테이블이나 최근에 생성한 테이블과 조인하는 것입니다. 조인은 외부 조인이 되어 두 테이블에서 가능한 모든 값의 조합을 만듭니다.

Example:  

LOAD a, b, c from table1.csv; join LOAD a, d from table2.csv;

결과 내부 테이블에는 a, b, c, d 필드가 생깁니다. 레코드 수는 두 테이블의 필드 값에 따라 달라집니다.

참고: 조인하려는 필드의 이름이 완전히 동일해야 합니다. 조인하려는 필드의 수는 임의입니다. 일반적으로 테이블은 하나 이상의 공통 필드를 가집니다. 공통 필드가 없을 경우 테이블의 카티션 곱이 생성됩니다. 모든 필드가 공통인 경우도 가능하지만 일반적으로 의미가 없습니다. 이전에 로드한 테이블의 이름을 Join 문에 지정하지 않은 경우 Join 접두사는 최근에 만든 테이블을 사용합니다. 따라서 두 문의 순서는 임의가 아닙니다.

자세한 내용은 Join을 참조하십시오.

Join 사용

Qlik Sense 스크립트 언어에서 명시적인 Join 접두사는 두 테이블의 완전 조인을 수행합니다. 결과는 한 테이블입니다. 이러한 조인으로 인해 큰 테이블이 될 수 있습니다.

  1. Advanced Scripting Tutorial 앱을 엽니다.
  2. 데이터 로드 편집기에서 새 스크립트 섹션을 추가합니다.
  3. Transactions 섹션을 호출합니다.
  4. 오른쪽 메뉴의 AttachedFiles에서 데이터 선택을 클릭합니다.

  5. 업로드한 다음 Transactions.csv를 선택합니다.
  6. 팁: 필드 이름 아래에서, 데이터를 로드할 때 테이블 필드의 이름을 포함하도록 포함된 필드 이름이 선택되어 있는지 확인합니다.
  7. 데이터 선택 창에서 스크립트 삽입을 클릭합니다.
  8. 업로드한 다음 Salesman.xlsx를 선택합니다.
  9. 데이터 선택 창에서 스크립트 삽입을 클릭합니다.
  10. 스크립트는 다음과 같이 표시되어야 합니다.

    LOAD "Transaction ID", "Salesman ID", Product, "Serial No", "ID Customer", "List Price", "Gross Margin" FROM [lib://AttachedFiles/Transactions.csv] (txt, codepage is 28591, embedded labels, delimiter is ',', msq); LOAD "Salesman ID", Salesman, "Distributor ID" FROM [lib://AttachedFiles/Salesman.xlsx] (ooxml, embedded labels, table is Salesman);

  11. 데이터 로드를 클릭합니다.
  12. 데이터 모델 뷰어를 엽니다. 데이터 모델은 다음과 같이 표시됩니다.
  13. 데이터 모델: Transactions, SalesmanProduct 테이블
    Data model, Transactions, Salesman, and Product tables.

그러나 반드시 TransactionsSalesman 테이블을 별도로 구성할 필요는 없으며, 두 테이블을 조인하는 것이 더 나을 수 있습니다.

  1. 조인된 테이블의 이름을 설정하려면 첫 번째 LOAD 문 위에 다음 줄을 추가합니다.
  2. Transactions:

  3. TransactionsSalesman 테이블을 조인하려면 두 번째 LOAD 문 위에 다음 줄을 추가합니다.
  4. Join(Transactions)

    스크립트는 다음과 같이 표시되어야 합니다.

    Transactions:
    LOAD
        "Transaction ID",
        "Salesman ID",
        Product,
        "Serial No",
        "ID Customer",
        "List Price",
        "Gross Margin"
    FROM [lib://AttachedFiles/Transactions.csv]
    (txt, codepage is 28591, embedded labels, delimiter is ',', msq);
    
    Join(Transactions)
    LOAD
        "Salesman ID",
        Salesman,
        "Distributor ID"
    FROM [lib://AttachedFiles/Salesman.xlsx]
    (ooxml, embedded labels, table is Salesman);

  5. 데이터 로드를 클릭합니다.
  6. 데이터 모델 뷰어를 엽니다. 데이터 모델은 다음과 같이 표시됩니다.
  7. 데이터 모델: TransactionsProduct 테이블
    Data model following Join.

    이제 TransactionsSalesman 테이블의 모든 필드가 단일 Transactions 테이블로 결합됩니다.

참고: Join을 사용하는 경우에 대해 자세히 알아보려면 Qlik Community에서 다음 블로그 게시물을 참조하십시오. To Join or not to Join(조인하려면 또는 조인하지 않으려면), Mapping as an Alternative to Joining(조인에 대한 대안으로 매핑) 동작은 QlikView 컨텍스트로 설명됩니다. 그러나 논리는 Qlik Sense에 동일하게 적용됩니다.

Keep

Qlik Sense의 주요 기능 중에는 테이블을 조인하는 대신 테이블을 연결하여 메모리 사용량 축소, 속도 향상, 그리고 엄청난 유연성 향상을 제공하는 기능이 있습니다. Keep 기능은 명시적 조인을 사용해야 하는 경우의 수를 줄이기 위해 설계되었습니다.

두 개의 LOAD 또는 SELECT 문 사이에 Keep 접두사를 사용하면 Qlik Sense에 저장하기 전에 하나 또는 두 테이블을 테이블 데이터의 교집합으로 축소합니다. Keep 접두사 앞에는 항상 Inner, Left 또는 Right 키워드 중 하나가 와야 합니다. 테이블에서 레코드의 선택은 해당하는 조인과 동일한 방법으로 수행됩니다. 그러나 두 테이블은 조인되지 않으며 Qlik Sense에 별도의 명명된 두 테이블로 저장됩니다.

자세한 내용은 Keep를 참조하십시오.

Inner

데이터 로드 스크립트에서 JoinKeep 접두사 앞에 Inner 접두사가 올 수 있습니다.

이 접두사가 Join 앞에 사용될 경우 두 테이블 간에 내부 조인을 수행하도록 지정됩니다. 결과 테이블은 양쪽의 전체 데이터 셋이 포함된 두 테이블 간의 조합만 포함합니다.

Keep 앞에 사용할 경우 Qlik Sense에 저장되기 전에 두 테이블을 공통 교집합으로 축소하도록 지정됩니다.

Example:  

이 예에서는 소스 테이블 Table1Table2를 사용합니다.

이 경우는 예일뿐입니다. Qlik Sense에서 완료할 연습은 수반되지 않습니다.

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

데이터 로드 스크립트에서 JoinKeep 접두사 앞에 left 접두사가 올 수 있습니다.

이 접두사가 Join 앞에 사용될 경우 두 테이블 간에 왼쪽 조인을 수행하도록 지정됩니다. 결과 테이블은 첫 번째 테이블의 전체 데이터 셋이 포함된 두 테이블 간의 조합만 포함합니다.

Keep 앞에 사용할 경우 Qlik Sense에 저장되기 전에 두 번째 테이블을 첫 번째 테이블과의 공통 교집합으로 축소하도록 지정됩니다.

Example:  

이 예에서는 소스 테이블 Table1Table2를 사용합니다.

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

먼저 테이블에 대한 Left Join을 수행하여 Table1의 모든 행이 포함되고 Table2의 해당 행에 있는 필드와 결합된 VTable을 만듭니다.

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

Qlik Sense 스크립트 언어에서 JoinKeep 접두사 앞에 right 접두사가 올 수 있습니다.

이 접두사가 Join 앞에 사용될 경우 두 테이블 간에 오른쪽 조인을 수행하도록 지정됩니다. 결과 테이블은 두 번째 테이블의 전체 데이터 셋이 포함된 두 테이블 간의 조합만 포함합니다.

Keep 앞에 사용할 경우 Qlik Sense에 저장되기 전에 첫 번째 테이블을 두 번째 테이블과의 공통 교집합으로 축소하도록 지정됩니다.

Example:  

이 예에서는 소스 테이블 Table1Table2를 사용합니다.

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

먼저 테이블에 대한 Right Join을 수행하여 Table2의 모든 행이 포함되고 Table1의 해당 행에 있는 필드와 결합된 VTable을 만듭니다.

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을 참조하십시오.