# Snowflake

您可以使用 Snowflake 作為資料管道或複寫任務中的目標資料平台。在資料管道中，可以在目標平台執行各種 ELT 操作，包括儲存資料、轉換資料、建立資料超市和註冊資料。另一方面，複寫任務涉及將資料直接從來源系統複寫至具有基本轉換功能但不支援 ELT 操作的目標系統。

設定 Snowflake 作為目標涉及：

* 設定資料庫上的 [必要權限](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Permissi)。
* 安裝[所需的驅動程式](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver)。請注意，這只有在透過 資料移動閘道 連線至 Snowflake 時才需要。
* 設定連線至 Snowflake

## 設定連線屬性

若要設定連接器，進行下列事項：

1. 在連線中，按一下建立連線。

2. 選取 Snowflake 目標連接器，然後提供下列設定：

### 資料目標

#### 資料閘道

資訊備註此欄位無法用於 Qlik Talend Cloud 啟動器 訂閱，因為此訂閱層級不支援 資料移動閘道。

只有在無法從 Qlik Cloud 存取目標資料庫且只能使用私人連結存取時 (例如若將在虛擬私人雲端中)，才需要 資料移動閘道。在此情況下，選取您要用來存取目標資料庫的 資料移動閘道。

根據您的使用情況，這會是為了從資料來源移動資料而部署的相同或不同 資料移動閘道。

如需關於 資料移動閘道 使用案例的資訊，請參閱 [何時需要 資料移動閘道？](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) 和 [常見使用案例](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)。

若目標資料庫可從 Qlik Cloud 直接存取，請選取無。

資訊備註透過 資料移動閘道 存取目標資料庫時，您也需要在 資料移動閘道 機器上安裝適當的驅動程式。如需詳細資訊，請參閱以下的 [驅動程式的設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver)。

### 連線屬性

* 伺服器：用於存取 Snowflake 的 URL。例如 myaccount.snowflakecomputing.com。

* 連接埠：想要藉此存取 Snowflake 資料庫的連接埠。預設為 443。

### 驗證

選擇驗證方法：

* 使用者名稱和密碼

  資訊備註選取此方法時，不支援任務設定的一般索引標籤中的 Snowpipe 串流載入方法。

