# Snowflake

Snowflake は、データ パイプラインまたはレプリケーション タスクのターゲット データ プラットフォームとして使用できます。データ パイプラインでは、データの保存、データの変換、データ マートの作成、データの登録など、さまざまな ELT 操作をターゲット プラットフォーム上で実行できます。一方、レプリケーション タスクでは、基本的な変換機能を備え、ソース システムからターゲット システムへ直接データをレプリケートしますが、ELT 操作はサポートしません。

Snowflake をターゲットとして設定するには、次が必要です。

* データベースの [必要な権限](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Permissi) を設定する。
* [必須ドライバー](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver)をインストールする。これは、Data Movement gateway 経由で Snowflake に接続する場合にのみ必要であることに注意してください。
* Snowflake への接続を構成する

## 接続プロパティの設定

コネクタを構成するには、次の手順を実行します。

1. [接続] で、 [接続を作成] をクリックします。

2. Snowflake ターゲット コネクタを選択し、次の設定を行います。

### データ ターゲット

#### データ ゲートウェイ

情報メモこのサブスクリプション ティアでは Data Movement gateway がサポートされていないため、Qlik Talend Cloud スターター サブスクリプションではこの項目を使用できません。

Data Movement gateway は、ターゲット データベースが Qlik Cloud からアクセスできない場合にのみ必要で、プライベート リンクを使用してのみアクセスできます ( Virtual Private Cloud にある場合など) 。該当する場合には、ターゲット データベースにアクセスする Data Movement gateway を選択します。

ユースケースに応じて、これはデータ ソースからデータを移動するために展開された、同じまたは別の Data Movement gateway になります。

Data Movement gateway のユース ケースに関する詳細については、「[どのようなときに Data Movement gateway が必要ですか？](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top)」および「[一般的な使用例](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)」を参照してください。

ターゲット データベースが Qlik Cloud から直接アクセスできる場合は、 [None] (なし) を選択します。

情報メモData Movement gateway 経由でターゲット データベースにアクセスする場合は、Data Movement gateway マシンに適切なドライバーをインストールする必要もあります。詳細については、以下の「[ドライバーのセットアップ](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver)」を参照してください。

### 接続プロパティ

* サーバー: Snowflake にアクセスするための URL。例) myaccount.snowflakecomputing.com。

* ポート: Snowflake データベースにアクセスするために通過するポート。既定値は 443 です。

### [Authentication] (認証)

認証方法を選択します。

* ユーザー名とパスワード

  情報メモこの方法を選択した場合、タスク設定の [一般] タブにある [Snowpipe Streaming] ロード方法はサポートされません。

