172 похожих чатов

Коллеги, здравствуйте! Подскажите пожалуйста, можно ли каким-то образом в PostgreSQL, в

качестве ETL запускать скрипт Python?

Скрипт должен по API получать данные и передавать их в БД.

57 ответов

14 просмотров

Зачем запускать скрипт именно в postgres?

Почему бы не использовать airflow, а внутри скрипта питона уже обращаться к СУБД

Андрей-В Автор вопроса
Максим Мартынов
Зачем запускать скрипт именно в postgres?

Рассказываю. Мне необходимо «решение» Python+БД, которое можно использовать как «образ» и по триггеру автоматом разворачивать это решение. Если скрипт Python поместить в саму БД, то условно нужен только образ этой БД. Если их не совмещать, то необходимо уже иметь 2 образа: Python и отдельно БД. И ещё потребуется отлаживать их взаимодействие.

Андрей-В Автор вопроса
Максим Мартынов
Какая-то экономия на спичках

И что выступает в качестве «спички»? Просто если есть какой-то другой способ разворачивания и запуска «решения» без трудозатрат специалиста, то я только рад узнать как.

Андрей В
И что выступает в качестве «спички»? Просто если ...

Если под образом подразумевается докер образ, то поднимаешь через docker-compose контейнер с базой и ETL (python + скрипт/Airflow + зависимости), в переменных окружения указываешь название базы, в скрипте к ней подключаешься через psycopg2. Все. Если в будущем понадобится что-то дорабатывать, то достаточно будет обновить образ с ETL. Если нужно будет запускать ETL по сложному расписанию, добавлять интеграции с другими базами, инструментами - этот подход гораздо более расширяем. Если ты хочешь делать все это на PL/Python, тебе и так придется устанавливать python, а также устанавливать разные зависимости для работы с API. Вот только обновление процедуры будет требовать хождения в базу под админской учеткой (pl/Python является untrusted языком, обычные пользователи не могут писать на нем процедуры). И более сложные интеграции оно может и не вывести

Андрей В
Рассказываю. Мне необходимо «решение» Python+БД, к...

Либо через docker-compose, как выше предложили, либо через Ansible

Андрей В
И что выступает в качестве «спички»? Просто если ...

Могу посоветовать только найти спецыалиста, который это будет разворачивать и посоветоваться с ним. (Поскольку нет вообще никакой разницы, один там образ, два, питон внутри СУБД или вне её. Всё или разворачивается само или требует пинания руками.).

Максим Мартынов
Если под образом подразумевается докер образ, то п...

Замечу, что я бы посоветовал в первую очередь подумать -- нужна ли будет база без этих ETL скриптов. И если нет -- то вообще сделать всё в одном образе, пусть там и питон и postgres лежат. Компоуз тожэ довольно плохое решэние, незачем его тащить без особой необходимости.

Андрей-В Автор вопроса
Ilya Anfimov
Замечу, что я бы посоветовал в первую очередь поду...

Зависит от того, как этот ETL запускается. Если извне (docker exec), то можно и в один контейнер. Если нужен резидентный процесс внутри контейнера (а-ля крон/Airflow), то нужно два контейнера, в один их пихать не стоит. Композ простой, легко учится

Андрей-В Автор вопроса
Ilya Anfimov
Замечу, что я бы посоветовал в первую очередь поду...

В итоге, в самом Postgre можно содержать скрипты Python и запускать их по расписанию или по триггеру?

Максим Мартынов
Зависит от того, как этот ETL запускается. Если из...

Композ тупой, и при этом не так легко переносится на kubernetes, как просто docker image.

Ilya Anfimov
Композ тупой, и при этом не так легко переносится ...

docker-compose не делает ничего кроме того что умеет докер, нету никакой разницы переносить композ или чистый докер

Ilya Anfimov
Композ тупой, и при этом не так легко переносится ...

Автор боится двух отдельных образов, а ты кубер предлагаешь)

central hardware
docker-compose не делает ничего кроме того что уме...

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

Ilya Anfimov
Он делает всякую оркестрацыю нескольких контэйнеро...

с swarm-ом путаете, композ не умеет ничего, он просто врапер над docker engine api, как в общем то и сам docker cli

Максим Мартынов
Автор боится двух отдельных образов, а ты кубер пр...

Я не предлагаю, я высказываю одну из причин, по которым я композ нелюблю. (Не, я и докер нелюблю, чо уж там). (А к куберу с подозрением отношусь, но всяко лучшэ докера).