* 金鑰組

  您的 Snowflake 資料庫必須設定為使用金鑰組驗證。該流程在[設定金鑰組驗證](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#configuring-key-pair-authentication)中描述。

  資訊備註如果使用 資料移動閘道，則需要 2024.5.14 或更高版本才能使用金鑰組驗證。

### 帳戶屬性

#### 使用者名稱和密碼

使用者名稱和密碼：獲得授權可存取 Snowflake 資料庫的使用者的使用者名稱和密碼。

#### 金鑰組

金鑰組屬性

| 帳戶屬性 | 描述 |
| --- | --- |
| 使用者 | Snowflake 中的使用者。 |
| 私人金鑰檔案 | 按一下瀏覽以選取您的私人金鑰檔案。 |
| 私人金鑰檔案密碼 | 用來解密私人金鑰的密碼 (如已加密)。 |

### 資料庫屬性

* 預設倉庫：Snowflake 倉庫名稱。您可以在專案設定中覆寫此。

* 資料庫名稱：有兩種方法可用來指定資料庫：

  * 方法 1 - 從清單中選取：按一下載入資料庫，然後選取資料庫。

  * 方法 2 - 手動：選取手動輸入資料庫名稱，然後輸入資料庫名稱。

### 其他連線屬性

您可以根據需要指定其他 ODBC 和 JDBC 連線屬性。與 ODBC 和 JDBC 連線相關的屬性 (例如「角色」) 應新增至兩者。

資訊備註

* 如果您使用 資料移動閘道，則從版本 2024.5.54 開始支援其他連線屬性。
* 不支援安全屬性 (例如加密金鑰)。
* 請勿新增在連線設定中具有專用欄位的屬性。

#### ODBC 屬性

您可以指定透過 ODBC 驅動程式連線時資料移動任務 (登陸、複寫和資料湖登陸) 將使用的其他連線屬性。

根據需要使用欄位右側的 the 新建 icon 和 the 取消 icon 按鈕以新增或移除屬性。

#### JDBC 屬性

您可以指定透過 JDBC 驅動程式連線時 ELT 任務 (註冊、儲存、轉換和資料超市) 將使用的其他連線屬性。

根據需要使用欄位右側的 the 新建 icon 和 the 取消 icon 按鈕以新增或移除屬性。

### 內部屬性

內部屬性用於特殊使用情況，因此不會在對話方塊中顯示。您只能在 Qlik 支援指示下使用。

根據需要使用欄位右側的 the 新建 icon 和 the 取消 icon 按鈕以新增或移除屬性。

### 名稱

連線的顯示名稱。

## 必要條件

### 必要權限

需要具備以下權限：

若您想要自動建立不存在的結構描述所需要的權限

* 資料庫使用
* 在資料庫建立架構

如果架構已存在則需要權限

* 資料庫使用
* 架構使用
* 在架構上建立檔案格式
* 在架構上建立階段
* 在架構上建立表格

### 驅動程式的設定

只有在透過 資料移動閘道 存取資料庫時，才需要驅動程式。

您可以使用驅動程式安裝公用程式 (建議) 或手動安裝 driver。只能在不太可能發生的事件 (您在使用驅動程式安裝公用程式時遇到問題) 中嘗試手動安裝。

#### 使用驅動程式安裝公用程式來安裝驅動程式

此區段描述如何安裝所需的 driver。該流程涉及下載 driver、複製到所需的資料夾 (見下文)，以及執行將會自動安裝並設定該驅動程式的指令碼。您也可以執行指令碼，以根據需求更新並解除安裝 driver。

準備安裝

* 確認 Python 3.6 或更高版本安裝於 Data Movement 閘道伺服器。

  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. 在 Data Movement 閘道機器上，將工作目錄變更為：

   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. 在 Data Movement 閘道機器上，將工作目錄變更為：

   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. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

3. 執行下列命令：

   語法：

   ./uninstall snowflake

   將會解除安裝 driver。

#### 手動安裝驅動程式

只有在自動驅動程式安裝無法成功完成時，才能嘗試手動安裝 driver。

您需要安裝 ODBC 驅動程式和 JDBC 驅動程式。

安裝 ODBC 驅動程式

1. 安裝 資料移動閘道 後，下載列於 /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml 的 binary-artifacts 之下的 snowflake-odbc-&lt;version&gt;x86\_64.rpm 驅動程式檔案，並複製到 資料移動閘道 機器。
2. 將驅動程式安裝在 資料移動閘道 機器。

安裝 JDBC 驅動程式

1. 下載列於 /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml 的 binary-artifacts 之下的 snowflake-jdbc-&lt;version&gt;.jar 檔案，並複製到 資料移動閘道 機器的下列資料夾：

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

2. 執行 [資料移動閘道 服務命令](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-managing.htm#Restarti) 中描述的命令，以重新啟動 資料移動閘道 服務並確認已啟動

### 連接埠

需開啟防火牆連接埠 443 才能進行輸入通訊。

## 限制和考慮事項

將資料移至 Snowflake 目標時，下列限制適用：

* 不支援名稱中有反斜線的表格複寫 (例如 SPECIAL\\TABLE\N)。

### 使用 Snowpipe 串流載入方法時的限制和考慮事項

當使用 Snowpipe 串流作為載入方法時，有以下限制：
* 僅適用於登陸任務：

  * 由於 Snowpipe 僅支援 INSERT 操作，因此不支援載入並比較更新方法。

* 僅適用於複寫任務：

  * 由於 Snowpipe 僅支援 INSERT 操作，因此不支援套用變更複寫模式。

  * 在交易期間停止儲存變更複寫並在 30 天或更長時間後繼續可能會導致目標上出現重複記錄。Snowflake 會在 30 天後自動刪除管道。

* 對於登陸和複寫任務：

  * 不支援使用者名稱和密碼驗證。
  * 不支援 XML 子類型。

## 資料類型

下表顯示使用 Qlik Cloud 時支援的 Snowflake 資料類型和來自 Qlik Cloud 資料類型的預設對應。

會保留原生資料類型資訊，並顯示在資料集檢視的原生資料類型欄中。若看不見欄，您需要開啟資料集檢視的欄選擇器並選取原生資料類型欄。

支援的資料類型

| Qlik Cloud 資料類型 | Snowflake 資料類型 |
| --- | --- |
| 布林值 | 布林值 |
| 位元組 | 二進位 (以位元組為單位的長度) |
| 日期 | 日期 |
| 時間 | 時間 (精確度) |
| 日期時間 | Snowflake：<br><br><ul> <li> <p>時間戳記</p> </li> </ul><br><br>對於 Snowflake Iceberg：<br><br><ul> <li> <p>時間戳記</p> </li> <li> <p>If scale &gt; 7: STRING(37)</p> </li> </ul> |
| INT1 | BYTEINT |
| INT2 | SMALLINT |
| INT4 | 整數 |
| INT8 | BIGINT |
| 數字 | 數字 (精確度，縮放) |
| REAL4 | FLOAT4 |
| REAL8 | FLOAT8 |
| UINT1 | BYTEINT |
| UINT2 | 整數 |
| UINT4 | 整數 |
| UINT8 | BIGINT |
| 字串 | VARCHAR (以位元組為單位的長度) |
| WSTRING | NVARCHAR (以位元組為單位的長度) |
| BLOB | 二進位 (8388608) |
| NCLOB | NVARCHAR (8388608) |
| CLOB | VARCHAR (8388608) |
| JSON | 變體 |

在 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 的任務。