Store
Store 문은 QVD, Parquet, CSV 또는 TXT 파일을 만듭니다.
구문:
Store [ fieldlist from] table into filename [ format-spec ];
이 문은 명시적으로 명명된 QVD, Parquet 또는 텍스트 파일을 만듭니다.
Parquet에 저장하지 않는 한 이 문은 하나의 데이터 테이블에서만 필드를 내보낼 수 있습니다. 여러 테이블의 필드를 QVD, CSV 또는 TXT 파일로 내보내려는 경우 내보낼 데이터 테이블을 만들려면 스크립트에서 미리 명시적 join을 수행해야 합니다. Parquet 파일에 데이터를 중첩하여 하나의 Parquet에 여러 테이블을 저장할 수 있습니다.
텍스트 값은 BOM 형식으로 UTF-8의 CSV 파일로 내보냅니다. 구분 기호를 지정할 수 있습니다. 자세한 내용은 LOAD를 참조하십시오. CSV 파일에 대한 store 문은 BIFF 내보내기를 지원하지 않습니다.
인수:
인수 | 설명 |
---|---|
fieldlist::= ( * | field) { , field } ) |
선택할 필드의 목록입니다. 필드 목록에 *를 사용하면 모든 필드를 지정할 수 있습니다. field::= fieldname [as aliasname ] fieldname은 table의 필드 이름과 동일한 텍스트입니다. (필드 이름에 공백 또는 기타 비표준 문자가 포함된 경우 큰따옴표 또는 대괄호로 묶어야 합니다.) aliasname은 생성된 QVD 또는 CSV 파일에서 사용할 필드의 대체 이름입니다. |
table | 데이터 소스로 사용하기 위해 이미 로드된 테이블을 나타내는 스크립트 레이블입니다. |
filename |
기존 폴더 데이터 연결에 대한 유효한 경로가 포함된 대상 파일의 이름입니다. 'lib://Table Files/target.qvd' 레거시 스크립팅 모드에서는 다음 경로 형식도 지원됩니다.
|
format-spec ::=( ( txt | qvd | parquet), compression is 코덱) |
서식 사양을 이러한 파일 형식 중 하나로 설정할 수 있습니다. 서식 사양을 생략하면 qvd가 사용됩니다.
parquet를 사용하는 경우 compression is와 함께 사용할 압축 코덱도 설정할 수 있습니다. compression is로 압축 코덱을 지정하지 않으면 snappy가 사용됩니다. 다음 압축 설정을 사용할 수 있습니다.
예: Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4); |
Store mytable into xyz.qvd (qvd);
Store * from mytable into 'lib://FolderConnection/myfile.qvd';
Store Name, RegNo from mytable into xyz.qvd;
Store Name as a, RegNo as b from mytable into 'lib://FolderConnection/myfile.qvd';
Store mytable into myfile.txt (txt);
Store mytable into [lib://FolderConnection/myfile.csv] (txt);
Store mytable into myfile.parquet (parquet);
Store * from mytable into 'lib://FolderConnection/myfile.qvd';
Parquet 파일에 저장
Parquet는 각 필드에 단일 특정 유형의 데이터(예: in32, double, 타임스탬프 또는 텍스트)가 포함된 강력한 유형의 파일 형식입니다. Qlik Sense는 내부 데이터를 느슨한 유형의 이중으로 저장합니다. 여기서 서로 다른 소스의 데이터가 동일한 필드에 혼합될 수 있습니다. Parquet의 각 필드에는 이중의 한 부분만 저장할 수 있으므로 각 필드에 무엇이 포함되어 있는지 알아야 합니다. 기본적으로 Qlik Sense는 필드 유형을 사용하여 필드 저장 방법을 결정합니다. Parquet 파일에 데이터를 특정 형식으로 저장하는 경우 필드를 로드할 때 필드의 데이터 유형을 지정해야 합니다. 텍스트 필드의 숫자나 타임스탬프 필드의 텍스트 등 Parquet 파일의 호환되지 않는 필드에 데이터를 저장하려고 하면 null 값이 발생하게 됩니다.
Parquet에 저장하려는 데이터를 로드할 때 기본 동작을 변경할 수 있습니다. 형식을 지정하여 데이터 유형을 변경하거나 태그를 지정하여 Parquet에서 특정 열 유형을 적용할 수 있습니다.
Parquet에 저장할 데이터 형식 지정
Qlik Sense 형식 지정 함수를 사용하여 데이터를 분류할 수 있습니다. 예를 들어, Text(), Num(), Interval() 또는 Timestamp()는 데이터를 Parquet에 저장할 때 데이터 형식을 적용할 수 있습니다. Qlik Sense은 필드 특성 및 자동 필드 태그에 따라 거의 20가지 데이터 유형으로 데이터를 저장할 수 있습니다. 자세한 내용은 해석 함수을 참조하십시오.
Num() 및 Text()를 사용하여 데이터 형식 지정
다음 예에서는 Parquet에 저장할 데이터를 준비하는 방법을 보여 줍니다. Num()은 숫자 필드에 적용됩니다. Text()는 텍스트와 혼합 모두에 적용됩니다. 혼합의 경우 Text()는 Parquet의 숫자 필드처럼 처리되어 텍스트 값이 null 값으로 변경되는 것을 방지합니다.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);
Parquet에 저장하기 위한 데이터 태그 지정
Parquet에 데이터를 저장할 때 특정 열 유형을 강제 적용하려면 데이터에 $parquet 태그를 지정합니다. 각 데이터 유형은 해당 제어 태그를 추가하여 적용할 수 있습니다. 예를 들어, 필드를 Parquet에 INT32로 저장하려면 로드 스크립트에서 $parquet-int32 태그를 지정합니다. 데이터 유형에 따라 이중 데이터의 문자열 또는 숫자 표현이 저장됩니다.
다음 Parquet 제어 태그는 Parquet 파일에 저장하기 위해 필드에 태그를 지정하는 데 사용할 수 있습니다.
제어 태그 | 이중 | 물리적 유형 | 논리적 유형 | 변환된 유형 |
---|---|---|---|---|
$parquet-boolean | 숫자 | BOOLEAN | NONE | NONE |
$parquet-int32 | 숫자 | INT32 | NONE | NONE |
$parquet-int64 | 숫자 | INT64 | NONE | NONE |
$parquet-float | 숫자 | FLOAT | NONE | NONE |
$parquet-double | 숫자 | DOUBLE | NONE | NONE |
$parquet-bytearray | 문자열 | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | 숫자 | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | 숫자 | INT64 | DECIMAL | DECIMAL |
$parquet-date | 숫자 | INT32 | DATE | DATE |
$parquet-time | 숫자 | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | 숫자 | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | 문자열 | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | 문자열 | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | 숫자 | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | 문자열 | BYTE_ARRAY | JSON | JSON |
$parquet-bson | 문자열 | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | 문자열 | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Parquet에 저장하기 위한 데이터 태그 지정
이 예에서는 Parquet에 대한 데이터를 정의하는 데 두 개의 태그가 사용됩니다. num 필드에는 $parquet-int32 태그가 지정되어 Parquet에서 INT32로 설정될 숫자 필드로 정의됩니다.
중첩된 데이터를 Parquet 파일에 저장
여러 테이블을 구조화된 데이터에 중첩하여 Parquet 파일에 저장할 수 있습니다. Store는 별표 스키마의 구조화된 노드와 목록 노드를 지원합니다. 단일 테이블은 Delimiter is 지정자를 사용하여 중첩 모드로 저장할 수도 있습니다.
테이블을 저장할 때 포함하려는 테이블을 쉼표로 구분하여 지정합니다. 예: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Store 문의 필드 목록을 사용하여 저장되는 필드를 제어할 수 있습니다. 예: STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. 필드 목록의 모든 필드는 나열된 테이블 중 하나 이상에 있어야 합니다. Store 문의 첫 번째 테이블은 별표 스키마의 팩트 테이블로 사용됩니다.
필드 이름은 그룹을 만들고 중첩하는 방법을 제어하는 데 사용됩니다. 기본적으로 필드 이름은 마침표(.)를 사용하여 노드로 분할됩니다. 구분 기호는 시스템 변수 FieldName Delimiter를 설정하거나 Delimiter is 지정자를 사용하여 변경할 수 있습니다. 지정자는 시스템 변수를 재정의합니다. 자세한 내용은 데이터 로드 편집기에서 변수를 사용하여 작업을 참조하십시오.
필드 이름은 구분 기호로 분할되며 해당 부분은 중첩된 그룹이 있는 스키마를 만드는 데 사용됩니다. 예를 들어, STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.');는 Fields1, Field2 및 Field3, Field4를 사용하여 두 그룹(Group1 및 Group2)을 만듭니다.
Parquet에 중첩된 데이터를 저장하면 테이블 사이의 키가 스키마의 링크 노드로 변환됩니다. 테이블은 스키마의 구조화된 노드로 변환됩니다. 필드 이름을 사용하여 기본 변환을 재정의할 수 있습니다.
중첩된 데이터를 Parquet 파일에 저장
결과 Parquet 파일에는 다음과 같은 스키마가 있습니다.
제한 사항
중첩된 데이터를 Parquet에 저장하는 데에는 다음과 같은 제한 사항이 있습니다.
저장은 맵 노드를 지원하지 않습니다.
저장에는 중첩된 Parquet 파일을 로드하여 생성된 키 필드가 포함되지 않습니다.
키 필드와 연결되지 않은 테이블의 데이터를 함께 저장할 수 없습니다.
중첩된 파일은 데이터 모델을 비정규화합니다. 참조되지 않은 값은 저장되지 않으며 여러 번 참조된 값은 복사됩니다.