# 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 に保存できます。

テキスト値は、BOM 形式の UTF-8 で CSV ファイルにエクスポートされます。区切り文字を指定できます (LOAD を参照)。CSV ファイルへの store ステートメントでは、BIFF エクスポートを行えません。

情報メモデータが整形式ではない場合、データが正しく解釈されるように、項目が二重引用符で囲まれる場合があります。これは、項目に引用符、カンマ、スペース、改行などの文字が含まれている場合などに発生する可能性があります。

引数：

コマンド引数の保存

| 引数 | 説明 |
| --- | --- |
| fieldlist::= ( \* \| field) { , field } ) | 選択する項目のリスト。項目リストとして \* を使用すると、すべての項目が指定されます。<br><br>field::= fieldname [as aliasname ]<br><br>fieldname は、table の項目名と同じテキストです。(項目名にスペースや非標準的な文字などが含まれる場合、ストレート二重引用符または角括弧で囲む必要があります。)<br><br>aliasname は、結果の QVD ファイルまたは CSV ファイルで使用される項目の別名です。 |
| table | データ ソースとして使用するロード済みテーブルを表すスクリプト ラベル。 |
| filename | 既存のフォルダ データ接続への有効なパスを含むターゲット ファイルの名前。<br><br>'lib://Table Files/target.qvd'<br><br>レガシー スクリプト モードは、次のパス形式にも対応しています。<br><br><ul> <li> <p>  絶対パス </p> <p><span><span> </span></span><span>c:\data\sales.qvd</span> </p> </li> <li> <p><span>Qlik Sense</span> アプリケーションの作業ディレクトリの相対パス。</p> <p><span><span> </span></span><span>data\sales.qvd</span> </p> <p>パスを省略すると、<span>Qlik Sense</span> は <span>Directory</span> ステートメントで指定されたディレクトリにファイルを保存します。<span>Directory</span> ステートメントがない場合、<span>Qlik Sense</span> は作業ディレクトリ <span>C:\Users\{user}\Documents\Qlik\Sense\Apps</span> にファイルを保存します。 </p> </li> </ul> |
| format-spec ::=( ( txt \| qvd \| parquet)、圧縮は codec) | これらのファイル形式のいずれかに書式指定を設定できます。書式指定が省略されている場合は、qvd で処理されます。<br><br><ul> <li> <p> <span>CSV</span> および <span>TXT</span> ファイルの <span>txt</span>。</p> </li> <li> <p> <span>QVD</span> ファイルの <span>qvd</span>。</p> </li> <li> <p> <span>Parquet</span> ファイルの <span>parquet</span>。</p> </li> </ul><br><br>parquet を使用する場合、[圧縮は] で使用する圧縮コーデックを設定することもできます。[圧縮は] で圧縮コーデックを指定しない場合、`snappy` が使用されます。次の圧縮設定を使用できます。<br><br><ul> <li> <p><code>uncompressed</code> </p> </li> <li> <p><code>snappy</code> </p> </li> <li> <p><code>gzip</code> </p> </li> <li> <p><code>lz4</code> </p> </li> <li> <p><code>brotli</code> </p> </li> <li> <p><code>zstd</code> </p> </li> <li> <p><code>lz4_hadoop</code> </p> </li> </ul><br><br>例:<br><br>`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、ダブル、日付と時刻、テキストなど）が 1 つずつ保存されます。Qlik Sense は、内部データを緩く型付けされたデュアルとして保存し、異なるソースからのデータを同じフィールドに混在させることができます。Parquet の各項目にはデュアルの一部分しか保存できないため、各項目に何が含まれているかを知ることが重要です。既定では、Qlik Sense は項目タイプを使用して項目の保存方法を決定します。特定のフォーマットで Parquet ファイルにデータを保存する場合、ロード時に項目のデータ型を指定する必要があります。テキスト項目に数字、タイムスタンプ項目にテキストなど、Parquet ファイルの互換性のない項目にデータを保存しようとすると、NULL 値になってしまいます。

Parquet に保存するデータをロードするときに、既定の動作を変更できます。データ型を変更するためにフォーマットするか、Parquet で特定の列タイプを強制するためにタグ付けできます。

### Parquet に保存するデータのフォーマット

Qlik Sense フォーマット関数を使用してデータを分類できます。たとえば、Text()、Num()、Interval() または Timestamp() は Parquet でデータを保存する際、データフォーマットを強制できます。Qlik Sense は、項目の属性と自動項目タグによって、ほぼ 20 種類のデータ型にデータを保存できます。詳細については、「[変換関数](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/InterpretationFunctions/interpretation-functions.htm)」を参照してください。

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-int64``$parquet-float``$parquet-double``$parquet-bytearray``$parquet-bytearrayfix``$parquet-decimal``$parquet-date``$parquet-time``$parquet-timestamp``$parquet-string``$parquet-enum``$parquet-interval``$parquet-json``$parquet-bson``$parquet-uuid`

| コントロール タグ | デュアル | 物理型 | 論理型 | 変換型 |
| --- | --- | --- | --- | --- |
| `$parquet-boolean` | 数値 | BOOLEAN | NONE | NONE |
| `$parquet-int32` | 数値 | INT32 | NONE | NONE |
| 数値 | INT64 | NONE | NONE |  |
| 数値 | FLOAT | NONE | NONE |  |
| 数値 | DOUBLE | NONE | NONE |  |
| 文字列 | BYTE\_ARRAY | NONE | UTF8 |  |
| 数値 | FIXED\_LEN\_BYTE\_ARRAY | NONE | DECIMAL |  |
| 数値 | INT64 | DECIMAL | DECIMAL |  |
| 数値 | INT32 | DATE | 日付 |  |
| 数値 | INT64 | TIME | TIME\_MICROS |  |
| 数値 | INT64 | TIMESTAMP | TIMESTAMP\_MICROS |  |
| 文字列 | BYTE\_ARRAY | STRING | UTF8 |  |
| 文字列 | BYTE\_ARRAY | ENUM | ENUM |  |
| 数値 | FIXED\_LEN\_BYTE\_ARRAY | INTERVAL | INTERVAL |  |
| 文字列 | BYTE\_ARRAY | JSON | JSON |  |
| 文字列 | BYTE\_ARRAY | BSON | BSON |  |
| 文字列 | FIXED\_LEN\_BYTE\_ARRAY | UUID | NONE |  |

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] を使用して変更できます。指定子はシステム変数を上書きします。詳細については、「[データ ロード エディターでの変数の使用](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)」を参照してください。

項目名は区切り記号によって分割され、それらの部分はネストされたグループを使用したスキーマを作成するために使用されます。例えば、`STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.');` により 2 つのグループ (Group1 と Group2) が、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 ファイルのロードによって生成されるキー項目は含まれません。

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

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

## 制限事項

* STORE ロードスクリプト ステートメントは、Qlik Sense Enterprise on Windows および Qlik Sense Desktop の Web ストレージ プロバイダ コネクタ ではサポートされていません。