Андрей-В Автор вопроса
Ilya Anfimov
Не запрещено.

Можете подсказать ссылку, где я могу с этим подробнее ознакомиться. Я гуглил, но везде показывается решение, где Python находиться «вне БД».

Андрей В
Можете подсказать ссылку, где я могу с этим подроб...

С отсутствием запрета? Ну, вот например, http://www.constitution.ru/10003000/10003000-4.htm статья 34.

Андрей В
Можете подсказать ссылку, где я могу с этим подроб...

Очень не советую так делать. Допустим, это сработает сейчас. А если думать на пару месяцев вперёд? Что если скрипту нужно будет обновить/добавить зависимости? Обновить версию Python? Пересобирать образ и пересоздавать весь контейнер с базой ради одного скрипта?

Андрей-В Автор вопроса
Максим Мартынов
Очень не советую так делать. Допустим, это сработа...

Да, пожалуй соглашусь. При этом возможно понадобиться переделать всё то, что у же работает, верно?

Андрей-В Автор вопроса
Андрей В
Да, пожалуй соглашусь. При этом возможно понадобит...

Сложно сказать наверняка, но вполне вероятно. Допустим, в какая-то из зависимостей сильно поменялась, соответственно скрипт нужно будет дорабатывать

Андрей-В Автор вопроса
Максим Мартынов
Сложно сказать наверняка, но вполне вероятно. Допу...

Хорошо. Т.е можно сделать 1 или 2 контейнера - это и будет «решение». Ещё один вопрос. Я чуть-чуть знаком с Docker. Что будет оптимальнее для Azure, Docker или Kubernetes? Или это 2 разных продукта и сравнивать их между собой не стоит? Понимаю, что вопрос может быть задан некорректно, но мне необходимо определиться в какую сторону капать.

Андрей-В Автор вопроса
Андрей В
Рассказываю. Мне необходимо «решение» Python+БД, к...

@dolfinus, у меня уточняющий вопрос. Если копировать (разворачивать по триггеру) только БД. Могут ли они все одновременно использовать один скрипт Python?

Андрей В
@dolfinus, у меня уточняющий вопрос. Если копирова...

Я не понимаю, зачем тебе стрелочка из postgres в python

Андрей-В Автор вопроса
Максим Мартынов
Я не понимаю, зачем тебе стрелочка из postgres в p...

Я предположил, что БД использует Python скрипт как ETL. Соответсвенно, от БД должен быть триггер на выполнение скрипта. Предположим, что у меня 5 версий скрипта Python под разные API запросы. И у меня есть 2 образа БД. Одна БД использует все 5 скриптов Python. Вторая - только один. Соотвественно, именно на стороне БД должнен быть триггер. Логично? Или что-то нужно учесть?

Андрей В
Я предположил, что БД использует Python скрипт как...

Зачем postgres сам запускает ETL, почему не скрипт запускается чем-то типа крона и перекладывает данные из API в Postgres? Как ты собрался запускать скрипт из Postgres, который лежит в другом контейнере?

Андрей-В Автор вопроса
Максим Мартынов
Зачем postgres сам запускает ETL, почему не скрипт...

Зачем Postgre сам запускает ETL? - разве ETL процедура запускается не в БД? Исходя из Ваших сообщений, я понимаю, что эта логика нивелируется, если ETL выполняется «на стороне».

Андрей В
Зачем Postgre сам запускает ETL? - разве ETL проце...

Зачем она должна запускаться на стороне БД? Какую проблему ты хочешь этим решить?

Андрей-В Автор вопроса
Максим Мартынов
Зачем postgres сам запускает ETL, почему не скрипт...

«Как ты собрался запускать скрипт из Postgres, который лежит в другом контейнере?» - это невозможно? Т.е. это ограничение.

Андрей В
«Как ты собрался запускать скрипт из Postgres, кот...

Это возможно, но не нужно, поскольку ломает основную логику контейнеров - воспроизводимое поведение, доставка приложения вместе зависимостями, изоляция окружения

Андрей-В Автор вопроса
Максим Мартынов
Зачем она должна запускаться на стороне БД? Какую ...

