본문 바로가기

Qlik Sense

Qlik Sense에서 데이터 저장방법

로드된 데이터는 플랫 테이블로 구성됩니다. 이 테이블에는 행과 필드가 있으며 모든 필드에는 동일한 수의 행이 있습니다. 모든 값은 Qlik Indexing(QIX) 엔진에 의해 이중 값으로 저장됩니다.

 

로드된 각 필드의 고유 값은 기호 테이블로 수집됩니다. 필드당 하나의 기호 테이블이 있으며 각 기호 테이블에는 각 고유 값에 할당된 포인터 값이 있습니다. 포인터는 각 기호 테이블 내에서 고유하지만 모든 기호 테이블에서 고유하지는 않습니다. Qlik Sense는 기호 테이블당 최대 20(2^31) 기호로 제한됩니다.

값의 구별성은 이중 값의 기본 숫자 값을 기반으로 합니다. 이것은 다른 텍스트 값을 가진 이중 값을 의미하지만 동일한 숫자 값은 동일한 기호로 표시됩니다.

포인터 값은 비트로 채워져 있습니다. , 기호 테이블의 행 수를 나타내는 데 필요한 만큼의 비트만 가집니다. 예를 들어, 4개의 개별 값이 있는 필드에는 4개의(2^2) 값을 나타내는 데 필요한 비트 수인 2비트 길이의 포인터가 필요합니다. 아래 그림에서 포인터는 이진 값으로 표시됩니다.

기호 테이블은 필드의 고유한 값을 표시하므로 목록 상자에 필드를 표시하여 시각화할 수 있습니다.

 

메모리 내 데이터 테이블은 실제 로드된 값을 저장하지 않습니다. 데이터 테이블에서 값은 포인터 값으로 대체됩니다. 포인터가 실제 데이터 값보다 몇 배 더 짧기 때문에 상당한 데이터 압축이 가능합니다. 실제 데이터 값에 비해 처리할 비트가 적기 때문에 포인터 값을 통해 데이터를 여러 번 빠르게 처리할 수 있습니다.

 

 

Symbol Tables and Bit-Stuffed Pointers

Qlik Sense QlikView 스크립트가 실행되는 동안 각 load 문 후에 Qlik 엔진은 로드된 데이터를 두 가지 테이블 유형(하나의 데이터 테이블과 여러 기호 테이블)으로 변환합니다. 엔진은 필드당 하나의 기호 테이블을 생성합니다.

 

기호 테이블에는 필드의 고유 값당 하나의 행이 포함됩니다. 각 행에는 포인터와 필드 값, 숫자 값과 텍스트 구성 요소가 모두 포함되어 있습니다. 기본적으로 기호 테이블은 필드 값에 대한 조회 테이블입니다.

 

데이터 테이블은 "내부 테이블 보기"를 선택했을 때 QlikView 내부 테이블 뷰어(<CTRL>-T)에서 볼 수 있는 것과 동일한 테이블입니다. 동일한 행 수와 동일한 수의 열입니다. 그러나 테이블에는 데이터 자체가 포함되어 있지 않으며 포인터만 포함되어 있습니다. 그러나 포인터를 사용하여 기호 테이블의 실제 값을 찾을 수 있으므로 정보가 손실되지 않습니다.

 

이 포인터는 일반적인 포인터가 아닙니다. 이는 비트로 채워진 인덱스입니다. , 필드를 나타내는 데 필요한 만큼만 비트를 가질 수 있으며 그 이상은 가질 수 없습니다. 따라서 필드에 4개의 개별 값이 포함된 경우 인덱스 길이는 2비트에 불과합니다. 이는 4개의 값을 나타내는 데 필요한 비트 수이기 때문입니다. 따라서 데이터 테이블은 그렇지 않은 경우보다 훨씬 작아집니다.

 

비트가 포함된 포인터와 기호 테이블은 Qlik 엔진이 가능한 방식으로 데이터를 압축할 수 있는 이유입니다.

 

이를 이해하면 문서를 최적화하는 데 도움이 됩니다. 테이블의 레코드 수와 열 수가 사용되는 메모리 양에 영향을 미치는 것은 분명하지만 다른 요소도 있습니다.

 

  • 기호의 길이는 기호 테이블의 크기에 영향을 미칩니다.
  • 필드의 고유 값 수는 기호 테이블의 행 수와 포인터 길이에 영향을 미칩니다.

 

Qlik 스크립트를 생성할 때 이러한 숫자를 줄여 메모리 사용량을 최소화할 수 있는 방법이 있는지 항상 자문해 보십시오. 다음은 몇 가지 일반적인 경우입니다.

 

표시할 필요가 없는 길고 연결된 복합 키가 있습니다. Autonumber()를 사용하면 기호는 기호 테이블에서 공간을 차지하지 않습니다. 대신 정수 값은 암시적으로 계산됩니다.

:

판매일자&판매점&순번 As 판매번호

AutoNumber(판매일자&판매점&순번) As 판매번호

판매번호 필드는 판매전표의 유니크한 키 역할을 합니다. 판매번호필드의 값을 가공할 필요가 없을 경우 AutoNumber() 함수를 이용하여 고유 정수 값으로 변환함으로써 필드의 길이를 짧게 만들 수 있습니다.  

 

고유한 타임스탬프가 많은 필드가 있습니다. 그런 다음 먼저 날짜와 시간이라는 두 개의 필드로 나누고 시간을 가장 가까운 15초 간격이나 가장 가까운 1분으로 반올림하는 것이 더 나을 때도 있습니다.

:

   Date(Floor(Timestamp)) as Date,

   Time(Floor(Frac(Timestamp),1/24/60)) as Time,

이러한 표현식은 최대 24*60=1440개의 고유 시간 값(11비트)과 일반적으로 365개의 고유 날짜(9비트)를 제공합니다. , 1백만(20비트) 이상의 고유 값이 있는 타임스탬프 필드가 있으면 타임스탬프 필드에 대한 포인터는 두 개별 필드에 대한 포인터보다 더 많은 공간을 차지합니다. 그리고 기호 테이블의 행 수에 대해 훨씬 더 빨리 손익분기점에 도달합니다. 따라서 약 100,000개의 개별 값이 있을 때 더 빨리 두 개의 필드로 분할하는 것을 고려해야 합니다.

 

For more information

https://qliksense.tistory.com/

https://blog.naver.com/qliker

qliker@kakao.com

Qliker

 

 

데이터는 Qlik Sense에 어떻게 저장됩니까.pdf
0.31MB