Гайд: подключаем Apache Superset к Snowflake

В кейсе Zero to Snowflake нужно было реализовать end-to end решение от поставки исходных данных их CRM Salesforce до создания визуализации на основе этих данных. Оригинальный пайплайн поставки данных выглядел так:

Salesforce data -> Fivetran replication -> Snowflake warehouse -> Tableau dashboards

Я решил заменить последний шаг пайплайна на Apache Superset. И вот здесь все пошло не так гладко. В этом небольшом гайде решил описать, с какими трудностями пришлось столкнуться и как я их решал.



Для того, чтобы подключить Superset нужно проделать следующие шаги

На стороне Snowflake

Зайти в раздел Admin/Security на боковой панели и создать сетевую политику (Network Policy)

Я на стал заморачиваться с прописыванием своего ip, для тестовых целей просто задал allow для всех адресов. 

Не делайте так для своего продакшн окружения!

Затем создадим сервисную учетку для Superset. Идем в меню Admin/Users & Roles и добавляем юзера superset



Из дополнительных параметров я рекомендую задать сразу роль. Я выбрал SYSADMIN. Роль из данного кейса PC_FIVETRAN_ROLE дочерняя для SYSADMIN, поэтому доступ по идее должен наследоваться. 


Я правда позже грантовал PC_FIVETRAN_ROLE для Суперсет отдельным образом,т .к. искал причины почему нет коннекта и пробовал разные варианты. Поэтому, возможно, назначение именно PC_FIVETRAN_ROLE будет достаточно.

Сразу после добавления следует обратить внимание на параметр Status, чтобы он был Enabled. У меня на второй день экспериментов вчера созданный юзер пропал, хотя точно помню, что создавал его. Если статус не Enabled, тогда для уверенности следует разлогиниться из учётки ACCOUNTADMIN, зайти под SUPERSET и потом опять вернуться в ACCOUNTADMIN.


После того следует сходить в меню Admin/Accounts и найти название своего аккаунта Snowflake. Внимание! Для подключение самого названия недостаточно. Нужно нажать на значок ссылки и скопировать URL, затем вставить его в блокнот.


Будет примерно так (данные фейковые):  https://kjefvdc-df02672.snowflakecomputing.com. Где kjefvd - название вашей организации , а  df02672 - имя вашего аккаунта. Нам дальше понадобится эта подстрока:  kjefvdc-df0267


Вопросы по драйверу Snowflake  для Apache Superset

Перед подключением вам стоит сразу озаботится, чтобы Superset был установлен с драйвером для Snowflake. Что делать, если драйвер исходно не был установлен, читаем здесь:https://superset.apache.org/docs/databases/installing-database-drivers   и здесь: https://superset.apache.org/docs/databases/docker-add-drivers, но сейчас мы этой истории касаться не будем.

На стороне Superset

Итак, надеюсь с драйвером для Снежинки у вас все ок, тогда приступим к созданию соединения. Логинимся в админку Суперсета админом, роль должна быть именно admin т.к. права на подключения новых источников данных закреплены за ней.

Идем в меню Data/Databases и нажимаем кнопку   +Database


В появившемся окне выбираем Snowflake



 и затем жмем на надпись, что хотим создавать подключение через SQL Alchemy URI



В документации Superset указано, что строка подключения должна иметь вид: 

snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}

Если убрать необязательные параметры, то сгодится и короткий вариант:

snowflake://{user}:{password}@{account}.{region}/{database}

По факту параметр .{region} тоже можно пропустить. Таким образом строка подключения  будет следующего вида:

snowflake://{user}:{password}@{account}/{database}

Первый нюанс - в админке Снежинки названия юзеров, ролей, аккаунтов, баз данных, схем, отображаются написанные капсом, и это может сбить с толку. Как указывать в строке подключения, маленькими буквами или капсом? Отвечаю - никакого капса! Все пишем только маленькими латинскими буквами.

Второй нюанс  - это имя аккаунта. Просто имя аккаунта не прокатит. Его нужно использовать в связке с именем организации. Берем подстроку, что мы сохранили в блокноте, и вставляем в URI. В моем случае строка подключения выглядела так:

snowflake://superset:qwerty@kjefvdc-df02672/pc_fivetran_db/salesforce_z2s

После этого жмём на кнопку test connection. В случаем успеха появится всплывающее окошко Connection looks good!


На этом собственно все с подключением, можно приступать к BI-экспериментам

Комментарии

Популярные сообщения из этого блога

Быстрый импорт в базу данных с помощью DBeaver

Jupyter-фишки, которые облегчат жизнь аналитику

Два способа загрузить свой датасет в Python

5 приемов при работе с модулем datetime в Python

Чистка и препроцессинг данных. Готовим датасет для ML.