Я выше описал: Предположим, что у меня 5 версий скрипта Python под разные API запросы. И у меня есть 2 образа БД. Одна БД использует все 5 скриптов Python. Вторая - только один. Т.е. есть условие, что могут быть созданы разные конфигурации БД. Эти разные конфигурации БД должны получать данные от разных Скриптов Python. Где содержать подобную логику?

Андрей В
Я выше описал: Предположим, что у меня 5 версий ...

Начнем сначала. Что должно триггерить твой ETL? Что, откуда и куда он должен перекладывать?

Андрей-В Автор вопроса
Максим Мартынов
Начнем сначала. Что должно триггерить твой ETL? Чт...

Подключаться по API к интернет-сервису и получать оттуда данные по API. Возможно предварительно нормализовав.

Андрей В
Подключаться по API к интернет-сервису и получать ...

Триггерить его должно что? Какое-то действие в базе, запуск по расписанию?

Андрей В
Запуск по расписанию.

И зачем тогда вызывать скрипт из базы?

Андрей-В Автор вопроса
Максим Мартынов
И зачем тогда вызывать скрипт из базы?

Потому что именно в БД будет заложена логика того, какие таблицы / данные в неё должны поступать.

Андрей-В Автор вопроса
Максим Мартынов
Что?

Расскажу на примере. Представим, что есть 2 скрипта Python. Первый: собирает информацию по погоде. Второй: собирает информацию по объёмам продаж сахара. Представим, что у нас есть 2 образа БД. Первый: для того, чтобы содержать информацию по погоде. Второй: для того, чтобы содержать информацию по погоде и по сахару. Разворачиваем 2 БД на основании образов. Первая БД обращается к первому скрипту Python. Вторая БД обращается к первому и второму скрипту Python. Т.о. логика запуска скрипта находится на стороне БД. Верно?

Андрей В
Расскажу на примере. Представим, что есть 2 скрип...

Зачем она должна быть в БД? Почему не запускать по расписанию скрипт (где угодно и как угодно) и передавать в скрипт (через аргументы или конфиг) данные для подключения к API и БД, чтобы он и тянул инфу, и складывал ее в нужную базу? Зачем для всего этого нужно что-то делать на уровне самой базы? С чего база вообще должна что-то знать о том, откуда в нее приходят данные?

Андрей-В Автор вопроса
Максим Мартынов
Зачем она должна быть в БД? Почему не запускать по...

Может быть и так, Максим. Я не бью себя в грудь и не отстаиваю ни один из подходов. Я просто хочу знать мнение сообщества на подобные задачи. Спасибо Вам за обратную связь! Я сейчас поищу ссылку на один сервис, предлагаю порассуждать над тем, что там под капотом.

Андрей-В Автор вопроса
Андрей В
Может быть и так, Максим. Я не бью себя в грудь и ...

@dolfinus, пример сервиса (другой не вспомнил): https://www.cdata.com/drivers/

Андрей В
@dolfinus, пример сервиса (другой не вспомнил): ...

Приложений, либ и сервисов для ETL огромное количество, практически на любом языке. Подавляющее большинство умеет складывать данные в Postgres. Выбирай какой хочешь

Андрей-В Автор вопроса
Максим Мартынов
Приложений, либ и сервисов для ETL огромное количе...

Хорошо. Вот представим, что я зарегистрировался на этом сервисе. И попросил их передавать для меня данные из Google аналитики. Они развернут под меня БД (есть такие, что могут дать доступ к БД, я что-то подобное видел) и предоставят к ней доступ. Может быть я не смогу в этой БД, что-то делать, но данные забрать смогу. Как это примерно организовано?

Андрей-В Автор вопроса
Андрей В
Хорошо. Вот представим, что я зарегистрировался на...

Тянешь скриптом данные из одной базы и перекладываешь в другую

Андрей-В Автор вопроса
Максим Мартынов
Тянешь скриптом данные из одной базы и перекладыва...

Т.е. во всей архитектуре, должен быть "скрипт-администратор", который знает в какую БД какие данные необходимо записывать. Этот "скрипт-администратор" запускает соотвествующие скрипты для разных БД. Верно?

Андрей В
Т.е. во всей архитектуре, должен быть "скрипт-адми...

Именно это и представляет собой Airflow, он оркестрирует ETL, знает что, когда и с какими параметрами запускать

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Изменение типа с SomeException на String и правда удобней @cheese_hs . А вот такой вариант насколько некрасив еще? loadConfigDB :: IO (Either String ConfigDataBase) loadConfi...
Camara
7
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта