Перейти к основному содержимому

· 8 мин. чтения
Fritz larco

Облачные хранилища данных

В последние несколько лет мы наблюдаем быстрый рост использования облачных хранилищ данных (а также парадигмы «сначала хранилище»). Двумя популярными облачными платформами DWH являются BigQuery и Snowflake. Посмотрите на диаграмму ниже, чтобы увидеть их эволюцию с течением времени.

Изображение: Gartner через Адама Ронтала (@aronthal) в Твиттере. Изображение: Gartner через Адама Ронтала (@aronthal) в [Twitter] (https://twitter.com/ARonthal/status/1514595630072619014/photo/1).

BigQuery, занимающий 4-е место в 2021 году, представляет собой полностью управляемую бессерверную службу хранилища данных, предлагаемую Google Cloud Platform (GCP). Он позволяет легко и масштабируемо анализировать петабайты данных и уже давно известен своей простотой использования и отсутствием обслуживания.

Snowflake — аналогичная услуга, предлагаемая компанией Snowflake Inc. Одно из принципиальных отличий состоит в том, что Snowflake позволяет размещать экземпляр либо в Amazon Web Services (AWS), Azure (Microsoft), либо в GCP (Google). Это большое преимущество, если вы уже работаете в среде, отличной от GCP.

Экспорт и загрузка данных

Иногда бывает необходимо или желательно скопировать данные из среды BigQuery в среду Snowflake. Давайте посмотрим и разберем различные логические шаги, необходимые для правильного перемещения этих данных, поскольку ни один из конкурирующих сервисов не имеет встроенной функции, позволяющей легко это сделать. Для нашего примера мы предположим, что наша целевая среда Snowflake размещена на AWS.

Пошаговая процедура

Чтобы перенести данные из BigQuery в Snowflake (AWS), выполните следующие действия:

  1. Определите таблицу или запрос и выполните EXPORT DATA OPTIONS запрос для экспорта в Google Cloud Storage (GCS).

  2. Запустите скрипт на виртуальной машине или локальном компьютере, чтобы скопировать данные GCS на внутреннюю сцену Snowflake. Мы также могли бы читать прямо из GCS с интеграцией хранилища, но это требует еще одного уровня конфигурации безопасного доступа (что может быть предпочтительнее для вашего варианта использования).

  3. Вручную сгенерируйте CREATE TABLE DDL с правильными типами данных столбцов и выполните в Snowflake.

  4. Выполните запрос COPY в Snowflake для импорта промежуточных файлов.

  5. При необходимости очистить (удалить) временные данные в GCP и Internal Stage.

    Изображение: шаги по ручному экспорту из BigQuery в Snowflake.

    Как было показано выше, для этого необходимо выполнить несколько шагов, при которых необходимо взаимодействовать с независимыми системами. Это может быть обременительно для автоматизации, особенно создание правильного DDL (#3) с правильными типами столбцов в целевой системе (что лично я считаю наиболее обременительным, попробуйте сделать это для таблиц с 50+ столбцами).

    К счастью, есть более простой способ сделать это с помощью отличного инструмента под названием Sling. Sling — это инструмент интеграции данных, который позволяет легко и эффективно перемещать данные (извлечение и загрузка) из/в базы данных, платформы хранения и приложения SaaS. Есть два способа его использования: Sling CLI и Sling Cloud. Мы проделаем ту же процедуру, что и выше, но только предоставив входные данные для слинга, и он автоматически выполнит сложные шаги за нас!

Использование интерфейса командной строки Sling

Если вы фанатик командной строки, Sling CLI для вас. Он встроен в go (что делает его сверхбыстрым) и работает с файлами, базами данных и различными конечными точками SaaS. Он также может работать с Unix Pipes (читает стандартный ввод и записывает на стандартный вывод). Мы можем быстро установить его из нашей оболочки:

#  На Mac
brew install slingdata-io/sling/sling

# В Windows Powershell
scoop bucket add org https://github.com/slingdata-io/scoop-sling.git
scoop install sling

# Использование Python Wrapper через pip
pip install sling

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

После установки мы сможем запустить команду sling, которая должна дать нам следующий вывод:

sling - An Extract-Load tool | https://slingdata.io/ru
Slings data from a data source to a data target.
Version 0.86.52

Usage:
sling [conns|run|update]

Subcommands:
conns Manage local connections
run Execute an ad-hoc task
update Update Sling to the latest version

Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Теперь есть много способов настроить задачи, но для нашей области в этой статье нам сначала нужно добавить учетные данные подключения для BigQuery и Snowflake. (разовая работа). Мы можем сделать это, открыв файл ~/.sling/env.yaml и добавив учетные данные, которые должны выглядеть так:

~/.sling/env.yaml
connections:

BIGQUERY:
type: bigquery
project: sling-project-123
location: US
dataset: public
gc_key_file: ~/.sling/sling-project-123-ce219ceaef9512.json
gc_bucket: sling_us_bucket # this is optional but recommended for bulk export.

SNOWFLAKE:
type: snowflake
username: fritz
password: my_pass23
account: abc123456.us-east-1
database: sling
schema: public

Отлично, теперь давайте проверим наши соединения:

$ sling conns list
+------------+------------------+-----------------+
| CONN NAME | CONN TYPE | SOURCE |
+------------+------------------+-----------------+
| BIGQUERY | DB - Snowflake | sling env yaml |
| SNOWFLAKE | DB - PostgreSQL | sling env yaml |
+------------+------------------+-----------------+

$ sling conns test BIGQUERY
6:42PM INF success!

$ sling conns test SNOWFLAKE
6:42PM INF success!

Замечательно, теперь, когда мы настроили соединения, мы можем запустить нашу задачу:

$ sling run --src-conn BIGQUERY --src-stream "select user.name, activity.* from public.activity join public.user on user.id = activity.user_id where user.type != 'external'" --tgt-conn SNOWFLAKE --tgt-object 'public.activity_user' --mode full-refresh
11:37AM INF connecting to source database (bigquery)
11:37AM INF connecting to target database (snowflake)
11:37AM INF reading from source database
11:37AM INF writing to target database [mode: full-refresh]
11:37AM INF streaming data
11:37AM INF dropped table public.activity_user
11:38AM INF created table public.activity_user
11:38AM INF inserted 77668 rows
11:38AM INF execution succeeded

Вау, это было легко! Слинг сделал все шаги, которые мы описали ранее, автоматически. Мы даже можем экспортировать данные Snowflake обратно в нашу оболочку sdtout (в формате CSV), указав только идентификатор таблицы (public.activity_user) для флага --src-stream и подсчитав строки для проверки наших данных:

$ sling run --src-conn SNOWFLAKE --src-stream public.activity_user --stdout | wc -l
11:39AM INF connecting to source database (snowflake)
11:39AM INF reading from source database
11:39AM INF writing to target stream (stdout)
11:39AM INF wrote 77668 rows
11:39AM INF execution succeeded
77669 # CSV output includes a header row (77668 + 1)

Использование Sling Cloud

Теперь давайте проделаем то же самое с приложением Sling Cloud. Sling Cloud использует тот же движок, что и Sling CLI, за исключением того, что это полностью размещенная платформа для выполнения всех ваших потребностей в извлечении и загрузке по конкурентоспособной цене (ознакомьтесь с нашей [страницей с ценами] (https://slingdata.io/ru/ ценник)). С Sling Cloud мы можем:

  • Сотрудничайте со многими членами команды

  • Управление несколькими рабочими пространствами/проектами

  • Расписание задач извлечения-загрузки (EL) для запуска с интервалом или в фиксированное время (CRON) — Сбор и анализ журналов для отладки — Уведомления об ошибках по электронной почте или в Slack — Запуск из регионов по всему миру или в режиме собственного размещения, если это необходимо (где Sling Cloud является оркестратором).

  • Интуитивно понятный пользовательский интерфейс (UI) для быстрой настройки и выполнения

    Первым делом зарегистрируйте бесплатную учетную запись здесь. После входа в систему мы можем выбрать режим Cloud Mode (подробнее о режиме Self-Hosted позже). Теперь мы можем выполнить те же шаги, что и выше, но с помощью пользовательского интерфейса Sling Cloud:

Добавление соединения BigQuery

Шаги со скриншотами

Перейдите к Connections, нажмите New Connection, выберите Big Query.

bigquery-connection-step-1

Введите имя BIGQUERY, свои учетные данные и загрузите JSON-файл своей учетной записи Google. Нажмите Test, чтобы проверить подключение, затем Save.

bigquery-connection-step-2

Добавление соединения "Снежинка"

Шаги со скриншотами

Нажмите New Connection, выберите Snowflake.

снежинка-соединение-шаг-1

Введите имя SNOWFLAKE и свои учетные данные. Нажмите Test, чтобы проверить подключение, затем Save.

снежинка-соединение-шаг-2

Создать репликацию

Шаги со скриншотами

Перейдите к Replications, нажмите New Replication, выберите Big Query в качестве источника и Snowflake в качестве назначения. Нажмите Next.

replication-connection-step-1

При необходимости установите Target Object Name Pattern и нажмите Create.

replication-connection-step-2

Создать и запустить задачу

Шаги со скриншотами

Перейдите на вкладку Streams, щелкните New SQL Stream, поскольку в качестве исходных данных используется пользовательский SQL. Дайте ему имя (activity_user). Вставьте запрос SQL, нажмите Ok.

создать-шаг-1

создать-шаг-2

Теперь, когда у нас есть готовая потоковая задача, мы можем нажать значок воспроизведения, чтобы запустить ее.

выполнить-задачу-шаг-1

После завершения выполнения задачи мы можем просмотреть журналы.

выполнить-задачу-шаг-2

Всё! У нас есть настройка задачи, и мы можем повторно запустить ее по требованию или установить ее по расписанию. Как вы могли заметить, Sling Cloud обрабатывает для нас еще несколько вещей и предоставляет пользователям, ориентированным на пользовательский интерфейс, лучший опыт по сравнению с Sling CLI.

Заключение

Мы живем в эпоху, когда данные — это золото, и перенос данных с одной платформы на другую не должен вызывать затруднений. Как мы уже продемонстрировали, Sling предлагает мощную альтернативу за счет уменьшения трения, связанного с интеграцией данных. Мы расскажем, как экспортировать данные из Snowflake и загрузить их в BigQuery, в другом посте.

· 6 мин. чтения
Fritz larco

фон

Введение в интерфейс командной строки Sling

Sling CLI — это инструмент командной строки, который позволяет легко и эффективно перемещать данные (извлечение и загрузка) из/в базы данных, платформы хранения и приложения SaaS. Начать работу несложно, вы можете просто запустить pip install sling, если у вас установлен pip Python. Или вы можете загрузить бинарный файл для своей машины [здесь] (https://docs.slingdata.io/sling-cli/getting-started).

Учетные данные подключения

Чтобы использовать sling, мы должны сначала настроить учетные данные для подключения, и Sling CLI ищет их в разных местах. Это позволяет использовать принцип «подключи и работай», если вы уже используете другой инструмент, такой как dbt, или URL-адреса подключения установлены в переменных среды. Однако рекомендуется использовать файл env.yaml Sling, поскольку он обеспечивает более последовательный и гибкий опыт.

Sling Env File

При первом запуске команды sling в домашнем каталоге текущего пользователя (.sling) создается папка ~/.sling, которая, в свою очередь, содержит файл с именем env.yaml. Структура файла Env Sling проста: вы помещаете учетные данные своих подключений под ключ connections, как показано ниже:

connections:
marketing_pg:
url: 'postgres://...'
ssh_tunnel: 'ssh://...' # optional

# или стиль профиля dbt
marketing_pg:
type: postgres
host: [hostname]
user: [username]
password: [password]
port: [port]
dbname: [database name]
schema: [dbt schema]
ssh_tunnel: 'ssh://...'

finance_bq:
type: bigquery
method: service-account
project: [GCP project id]
dataset: [the name of your dbt dataset]
keyfile: [/path/to/bigquery/keyfile.json]

# глобальных переменных, доступных для всех подключений во время выполнения (необязательно)
variables:
aws_access_key: '...'
aws_secret_key: '...'

См. здесь обо всех допустимых типах соединений и соответствующих необходимых точках данных.

При использовании команды sling conns list с учетными данными Sling Env столбец SOURCE будет отображаться как sling env yaml.

Переменные среды

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

# Mac/Linux
export MY_PG='postgresql://user:mypassw@pg.host:5432/db1'
export MY_SNOWFLAKE='snowflake://user:mypassw@sf.host/db1'
export ORACLE_DB='oracle://user:mypassw@orcl.host:1521/db1'

# Windows PowerShell
set MY_PG 'postgresql://user:mypassw@pg.host:5432/db1'
set MY_SNOWFLAKE 'snowflake://user:mypassw@sf.host/db1'
set ORACLE_DB 'oracle://user:mypassw@orcl.host:1521/db1'

При использовании команды sling conns list с переменными среды столбец SOURCE будет отображаться как env variable.

профилей DBT

dbt — еще один популярный инструмент, который многие специалисты по данным используют ежедневно, а поддержка существующих локальных профилей упрощает перекрестное использование. Обычно учетные данные dbt находятся в файле ~/dbt/profiles.yml. Подробнее см. здесь.

Если у вас есть учетные данные dbt и вы используете команду sling conns list, столбец SOURCE будет отображаться как dbt profiles yaml.

Подкоманда conns

Теперь, когда вы установили учетные данные, sling предлагает подкоманду conns для взаимодействия с соединениями. Мы можем выполнять следующие операции: list, test и discover.

$ sling conns -h
conns - Manage local connections

Usage:
conns [discover|list|test]

Subcommands:
discover list available streams in connection
list list local connections detected
test test a local connection

Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Список подключений

Удобно просматривать и перечислять все подключения, доступные в нашей среде. Мы можем просто запустить команду sling conns list. Вот пример:

$ sling conns list
+----------------------+------------------+-------------------+
| CONN NAME | CONN TYPE | SOURCE |
+----------------------+------------------+-------------------+
| AWS_S3 | FileSys - S3 | sling env yaml |
| AZURE_STORAGE | FileSys - Azure | sling env yaml |
| BIGQUERY | DB - BigQuery | sling env yaml |
| BIONIC_DB1 | DB - PostgreSQL | dbt profiles yaml |
| BTD_S3 | FileSys - S3 | sling env yaml |
| CLICKHOUSE | DB - Clickhouse | sling env yaml |
| DEMO_POSTGRES | DB - PostgreSQL | sling env yaml |
| GITHUB_DBIO | API - GitHub | sling env yaml |
| NOTION | API - Notion | sling env yaml |
| SNOWFLAKE | DB - Snowflake | env variable |
| STEAMPIPE | DB - PostgreSQL | sling env yaml |
+----------------------+------------------+-------------------+

Тестирование соединений

Инструмент Sling CLI также позволяет тестировать соединения. Как только мы узнаем имя соединения, мы можем использовать команду sling conns test:

$ sling conns test -h
test - test a local connection

Usage:
test [name]

Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Вот реальный пример:

$ sling conns test MSSQL
6:42PM INF success!

Обнаружение потоков подключения

Это еще одна полезная подкоманда, позволяющая увидеть, какие потоки данных доступны для sling, из которых считывается определенное соединение: команда sling conns discover.

$ sling conns discover -h
discover - list available streams in connection

Usage:
discover [name]

Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.
-f --filter filter stream name by pattern (e.g. account_*)
--folder discover streams in a specific folder (for file connections)
--schema discover streams in a specific schema (for database connections)

Для подключений к базе данных будут перечислены доступные таблицы и представления. Для подключений к хранилищу будут перечислены нерекурсивные файловые объекты, расположенные в указанной исходной папке. Для подключений SaaS/API будут перечислены все доступные объекты, которые существуют для потребления. Ниже приведены некоторые примеры.

Соединения с базой данных

$ sling conns discover CLICKHOUSE
6:57PM INF Found 68 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"
- "system"."aggregate_function_combinators"
- "system"."asynchronous_metric_log"
- "system"."asynchronous_metrics"
- "system"."build_options"
- "system"."clusters"
....

Если мы хотим отфильтровать определенную схему, мы можем сделать:

$ sling conns discover CLICKHOUSE --schema default
8:29PM INF Found 2 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"

подключений SaaS

$ sling conns discover NOTION
6:58PM INF Found 4 streams:
- blocks
- databases
- pages
- users

Подключения к хранилищу

$ sling conns discover AWS_S3
6:52PM INF Found 7 streams:
- s3://my-sling-bucket/logging/
- s3://my-sling-bucket/part.01.0001.csv
- s3://my-sling-bucket/sling/
- s3://my-sling-bucket/temp/
- s3://my-sling-bucket/test.fs.write/
- s3://my-sling-bucket/test/
- s3://my-sling-bucket/test_1000.csv

Если мы хотим увидеть файлы в подпапке, мы можем сделать это:

$ sling conns discover AWS_S3 --folder s3://my-sling-bucket/logging/
6:55PM INF Found 1 streams:
- s3://my-sling-bucket/logging/1/1.log.gz

Запуск задач EL

Теперь, когда ваши соединения установлены, вы готовы запустить некоторые задачи извлечения и загрузки! Мы подробно расскажем об этом в отдельном посте, вы можете прочитать об этом здесь. Из командной строки вы также можете запустить sling run -e, который напечатает кучу примеров.

Заключение

Учитывая все обстоятельства, интерфейс командной строки Sling упрощает управление и взаимодействие с различными типами соединений из вашей оболочки. Если у вас есть какие-либо вопросы или предложения, не стесняйтесь обращаться к нам [здесь] (https://slingdata.io/ru/contact). Кроме того, обязательно ознакомьтесь с [Sling Cloud] (https://slingdata.io/ru/), облачным сервисом, отвечающим вашим различным требованиям извлечения и загрузки по конкурентоспособной модели ценообразования.

· 1 мин. чтения
Fritz larco

фон

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

Почему слинг?

  • Невероятно высокая производительность - Основной движок написан на Go и использует потоковую структуру, что делает его сверхэффективным за счет хранения минимального объема данных в памяти.
  • Быстро реплицируйте данные — легко реплицируйте данные из исходной базы данных, файла или подключения SaaS в целевую базу данных или файл.
  • Прозрачность и низкая стоимость — слинг работает по эффективной и недорогой модели. Наша цель — обеспечить прозрачность расходов на использование нашей платформы.

Подробнее о том, как работает слинг Зарегистрируйтесь в слинг