メイン コンテンツをスキップする 補完的コンテンツへスキップ

Store

Store ステートメントは、QVDParquetCSV、または TXT ファイルを作成します。

構文:  

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

このステートメントにより、明示的に命名された QVDParquet、またはテキスト ファイルが作成されます。

Parquet に保存する場合を除き、ステートメントは 1 つのデータ テーブルからのみ項目をエクスポートできます。複数のテーブルの項目を QVD、CSV、または TXT ファイルにエクスポートする場合は、エクスポートするデータ テーブルを作成するスクリプトで事前に明示的な join を作成する必要があります。Parquet ファイルにデータをネストすることで、複数のテーブルを 1 つの Parquet に保存できます。

テキスト値は 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'

レガシー スクリプト モードは、次のパス形式にも対応しています。

  • 絶対パス

    c:\data\sales.qvd

  • Qlik Sense アプリ作業ディレクトリへの相対パス。

    data\sales.qvd

    パスを省略すると、Qlik SenseDirectory ステートメントで指定されたディレクトリにファイルを保存します。Directory ステートメントがない場合、Qlik Sense は作業ディレクトリ C:\Users\{user}\Documents\Qlik\Sense\Apps にファイルを保存します。

format-spec ::=( ( txt | qvd | parquet), compression is codec)

これらのファイル形式のいずれかに書式指定を設定できます。書式指定が省略されている場合は、qvd で処理されます。

  • CSV および TXT ファイルの txt

  • QVD ファイルの qvd

  • Parquet ファイルの parquet

parquet を使用する場合、[圧縮は] で使用する圧縮コーデックを設定することもできます。[圧縮は] で圧縮コーデックを指定しない場合、snappy が使用されます。次の圧縮設定を使用できます。

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

例:

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 myfile.parquet (parquet);

Store * from mytable into 'lib://FolderConnection/myfile.qvd';

Parquet ファイルでの保存

Parquet は強く型付けされたファイル フォーマットで、各フィールドには特定のデータ型(in32、ダブル、日付と時刻、テキストなど)が 1 つずつ保存されます。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://AttachedFiles/Tmp.parquet] (parquet);

Parquet に保存するためのデータのタグ付け

Parquet にデータを保存する際、特定の列タイプを強制的に指定する $parquet タグをデータに付けます。各データ型は、対応するコントロール タグを追加することで強制できます。例えば、項目を INT32 としてParquet に保存するには、ロード スクリプトで $parquet-int32 のタグを付けます。データ型によって、文字列か数値表現のどちらかのデュアル データが保存されます。

以下の Parqeut コントロール タグは、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 に保存するためのデータのタグ付け

この例では、2 つのタグを使って 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://AttachedFiles/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); 。項目リスト内のすべての項目は、リストされている 1 つ以上のテーブルに存在する必要があります。Store ステートメントにある最初のテーブルは、スター スキーマのファクト テーブルとして使用されます。

項目名は、グループを作成してネストする方法を制御するために使用されます。既定では、項目名はピリオド (.) を使用してノードに分割されます。区切り記号は、システム変数 FieldNameDelimiter を設定するか、指定子 [Delimiter is] を使用して変更できます。指定子はシステム変数を上書きします。詳細については、「データ ロード エディタでの変数の使用」を参照してください。

項目名は区切り記号によって分割され、それらの部分はネストされたグループを使用したスキーマを作成するために使用されます。例えば、STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); により 2 つのグループ (Group1Group2) が、Fields1、Field2 そして Field3、Field4 を使用して作成されます。

情報メモグループと項目は、スキーマ内のノードで同一名になるとは限りません。例えば、STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); は 失敗します。Address は曖昧であり、両方ともデータ項目とグループであるためです。

ネストされたデータを 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://AttachedFiles/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 ファイルのロードによって生成されるキー項目は含まれません。

  • キー項目にリンクされていないテーブルのデータを一緒に保存することはできません。

  • ネストされたファイルはデータ モデルを非正規化します。参照されていない値は保存されず、複数回参照された値はコピーされます。

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。