Привет, я Андрей @ab0xa, bi / de / java dev
Анализ данных и визуализация, интересные ссылки, вакансии, уроки, юмор) и личный опыт
Стек технологий Python, Java, SQL, Tableau, Knime, Yandex.Облако, Yandex DataLens
Привет, я Андрей @ab0xa, bi / de / java dev
Анализ данных и визуализация, интересные ссылки, вакансии, уроки, юмор) и личный опыт
Стек технологий Python, Java, SQL, Tableau, Knime, Yandex.Облако, Yandex DataLens
Обратный ETL через Superset и премудрости корп архитектуры
Словарь архитектора по-простому. Прямой ETL это когда аналитики забирают информацию с прода. Обратный ETL - когда прод забирает полезное из дата стека.
Открыл для себя что один из самый простых способов поставить данные из КХД на прод - через Superset API. Там есть несколько методов программно по HTTP выдрать датасет из-под чарта.
Опа!
https://superset.company.name/api/v1/chart/{chart_id}/data/ - и готово!
И это здорово, так как не порождает никаких доп процессов и систем. Суперсет-то все равно работает. Данные - обычный датасетик-витрина, легко создается и обмазывается теми же DBT тестами. Всяко лучше, чем городить силами дата офиса отдельные сервисы на FastAPI. Ноль лишних сущностей для команды данных.
И самый смех в том, что в условиях кровавого энтерпрайза эта конструкция легко протаскивантся через самые жесткие комитеты. Включая кибербезников.
Сами посудите
1️⃣ Данные идут из готовой системы, которая уже утверждена по высокому классу безопасности. А как по-другому, в BI в любом случае содержатся и перс данные и корп тайна.
2️⃣ Ролевая модель доступа - есть. Достаточно замороченная (для целей BI - слишком замороченная). Авторизация - есть, причем уже сынтегрированная с принятыми в вашей конторке SSO и LDAP-ами. Даже RLS можно сделать! Даже секьюрити аудит через логи суперсета можно устроить.
3️⃣ HTTP протокол, значит он легко убирается за доп слои безопасности, за любые балансировщики и фаерволлы, хоть NGFW с анализами паттернов доступа. Накинуть серты Минцифры - запросто! Его же легко замониторить, он понятен разработчикам на абсолютно любом стеке.
4️⃣ Готовый MCP сервер заказывали? А он там есть.
В итоге на первый взгляд - элемент дендрофекальной архитектры. А на деле - надежный энтерпрайзный паттерн интеграции.
🧐🧐🧐
«Это разве аналитика?» - канал из категории «Бизнес», подключенный к сервису кросспостинга MaxGate. Публикации канала синхронизируются между Telegram и мессенджером MAX, а на этой странице собраны ссылки на обе версии канала.
Сейчас у канала 4 658 подписчиков суммарно в Telegram и MAX. За последние 24 дня в истории MaxGate учтено 5 публикаций, поэтому перед подпиской можно оценить не только размер аудитории, но и регулярность обновлений.
Чтобы подписаться, используйте кнопки «Открыть в MAX» и «Открыть в Telegram» в верхней части страницы. У отдельных постов ссылка может быть доступна в обоих мессенджерах или только в одном из них, если MaxGate получил такой URL из истории обработки.
Гайз, знаю что все ждали этого — новый сезон опроса State Of Data
оч прошу потратить 10 минут времени всем и каждому + разослать по чатикам с коллегами
в этом году, ожидаемо, появились вопросы про всякие llm и прочих агентов )
https://forms.gle/Fp6HrZxBw7Y5VbFw7
давайте посмотрим насколько помирает хадуп (особенно по сравнению с позапрошым годом)
насколько выстреливает старрокс (или наоборот стагнирует)
и прочие интересные инсайты вытащим
там в форме есть ссылки на .parquet с исходниками опросов '24 и '25
по текущему опросу исходник выложу в ту же гуглопапку ~ в середине октября
По заявкам.
Разные движки воспринимают ролевую модель айсберг-лейкхауса по-разному. И с этим надо смириться и воспринимать как вариант нормы.
Поэтому учимся защищать данные даже в тех ситуациях, когда конкретный движок решит забить на правила.
Один из способов- начать работать с S3 ключами.
А как? А вот так.
1️⃣ команде пользователю данных выдаем ключ не на весь бакет, а более гранулярно. Пользуемся тем, что если default location у нас s3://ice-bucket/data, то объекты по умолчанию будут разложены по префиксам s3://ice-bucket/data/schema/table.
Вот и выписываем их гранулярно на схемы и таблицы. Эти же ключи раскладываем по ноутбукам, спаркам, трино каталогам, аэрфлоу и тд.
2️⃣ В айсберг таблице есть параметр location. Это корень обхода дерева метадаты айсберг и то куда айсберг складывает свой стафф. По умолчанию он берется из настроек коннектора и каталога.
Так вот, ничего не мешает этот локейшен точечно переопределить. Например на s3://ice-bucket/secret/ или s3://secret-bucket или (внезапно!) hdfs://path
И все будет работать до тех пор пока чтец обладает правами на предоставленных ему s3 ключах.
Причем во многих s3 реализациях нельзя на один ключ грантовать права в разных бакетах. Разнося таблицы по бакетам мы получаем гарантию, что команды из чистой зоны физически не смогут добраться до секретной зоны со своими ключами.
Вот так мы добавляем доп слой гарантированной безопасности, который будет работать на низком уровне даже если сервисы джейлбрейкнут Ranger или REST Catalog. (А они ведь могут!)
Не забудьте только навайбкодить сервис, который будет выпускать, отзывать, аудировать и раскладывать в конфиги и волты ваши s3 ключи! 😎
Безопасность в Iceberg-Lakehouse
Берем Iceberg REST Catalog в виде Apache Polaris. Коннектим его к Трино как каталог. При этом передаем общие принципала и креды. Все подключается и успешно создаем, удаляем, работаем со схемами и таблицами.
Теперь хотим подцепиться к тому же каталогу через PyIceberg. С теми же кредами. И Ловим 401 на попытке прочитать таблицу? Почему?
Потому что PyIceberg честный и спрашивает креды на значимые действия с таблицей. Подчинаяется ролевой модели поляриса в этом плане. А трино просто взял metadata.json из каталога и пошел сам по S3 расшифровывать айсберговскую дату и метадату, никакого разрешения от каталога ему для этого не нужно. Ну и свою ролевую модель поверх наложил.
Одна и та же таблица, одна схема подключения, но два представления о прекрасном от двух движков данных.
Напоследок - доступные роли в Полярисе, грантов которых PyIceberg от нас ждет. Грантуется это исключительно через CURL.
# Доступные права в поларис
[
CATALOG_MANAGE_ACCESS,
CATALOG_MANAGE_CONTENT,
CATALOG_MANAGE_METADATA,
NAMESPACE_CREATE,
TABLE_CREATE,
VIEW_CREATE,
NAMESPACE_DROP,
TABLE_DROP,
VIEW_DROP,
NAMESPACE_LIST,
TABLE_LIST,
VIEW_LIST,
NAMESPACE_READ_PROPERTIES,
TABLE_READ_PROPERTIES,
VIEW_READ_PROPERTIES,
NAMESPACE_WRITE_PROPERTIES,
TABLE_WRITE_PROPERTIES,
VIEW_WRITE_PROPERTIES,
TABLE_READ_DATA,
TABLE_WRITE_DATA,
NAMESPACE_FULL_METADATA,
TABLE_FULL_METADATA,
VIEW_FULL_METADATA
]
В другом каталоге Iceberg REST роли могут быть другие. В JDBC/Hive каталогах - вообще своя атмосфера.