* キー ペア

  Snowflake データベースは、キー ペア認証を使用するように構成する必要があります。手順については、 [[キー ペア認証の構成](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#configuring-key-pair-authentication)] を参照してください。

  情報メモData Movement gateway を使用する場合、キーペア認証を使用するにはバージョン 2024.5.14 以降が必要です。

### アカウントのプロパティ

#### ユーザー名とパスワード

ユーザー名とパスワード: Snowflake データベースへのアクセスを承認されたユーザーのユーザー名とパスワード。

#### キー ペア

キー ペアのプロパティ

| アカウントのプロパティ | 説明 |
| --- | --- |
| ユーザー | Snowflake のユーザー。 |
| [Private Key File] (プライベートキーファイル) | [参照] をクリックして、プライベート キー ファイルを選択します。 |
| プライベート キー ファイルのパスワード | プライベート キーが暗号化されている場合に復号するためのパスワード。 |

### データベースのプロパティ

* 既定のウェアハウス: Snowflake ウェアハウスの名前です。これはプロジェクト設定で上書きできます。

* データベース名: データベースを指定するには 2 つの方法があります。

  * 方法 1 - リストから選択: [Load databases] (データベースをロード) をクリックし、データベースを選択します。

  * 方法 2 - 手動: [Enter database name manually] (データベース名を手動で入力) を選択し、データベース名を入力します。

### 追加の接続プロパティ

必要に応じて、追加の ODBC および JDBC 接続プロパティを指定できます。ODBC 接続と JDBC 接続の両方に関連するプロパティ (「Role」など) は、両方に追加する必要があります。

情報メモ

* Data Movement gateway を使用している場合、バージョン 2024.5.54 以降では追加の接続プロパティがサポートされます。
* セキュア プロパティ (暗号化キーなど) はサポートされていません。
* 接続設定に専用の項目を持つプロパティを追加しないでください。

#### ODBC プロパティ

ODBC ドライバー経由で接続するときに、データ移動タスク (ランディング、レプリケーション、データ レイクのランディング) で使用される追加の接続プロパティを指定できます。

項目右側にある the 新規作成 icon と the キャンセル icon ボタンを使用して、必要に応じてプロパティを追加したり削除したりします。

#### JDBC プロパティ

JDBC ドライバー経由で接続するときに、ELT タスク (登録、ストレージ、変換、およびデータ マート) で使用される追加の接続プロパティを指定できます。

項目右側にある the 新規作成 icon と the キャンセル icon ボタンを使用して、必要に応じてプロパティを追加したり削除したりします。

### 内部プロパティ

内部プロパティは、特殊なユース ケース向けであるため、ダイアログで公開されません。Qlik サポートによって指示があった場合にのみ使用する必要があります。

項目右側にある the 新規作成 icon と the キャンセル icon ボタンを使用して、必要に応じてプロパティを追加したり削除したりします。

### 名前

接続の表示名です。

## 前提条件

### 必要な権限

次の権限が必要です。

存在しないスキーマを自動的に作成する場合に必要な権限

* USAGE ON DATABASE
* CREATE SCHEMA ON DATABASE

スキーマが既に存在する場合に必要な権限

* USAGE ON DATABASE
* USAGE ON SCHEMA
* CREATE FILE FORMAT ON SCHEMA
* CREATE STAGE ON SCHEMA
* CREATE TABLE ON SCHEMA

### ドライバーのセットアップ

ドライバーは、Data Movement gateway 経由でデータベースにアクセスする場合にのみ必要です。

driver のインストールは、ドライバー インストール ユーティリティを使用する (推奨) か、手動で実行できます。手動インストールは、ドライバー インストール ユーティリティで問題が発生した場合にのみ実行するようにしてください。

#### ドライバー インストール ユーティリティを使用したドライバーのインストール

このセクションでは、必要な driver のインストール方法を説明しました。このプロセスでは、driver をダウンロードし、必要なフォルダー (以下を参照) にコピーし、自動的にインストールして設定するスクリプトを実行します。また、必要に応じて driver の更新やアンインストールを行うスクリプトを実行することもできます。

インストールの準備

* データ移動 ゲートウェイ サーバーに Python 3.6.x 以降 がインストールされていることを確認します。

  Python は、ほとんどの Linux 配布に前もってインストールされています。お使いのシステムにインストールされている Python のバージョンは、次のコマンドを実行することで確認できます。

  python3 --version

* Snowflake ODBC ドライバー「snowflake-odbc-&lt;version&gt;.x86\_64.rpm」をダウンロードします。サポートされているバージョンへの直接ダウンロード リンクは、/opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml の binary-artifacts にあります。ダウンロードが完了したら、ファイルを次の場所にコピーします。

  /opt/qlik/gateway/movement/drivers/snowflake

driver のインストール

driver をするには:

1. Data Movement gateway サービスを停止します。

   sudo systemctl stop repagent

2. 必要に応じて、サービスが停止されたことを確認します。

   sudo systemctl status repagent

   ステータスは次のようになっているはずです。

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. データ移動 ゲートウェイ マシンで、作業ディレクトリを次に変更します:

   opt/qlik/gateway/movement/drivers/bin

4. 次のコマンドを実行します:

   構文:

   ./install snowflake

   それ以外の場合は、driver の EULA が表示されます。

5. 次のいずれかを実行します。

   * 何度も [Enter] を押すと、EULA 全体をスクロールできます。
   * 何度もスペースバーを押すと、EULA 全体をスピーディにスクロールできます。
   * q を押すと、ライセンス テキストが終了し、EULA 受諾オプションが表示されます。

6. 次のいずれかを実行します。

   * 「y」を入力して [Enter] を押すと、EULA が受諾され、インストールが開始します。

   * 「n」を入力して [Enter] を押すと、EULA が拒否され、インストールが終了します。

   * 「v」を入力して [Enter] を押すと、EULA が再表示されます。

   driver がインストールされます。

7. インストールが終了するまで待ってから (「完了しました!」と表示されます)、Data Movement gateway サービスを開始します。

   sudo systemctl start repagent

8. 必要に応じて、サービスが開始されたことを確認します。

   sudo systemctl status repagent

   ステータスは次のようになっているはずです。

   Active: active (running) since &lt;timestamp&gt; ago

driver の更新

提供された driver をインストールする前に前のバージョンの driver をアンインストールしたい場合は、更新コマンドを実行します。

driver を更新するには:

1. Data Movement gateway サービスを停止します。

   sudo systemctl stop repagent

2. 必要に応じて、サービスが停止されたことを確認します。

   sudo systemctl status repagent

   ステータスは次のようになっているはずです。

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. データ移動 ゲートウェイ マシンで、作業ディレクトリを次に変更します:

   opt/qlik/gateway/movement/drivers/bin

4. 次のコマンドを実行します:

   構文:

   ./update snowflake

   それ以外の場合は、driver の EULA が表示されます。

5. 次のいずれかを実行します。

   * 何度も [Enter] を押すと、EULA 全体をスクロールできます。
   * 何度もスペースバーを押すと、EULA 全体をスピーディにスクロールできます。
   * q を押すと、ライセンス テキストが終了し、EULA 受諾オプションが表示されます。

6. 次のいずれかを実行します。

   * 「y」を入力して [Enter] を押すと、EULA が受諾され、インストールが開始します。
   * 「n」を入力して [Enter] を押すと、EULA が拒否され、インストールが終了します。
   * 「v」を入力して [Enter] を押すと、最初から EULA をレビューできます。

   古い driver がアンインストールされ、新しい driver がインストールされます。

7. インストールが終了するまで待ってから (「完了しました!」と表示されます)、Data Movement gateway サービスを開始します。

   sudo systemctl start repagent

8. 必要に応じて、サービスが開始されたことを確認します。

   sudo systemctl status repagent

   ステータスは次のようになっているはずです。

   Active: active (running) since &lt;timestamp&gt; ago

driver のアンインストール

driver をアンインストールする場合は、アンインストール コマンドを実行します。

driver をアンインストールするには:

1. このコネクタを使用するように構成されているすべてのタスクを停止します。

2. データ移動 ゲートウェイ マシンで、作業ディレクトリを次に変更します:

   opt/qlik/gateway/movement/drivers/bin

3. 次のコマンドを実行します:

   構文:

   ./uninstall snowflake

   driver がアンインストールされます。

#### ドライバーの手動インストール

自動ドライバーのインストールが正常に完了しなかった場合にのみ、driver を手動でインストールするようにしてください。

ODBC ドライバーと JDBC ドライバーの両方をインストールする必要があります。

ODBC ドライバーのインストール

1. Data Movement gateway がインストールされたら、/opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml の binary-artifacts の下にリストされている snowflake-odbc-&lt;バージョン&gt;x86\_64.rpm ドライバー ファイルをダウンロードし、Data Movement gateway マシンにコピーします。
2. ドライバーを Data Movement gateway マシンにインストールします。

JDBC ドライバーのインストール

1. /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml の binary-artifacts の下にリストされている snowflake-jdbc-&lt;バージョン&gt;.jar ファイルをダウンロードし、Data Movement gateway マシンの次のフォルダーにコピーします。

   /opt/qlik/gateway/movement/qcs\_agents/qdi-db-commands/lib

2. Data Movement gateway サービスを再起動し、サービスが [Data Movement gateway サービス コマンド](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-managing.htm#Restarti) で説明されているコマンドを実行して再起動されているかどうかを確認します。

### ポート

アウトバウンド通信のために、ファイアウォール ポート 443 を開く必要があります。

## 制限と考慮事項

データを Snowflake ターゲットに動かす際は、次の制限が適用されます。

* 名前にバックスラッシュを含むテーブル (例: SPECIAL\\TABLE\N) のレプリケーションはサポートされていません。

### Snowpipe Streaming ロード方法を使用する際の制限と考慮事項

ロード方法として Snowpipe Streaming を使用する場合、次の制限が適用されます。
* ランディング タスクのみ:

  * Snowpipe は INSERT 操作のみをサポートしているため、 [リロードして比較] 更新方法はサポートされていません。

* レプリケーション タスクのみ:

  * Snowpipe は INSERT 操作のみをサポートしているため、 [変更の適用] レプリケーション モードはサポートされていません。

  * トランザクション中に [変更の保存] レプリケーションを停止し、30 日以上経過してから再開すると、ターゲットでレコードが重複する可能性があります。Snowflake は 30 日後にチャネルを自動的に削除します。

* ランディング タスクとレプリケーション タスクの両方:

  * ユーザー名とパスワードの認証はサポートされていません。
  * XML サブタイプはサポートされていません。

## データ型

次の表は、Qlik Cloud の使用時に対応する Snowflake データ型と、Qlik Cloud データ型からの初期設定のマッピングを示しています。

ネイティブ データ タイプの情報は保持され、データセット ビューの [ネイティブ データ タイプ] 列に表示されます。列が表示されない場合は、データ セット ビューの列ピッカーを開いて、 [ネイティブ データ タイプ] 列を選択する必要があります。

対応しているデータ型

| Qlik Cloud データ型 | Snowflake データ型 |
| --- | --- |
| BOOLEAN | BOOLEAN |
| BYTES | BINARY (長さのバイト数) |
| 日付 | 日付 |
| TIME | TIME (精度) |
| DATETIME | Snowflake:<br><br><ul> <li> <p>TIMESTAMP</p> </li> </ul><br><br>Snowflake Iceberg の場合:<br><br><ul> <li> <p>TIMESTAMP</p> </li> <li> <p>スケールが 7 を超える場合: STRING(37)</p> </li> </ul> |
| INT1 | BYTEINT |
| INT2 | SMALLINT |
| INT4 | INTEGER |
| INT8 | BIGINT |
| NUMERIC | NUMBER (精度、スケール) |
| REAL4 | FLOAT4 |
| REAL8 | FLOAT8 |
| UINT1 | BYTEINT |
| UINT2 | INTEGER |
| UINT4 | INTEGER |
| UINT8 | BIGINT |
| STRING | VARCHAR (長さのバイト数) |
| WSTRING | NVARCHAR (長さのバイト数) |
| BLOB | BINARY (8388608) |
| NCLOB | NVARCHAR (8388608) |
| CLOB | VARCHAR (8388608) |
| JSON | VARIANT |

Snowflake では、すべての VARCHAR 列が UTF-8 文字を格納します。VARCHAR 列にロードされたデータが最大長である 128 MB を超えると、

```
        RetCode: SQL_ERROR  SqlState: 22000 NativeError: 100078 Message: String '{"col1": null, "col2": null, "col3": null, "col4' is too long and would be truncated
        
```

のエラーが発生します。

Snowflake で配列、オブジェクト、TIMESTAMP\_TZ データ型を扱う場合、BINARY に変換する必要があります。

* これらのタイプのいずれかを持つ登録済みデータ タスクと、Iceberg 形式のテーブルを保存するタスクがあります。

* Iceberg タスクには、これらのタイプのいずれかがあり、Iceberg のないタスクもあります。