기본 콘텐츠로 건너뛰기 보완적인 콘텐츠로 건너뛰기

Store

Store 문은 QVD, Parquet, CSV 또는 TXT 파일을 만듭니다.

구문:  

Store [ fieldlist from] table into filename [ format-spec ];

이 문은 명시적으로 명명된 QVD, Parquet 또는 텍스트 파일을 만듭니다.

Parquet에 저장하지 않는 한 이 문은 하나의 데이터 테이블에서만 필드를 내보낼 수 있습니다. 여러 테이블의 필드를 QVD, CSV 또는 TXT 파일로 내보내려는 경우 내보낼 데이터 테이블을 만들려면 스크립트에서 미리 명시적 join을 수행해야 합니다. Parquet 파일에 데이터를 중첩하여 하나의 Parquet에 여러 테이블을 저장할 수 있습니다.

텍스트 값은 UTF-8 형식의 CSV 파일로 내보냅니다. 구분 기호를 지정할 수 있습니다. 자세한 내용은 LOAD를 참조하십시오. CSV 파일에 대한 store 문은 BIFF 내보내기를 지원하지 않습니다.

정보 메모형식이 올바르지 않은 데이터의 경우 데이터가 올바르게 해석되도록 필드를 큰따옴표로 묶습니다. 예를 들어, 필드에 따옴표, 쉼표, 공백 또는 줄 바꿈과 같은 문자가 포함된 경우 이런 일이 발생할 수 있습니다.

쓰기 권한이 있는 개인 공간 또는 공유 공간에 파일을 저장할지 여부를 지정할 수 있습니다. 공유 공간에 저장하는 경우 구성원은 해당 데이터를 사용하여 공간에서 앱을 만들 수 있습니다. 공유 공간에서 권한 관리를 참조하십시오.

인수:  

Store 명령 인수
인수 설명
fieldlist::= ( * | field) { , field } )

선택할 필드의 목록입니다. 필드 목록에 *를 사용하면 모든 필드를 지정할 수 있습니다. 

field::= fieldname [as aliasname ]

fieldnametable의 필드 이름과 동일한 텍스트입니다. (필드 이름에 공백 또는 기타 비표준 문자가 포함된 경우 큰따옴표 또는 대괄호로 묶어야 합니다.)

aliasname은 생성된 QVD 또는 CSV 파일에서 사용할 필드의 대체 이름입니다.

table 데이터 소스로 사용하기 위해 이미 로드된 테이블을 나타내는 스크립트 레이블입니다.
filename

기존 폴더 데이터 연결에 대한 유효한 경로가 포함된 대상 파일의 이름입니다.

 

  • 개인 공간: [lib://DataFiles/xyz.qvd]

    '/'로 구분된 경로 계층 구조를 파일 이름에 사용할 수 있습니다. 그러나 데이터 로드 편집기 및 데이터 관리자 UI는 현재 계층 구조적 방식으로 경로 표시를 지원하지 않습니다. '/'로 구분된 파일 이름을 사용하면 파일 이름 열에 전체가 표시됩니다.

  • 공유 공간: [lib://TeamSharedSpace:DataFiles/xyz.qvd]
format-spec ::=( ( txt | qvd | parquet), compression is 코덱)

서식 사양을 이러한 파일 형식 중 하나로 설정할 수 있습니다. 서식 사양을 생략하면 qvd가 사용됩니다.

  • CSVTXT 파일의 경우 txt입니다.

  • QVD 파일의 경우 qvd.

  • Parquet 파일의 경우 parquet.

parquet를 사용하는 경우 compression is와 함께 사용할 압축 코덱도 설정할 수 있습니다. compression is로 압축 코덱을 지정하지 않으면 snappy가 사용됩니다. 다음 압축 설정을 사용할 수 있습니다.

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

예:

Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4);

정보 메모DataFiles 연결의 파일 확장명은 대/소문자를 구분합니다. 예를 들어 .qvd입니다.

 

Store mytable into [lib://DataFiles/xyz.qvd];

Store * from mytable into [lib://DataFiles/myfile.qvd];

Store Name, RegNo from mytable into [lib://DataFiles/xyz.qvd];

Store Name as a, RegNo as b from mytable into [lib://DataFiles/myfile.qvd];

Store mytable into [lib://DataFiles/myfile.txt] (txt);

Store mytable into [lib://DataFiles/myfile.parquet] (parquet);

Store * from mytable into [lib://DataFiles/myfile.csv] (txt);

Store * from mytable into [lib://TeamSharedSpace:DataFiles/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 값으로 변경되는 것을 방지합니다.

Data: LOAD * INLINE [ num, text, mixed 123.321, abc, 123 456.654, def, xyz 789.987, ghi, 321 ]; Format:
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);

Parquet에 저장하기 위한 데이터 태그 지정

Parquet에 데이터를 저장할 때 특정 열 유형을 강제 적용하려면 데이터에 $parquet 태그를 지정합니다. 각 데이터 유형은 해당 제어 태그를 추가하여 적용할 수 있습니다. 예를 들어, 필드를 Parquet에 INT32로 저장하려면 로드 스크립트에서 $parquet-int32 태그를 지정합니다. 데이터 유형에 따라 이중 데이터의 문자열 또는 숫자 표현이 저장됩니다.

다음 Parquet 제어 태그는 Parquet 파일에 저장하기 위해 필드에 태그를 지정하는 데 사용할 수 있습니다.

Parquet 제어 태그
제어 태그이중물리적 유형논리적 유형변환된 유형
$parquet-boolean숫자BOOLEANNONENONE
$parquet-int32숫자INT32NONENONE
$parquet-int64숫자INT64NONENONE
$parquet-float숫자FLOATNONENONE
$parquet-double숫자DOUBLENONENONE
$parquet-bytearray문자열BYTE_ARRAYNONEUTF8
$parquet-bytearrayfix숫자FIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimal숫자INT64DECIMALDECIMAL
$parquet-date숫자INT32DATEDATE
$parquet-time숫자INT64TIMETIME_MICROS
$parquet-timestamp숫자INT64TIMESTAMPTIMESTAMP_MICROS
$parquet-string문자열BYTE_ARRAYSTRINGUTF8
$parquet-enum문자열BYTE_ARRAYENUMENUM
$parquet-interval숫자FIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-json문자열BYTE_ARRAYJSONJSON
$parquet-bson문자열BYTE_ARRAYBSONBSON
$parquet-uuid문자열FIXED_LEN_BYTE_ARRAYUUIDNONE

Parquet에 저장하기 위한 데이터 태그 지정

이 예에서는 Parquet에 대한 데이터를 정의하는 데 두 개의 태그가 사용됩니다. num 필드에는 $parquet-int32 태그가 지정되어 Parquet에서 INT32로 설정될 숫자 필드로 정의됩니다.

Data: LOAD * INLINE [ num, text, 123.321, abc 456.654, def 789.987, ghi ]; TAG num WITH '$parquet-int32'; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);

중첩된 데이터를 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, Field2Field3, Field4를 사용하여 두 그룹(Group1Group2)을 만듭니다.

정보 메모그룹과 필드는 스키마의 노드에서 동일한 이름을 가질 수 없습니다. 예를 들어, STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.'');주소가 모호하게 데이터 필드 및 그룹 둘 다이기 때문에 실패합니다.

Parquet에 중첩된 데이터를 저장하면 테이블 사이의 키가 스키마의 링크 노드로 변환됩니다. 테이블은 스키마의 구조화된 노드로 변환됩니다. 필드 이름을 사용하여 기본 변환을 재정의할 수 있습니다.

중첩된 데이터를 Parquet 파일에 저장

company: LOAD * INLINE [ company, contact A&G, Amanda Honda Cabro, Cary Frank Fenwick, Dennis Fisher Camros, Molly McKenzie ]; salesrep: LOAD * INLINE [ company, salesrep A&G, Bob Park Cabro, Cezar Sandu Fenwick, Ken Roberts Camros, Max Smith ]; headquarter: LOAD * INLINE [ company, country, city A&G, USA, Los Angeles Cabro, USA, Albuquerque Fenwick, USA, Baltimore Camros, USA, Omaha ]; region: LOAD * INLINE [ region, city West, Los Angeles Southwest, Albuquerque East, Baltimore Central, Omaha ]; STORE company, salesrep, headquarter, region INTO [lib://DataFiles/company.parquet] (parquet) DROP TABLES company, salesrep, headquarter, region;

결과 Parquet 파일에는 다음과 같은 스키마가 있습니다.

company (String) contact (String) company:salesrep (List) salesrep (Group) salesrep (String) company:headquarter (List) headquarter (Group) country (String) city (String) city:region (List) region (Group) region (String)

제한 사항

중첩된 데이터를 Parquet에 저장하는 데에는 다음과 같은 제한 사항이 있습니다.

  • 저장은 맵 노드를 지원하지 않습니다.

  • 저장에는 중첩된 Parquet 파일을 로드하여 생성된 키 필드가 포함되지 않습니다.

  • 키 필드와 연결되지 않은 테이블의 데이터를 함께 저장할 수 없습니다.

  • 중첩된 파일은 데이터 모델을 비정규화합니다. 참조되지 않은 값은 저장되지 않으며 여러 번 참조된 값은 복사됩니다.

이 페이지가 도움이 되었습니까?

이 페이지 또는 해당 콘텐츠에서 오타, 누락된 단계 또는 기술적 오류와 같은 문제를 발견하면 개선 방법을 알려 주십시오!