Store
Store ステートメントは、QVD、Parquet、CSV、または TXT ファイルを作成します。
構文:
Store [ fieldlist from] table into filename [ format-spec ];
このステートメントにより、明示的に命名された QVD、Parquet、またはテキスト ファイルが作成されます。
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' レガシー スクリプト モードは、次のパス形式にも対応しています。
|
format-spec ::=( ( txt | qvd | parquet), compression is codec) |
これらのファイル形式のいずれかに書式指定を設定できます。書式指定が省略されている場合は、qvd で処理されます。
parquet を使用する場合、[圧縮は] で使用する圧縮コーデックを設定することもできます。[圧縮は] で圧縮コーデックを指定しない場合、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 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 値に変更されるのを防ぎます。
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-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 に保存するためのデータのタグ付け
この例では、2 つのタグを使って 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); 。項目リスト内のすべての項目は、リストされている 1 つ以上のテーブルに存在する必要があります。Store ステートメントにある最初のテーブルは、スター スキーマのファクト テーブルとして使用されます。
項目名は、グループを作成してネストする方法を制御するために使用されます。既定では、項目名はピリオド (.) を使用してノードに分割されます。区切り記号は、システム変数 FieldNameDelimiter を設定するか、指定子 [Delimiter is] を使用して変更できます。指定子はシステム変数を上書きします。詳細については、「データ ロード エディタでの変数の使用」を参照してください。
項目名は区切り記号によって分割され、それらの部分はネストされたグループを使用したスキーマを作成するために使用されます。例えば、STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); により 2 つのグループ (Group1 と Group2) が、Fields1、Field2 そして Field3、Field4 を使用して作成されます。
ネストされたデータを Parquet に保存すると、テーブル間のキーがスキーマのリンク ノードに変換されます。テーブルはスキーマの構造化ノードに変換されます。 項目名を使用して、既定の変換を上書きできます。
ネストされたデータを Parquet ファイルに保存する
結果の Parquet ファイルには次のスキーマが含まれます。
制限事項
ネストされたデータを Parquet に保存するには、次の制限があります。
ストアはマップ ノードをサポートしません。
保存には、ネストされた Parquet ファイルのロードによって生成されるキー項目は含まれません。
キー項目にリンクされていないテーブルのデータを一緒に保存することはできません。
ネストされたファイルはデータ モデルを非正規化します。参照されていない値は保存されず、複数回参照された値はコピーされます。