# Snowflake

Snowflake можно использовать как целевую платформу данных в конвейере данных или в задаче репликации. В конвейере данных можно выполнять различные операции ELT на целевой платформе, включая хранение, преобразование, регистрацию данных и создание киосков данных. С другой стороны, задача репликации подразумевает репликацию данных непосредственно из исходной системы в целевую с сохранением базовых функций преобразования, но без поддержки операций ELT.

Настройка Snowflake в качестве цели подразумевает следующее:

* Настройка [Необходимые разрешения](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Permissi) в базе данных.
* Установка [необходимого драйвера](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver). Обратите внимание, что это необходимо, только если выполняется подключение к Snowflake через Шлюз движения данных.
* Настройка подключения к Snowflake

## Настройка свойств подключения

Чтобы настроить коннектор, выполните следующие действия:

1. В виде Подключения нажмите Создать подключение.

2. Выберите коннектор цели Snowflake , а затем задайте следующие настройки.

### Цель данных

#### Шлюз данных

Примечание к информацииЭто поле недоступно при использовании подписки Qlik Talend Cloud Starter, так как Шлюз движения данных не поддерживается для этого уровня подписки.

Шлюз движения данных требуется, только если целевая база данных недоступна из Qlik Cloud и доступна только по ссылке PrivateLink (например, если она расположена или в виртуальном частном облаке). В таком случае выберите Шлюз движения данных, через который требуется обращаться к целевой базе данных.

В зависимости от конкретной ситуации это будет либо тот же Шлюз движения данных, развернутый для перемещения данных, либо другой шлюз.

Для получения информации о сценариях применения Шлюз движения данных см. разделы [Когда требуется Шлюз движения данных?](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) и [Распространенные варианты использования](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common).

Если целевая база данных напрямую доступна из Qlik Cloud, выберите Нет.

Примечание к информацииПри обращении к целевой базе данных через Шлюз движения данных, также необходимо установить соответствующий драйвер на компьютер с Шлюз движения данных. Для получения подробных сведений см. [Настройка драйвера](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/snowflake-target.htm#Driver) ниже.

### Свойства подключения

* Сервер: URL-адрес для доступа к Snowflake. Например, myaccount.snowflakecomputing.com.

* Порт: порт, через который будет осуществляться доступ к базе данных Snowflake. По умолчанию используется порт 443.

### Аутентификация

Выберите метод проверки подлинности:

* Имя пользователя и пароль

  Примечание к информацииЕсли выбран этот метод, метод загрузки Snowpipe Streaming в настройках задачи на вкладке Общее не поддерживается.

* Пара ключей

  База данных Snowflake должна быть настроена на использование проверки подлинности с помощью пары ключей. Этот процесс описан в разделе [Настройка аутентификации с использованием пары ключей](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#configuring-key-pair-authentication).

  Примечание к информацииЕсли используется Шлюз движения данных, для проверки подлинности с помощью пары ключей требуется версия 2024.5.14 или более поздняя.

### Свойства учетной записи (Account properties)

#### Имя пользователя и пароль

Имя пользователя и Пароль: имя и пароль пользователя для авторизованного доступа к базе данных Snowflake.

#### Пара ключей

Свойства пары ключей

| Свойство учетной записи | Описание |
| --- | --- |
| Пользователь | Пользователь в Snowflake. |
| Файл закрытого ключа | Щелкните Обзор, чтобы выбрать файл закрытого ключа. |
| Пароль файла закрытого ключа | Пароль для расшифровки закрытого ключа, если он зашифрован. |

### Свойства базы данных

* Хранилище по умолчанию: имя хранилища Snowflake. можно переопределить в настройках проекта.

* Имя базы данных: задать базу данных можно двумя способами:

  * Способ 1: выбор из списка. Щелкните Загрузить базы данных, а затем выберите базу данных.

  * Способ 2: вручную. Выберите Ввести имя базы данных вручную, а затем введите имя базы данных.

### Дополнительные свойства подключения

При необходимости можно задать дополнительные свойства подключения ODBC и JDBC. Свойства, которые относятся и к подключениям ODBC, и к подключениям JDBC (например, Role, должны быть добавлены в оба подключения.

Примечание к информации

* Если используется Шлюз движения данных, Дополнительные свойства подключения поддерживаются с версии 2024.5.54.
* Защищенные свойства (например, ключи шифрования) не поддерживаются.
* Не добавляйте свойства, для которых предусмотрены выделенные поля в параметрах подключения.

#### Свойства ODBC

Можно указать дополнительные свойства подключения, которые будут использоваться задачами перемещения данных (промежуточное хранение, репликация и промежуточное хранение в облаке данных) при подключении через драйвер ODBC.

Используйте кнопки the Создать icon и the Отмена icon справа от полей, чтобы при необходимости добавить или удалить свойства.

#### Свойства JDBC

Можно указать дополнительные свойства подключения, которые будут использоваться задачами ELT (регистрация, хранение, преобразование и киоски данных) при подключении через драйвер JDBC.

Используйте кнопки 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.

### Настройка драйвера

Драйвер требуется только в случае обращения к базе данных через Шлюз движения данных.

driver можно установить с помощью программы для установки драйверов (рекомендуется) или вручную. Ручную установку следует выполнять только в том маловероятном случае, если возникла проблема с программой для установки драйверов.

#### Использование программы для установки драйверов для установки драйвера

В этом разделе описывается процедура установки необходимого driverа. Она включает загрузку driverа, копирование его в нужную папку (см. ниже) и выполнение скрипта, который автоматически установит и настроит его. Также можно выполнять скрипты для обновления и удаления driverа по необходимости.

Подготовка к установке

* Убедитесь, что на сервере шлюза Data Movement установлена версия Python 3.6 или более поздняя.

  Python предустанавливается в большинстве дистрибутивов Linux. Чтобы проверить, какая версия Python установлена в системе, выполните следующую команду:

  python3 --version

* Загрузите драйвер Snowflake ODBC «snowflake-odbc-&lt;версия&gt;.x86\_64.rpm». Прямую ссылку для загрузки поддерживаемой версии можно найти в разделе binary-artifacts в /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml. После завершения загрузки скопируйте файл в:

  /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а.

5. Выполните одно из следующих действий:

   * Нажмите клавишу [Enter] несколько раз, чтобы медленно прокрутить лицензионное соглашение.
   * Нажимайте клавишу «Пробел» несколько раз, чтобы быстро прокрутить лицензионное соглашение.
   * Нажмите клавишу «q», чтобы закрыть текст лицензионного соглашения и перейти к шагу принятия/отклонения.

6. Выполните одно из следующих действий:

   * Введите «y» и нажмите клавишу [Enter], чтобы принять лицензионное соглашение и запустить установку.

   * Введите «n» и нажмите клавишу [Enter], чтобы отклонить лицензионное соглашение и отменить установку.

   * Введите «v» и нажмите клавишу [Enter], чтобы снова открыть лицензионное соглашение для просмотра.

   Будет установлен 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а.

5. Выполните одно из следующих действий:

   * Нажмите клавишу [Enter] несколько раз, чтобы медленно прокрутить лицензионное соглашение.
   * Нажимайте клавишу «Пробел» несколько раз, чтобы быстро прокрутить лицензионное соглашение.
   * Нажмите клавишу «q», чтобы закрыть текст лицензионного соглашения и перейти к шагу принятия/отклонения.

6. Выполните одно из следующих действий:

   * Введите «y» и нажмите клавишу [Enter], чтобы принять лицензионное соглашение и запустить установку.
   * Введите «n» и нажмите клавишу [Enter], чтобы отклонить лицензионное соглашение и отменить установку.
   * Введите «v» и нажмите клавишу [Enter], чтобы снова просмотреть лицензионное соглашение от начала.

   Будет удален старый 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. После установки Шлюз движения данных загрузите файл драйвера snowflake-odbc-&lt;версия&gt;x86\_64.rpm из раздела binary-artifacts в /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml, затем скопируйте его на компьютер Шлюз движения данных.
2. Установите драйвер на машину Шлюз движения данных.

Установка драйвера JDBC

1. Загрузите файл snowflake-jdbc-&lt;версия&gt;.jar из раздела binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/snowflake.yaml, затем скопируйте его в следующую папку на компьютере Шлюз движения данных:

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

2. Перезапустите службу Шлюз движения данных и проверьте, что она запустилась, выполнив команды, описанные в [Команды службы Шлюз движения данных](https://help.qlik.com/ru-RU/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 не поддерживается.

## Типы данных

В следующей таблице показаны типы данных Snowflake, которые поддерживаются при использовании Qlik Cloud, и сопоставление типов данных из Qlik Cloud по умолчанию.

Информация о собственном типе данных сохраняется и отображается в столбце Собственный тип данных в видах набора данных. Если этот столбец не отображается, необходимо открыть инструмент «Управление столбцами» в виде набора данных и выбрать столбец Собственный тип данных.

Поддерживаемые типы данных

| Типы данных Qlik Cloud | Типы данных Snowflake |
| --- | --- |
| BOOLEAN | BOOLEAN |
| BYTES | BINARY (длина в байтах) |
| DATE | DATE |
| 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>Если масштаб &gt; 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 МБ, произойдет следующая ошибка:

```
        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.