Welcome to my personal place for love, peace and happiness 🤖

Later Ctrl + ↑

DuckDB + Attached postgres

Давно уже прошел вебинар про DuckDB, а я еще обещал ответить на вопросы.
Один из них был про работу с postgres. Напомню, что DuckDB это встраиваемая аналитическая база данных.
т.е. Так как она встраиваемая и уже встроена в DBeaver, то пробовать я это буду именно там. И так приступим.

Создаю новую утиную базу

База пока пустая

Надо бы что то в ней создать. Сделаем пару insert и подключим внешний каталог Postgres.
Базу Postgres я подниму локально в Docker этой командой

docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres

Так как она тоже пустая там понадобятся insert. А еще я хотел попробовать прочитать данные DuckDB с s3 и записать их через подключенный postgres прямо в него. Ну например данные такси нью йорка, там где-то 2 гигабайта, будет хороший кейс нагрузки.

Запускаю Postgres

docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres

Подключаю бобра.

Теперь сделаем табличку и запишем туда пару

CREATE TABLE public.test (
  a bigint,
  b varchar,
  c float,
  cdate date
) 

INSERT INTO public.test VALUES (1,'hello', 1.24, now());
INSERT INTO public.test VALUES (2,'hello', 2.24, now());
INSERT INTO public.test VALUES (3,'hello', 3.24, now());
INSERT INTO public.test VALUES (4,'hello', 4.24, now());
INSERT INTO public.test VALUES (5,'hello', 5.24, now());
INSERT INTO public.test VALUES (6,'hello', 6.24, now());
INSERT INTO public.test VALUES (7,'hello', 7.24, now());
INSERT INTO public.test VALUES (8,'hello', 8.24, now());
INSERT INTO public.test VALUES (9,'hello', 9.24, now());

отлично

Возвращаемся в утку и будем настраивать.

Установим для начала плагины

INSTALL postgres;
LOAD postgres;

Судя по документации можно использоваться простую команду для локального postgres

ATTACH '' AS postgres_db (TYPE POSTGRES);

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

ATTACH 'dbname=postgres user=postgres host=127.0.0.1 password=mysecretpassword port=5432' AS db (TYPE POSTGRES);

Дополнительные параметры можно узнать из доки тут https://duckdb.org/docs/extensions/postgres

Делаю SHOW ALL TABLES и вижу что то уже из Утки.

Пробуем сделать Select и кстати в дереве каталогов уже появилась моя табличка.

select * from db.public.test t

Класс, работает.

можно даже скопировать всю таблицу в утку из postgres.

Теперь попробуем пример из вебинара, прочитать данные с s3 уткой и записать их в Postgres.

Настраиваю s3:

INSTALL httpfs;
LOAD httpfs;

CREATE SECRET secret1 (
    TYPE S3,
    KEY_ID 'jvvgблаблачтотоещеjuma',
    SECRET 'jyehmo3kfитуткакаятофигняещеmikcfak3v4lv6',
    ENDPOINT 'gateway.storjshare.io'
);

Работает.

ну и пробуем писать в postgres.

CREATE table db.public.test2 as SELECT * FROM read_parquet('s3://duckdb/parquettest/tos4.parquet');

Сходу не получилось

Ошибка:

SQL Error: Invalid Error: Failed to prepare COPY "
	COPY (SELECT "City", "count_star()", "Sum" FROM "public"."test2" WHERE ctid BETWEEN '(0,0)'::tid AND '(4294967295,0)'::tid) TO STDOUT (FORMAT binary);
	": ERROR:  column "City" does not exist
LINE 2:  COPY (SELECT "City", "count_star()", "Sum" FROM "public"."t...
                      ^
HINT:  Perhaps you meant to reference the column "test2.city".

Попробуем чуть попроще типы указать и наименования полей. Вдруг поможет. Для начала так:

SELECT City, "count_star()" Cnt, ceiling(Sum) Sum FROM read_parquet('s3://duckdb/parquettest/tos4.parquet');

Запрос отработал, но это пока еще ничего не значит.

Пробуем select но он не хочет.

SQL Error: Invalid Error: Failed to prepare COPY "
	COPY (SELECT "City", "Cnt", "Sum" FROM "public"."test3" WHERE ctid BETWEEN '(0,0)'::tid AND '(4294967295,0)'::tid) TO STDOUT (FORMAT binary);
	": ERROR:  column "City" does not exist
LINE 2:  COPY (SELECT "City", "Cnt", "Sum" FROM "public"."test3" WHE...
                      ^
HINT:  Perhaps you meant to reference the column "test3.city".

А если через COPY? Тоже не получилось, написал что то такое.

copy (SELECT City, "count_star()" Cnt, ceiling(Sum) Sum FROM read_parquet('s3://duckdb/parquettest/tos4.parquet')) TO db.public.test4


SQL Error: java.sql.SQLException: Parser Error: syntax error at or near "."
org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error: java.sql.SQLException: Parser Error: syntax error at or near "."
	at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133)
	at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:615)
	at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$2(SQLQueryJob.java:506)
	at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:192)
	at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:525)
	at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:977)
	at org.jkis

А вот первый пример заработает как-то))

select * from db.public.test2

Пробуем еще раз:

CREATE table db.public.test5 as SELECT City, "count_star()" Cnt, ceiling(Sum) Sum FROM read_parquet('s3://duckdb/parquettest/tos4.parquet');

ошибка на select * from db.public.test5

SQL Error: Invalid Error: Failed to prepare COPY "
	COPY (SELECT "City", "Cnt", "Sum" FROM "public"."test5" WHERE ctid BETWEEN '(0,0)'::tid AND '(4294967295,0)'::tid) TO STDOUT (FORMAT binary);
	": ERROR:  column "City" does not exist
LINE 2:  COPY (SELECT "City", "Cnt", "Sum" FROM "public"."test5" WHE...
                      ^
HINT:  Perhaps you meant to reference the column "test5.city".

Хм)) ну как то же db.public.test2 заполнилась. Какая-то магия. Еще пока неизвестная.

Попробуем с того как начинали, но пока никак.

Кстати вот так работает: COPY db.public.test7 FROM ‘s3://duckdb/parquettest/tos4.parquet’;
Но прочитать таблицу все равно не дает.

Ну а вот и сама магия.

Если зайти в сам постгрес, то все Талицы на месте. и даже данные там есть.

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

Ну да, так и получилось

В общем вариант рабочий, но есть еще баги. Ждем фиксов.
Ну а следующий вебинар сделаю про “УТИлизацию Табло” – Будем готовить утку с Табло в s3шном соусе. :))

таблица большая в итоге загрузилась с s3.

Долго было

Книги про искусство 🎭

Книги про искусство 📖

Замечено на канале: https://t.me/NapasioWorldwide

Всем привет! Давайте поделимся друг с другом интересными книгами на тему современного искусства.

Я рекомендую:

  1. Уилл Гомперц «Непонятное искусство. От Моне до Бэнкси»

Отличный вариант для тех, кто хочет сделать первые шаги к понимаю современного искусства и истории его развития.

  1. Дональд Томпсон «Чучело акулы за 12$ миллионов. Продано!»

Книга рассказывает о том как устроен галерейный бизнес и мир арт-аукционов, а также о ценообразовании в сфере изобразительного искусства.

  1. «Винсент Ван Гог. Письма к брату Тео»

Интересное повествование от первого лица в формате писем к брату художника. Много личных размышлений автора на тему искусства и взаимоотношениях с коллегами-современниками создают интересный опыт от прочтения.

Хорошее исследование на тему Data Governance

Data Nature 🕊 https://t.me/datanature

Доделал самое внятное мини-исследование про DG из тех, что вы читали.
Если нет верну вам деньги. А блин, оно же бесплатное.

PDF Файл (https://drive.google.com/file/d/18yhcV1uyTDFRnR_GE97qKEB3pvCVe5D5/view?usp=sharing)

За последние полгода я встретился с 20 технологическими компаниями. В основном крупными и очень крупными, но были и небольшие. Общались про их реальный data governance.

Уже не помню, зачем я это начал, но помню, что меня начала раздражать эта тема и я искал опору. как итог – я получил для себя довольно четкую картинку по отрасли. Больше нет ощущения, что где то есть миры невиданной мачурности, созданные по DMBOK, где розовые пони скачут по радуге дата стюарды добровольно улучшают качество данных.

Я описал все интересное и теперь делюсь этой картиной с вами. 80% моих наблюдений и 20% выводов.

В процессе познакомился с классными людьми. Спасибо вам за отклик и участие: Олег (Авито), Селим (HeadHunter), Женя (Yandex->Toloka), Андрей (ЦИАН), Кирилл (Just Eat Takeaway), Александр (SOFTSWISS), Энрика (Tinkoff) и многим другим.

В исследовании не раскрываю детали по конкретным компаниям. Мы вели доверительные беседы без приукрашивания реальности. Вместо этого выделяю общие черты и практики.

Если совсем кратко – Большинство топ компаний купаются в хаосе, делая отдельные точечные здравые вещи – живут и не обламываются 🙃

Но не буду пересказывать содержание – посмотрите файл. Продулирую в первом комменте 👇
Там не так уж много букав. Проявите энтузиазм.
Feedback is welcome

Шаблон архитектуры системы

Отличный шаблончик на vc нашел

Читаем тут:
https://a.gavrilov.info/data/posts/Architecture-Description-Template.ru.pdf

Пишем свой тут:
https://a.gavrilov.info/data/posts/Architecture-Description-Template.ru.docx

Оригинальный пост: https://vc.ru/u/1915268-anna-y/1087763-dlya-arhitektorov-i-analitikov-ischerpyvayushii-shablon-opisaniya-arhitektury-prilozheniya-34-stranicy-polzy

Канальчик автора:
Anna Y
ITSM-эксперт. 25 лет развиваю процессы в ИТ. Пишу про сложные ИТ-решения. Пишу по большой любви https://t.me/itsm4u и на заказ https://t.me/tyzhavtor

Еще любопытный док получилось бы на тему концепций, что то в эту сторону

https://a.gavrilov.info/data/posts/Framing%20product%20concepts%20for%20your%20team:%20mission,%20vision,%20strategy,%20roadmap%20|%20by%20Carlin%20Yuen%20|%20Medium.pdf

Почему мы перешли с Dremio на Trino

В нашей постоянно развивающейся индустрии данных, выбор правильного инструмента может существенно повлиять на эффективность и гибкость работы. Мы недавно перешли с Dremio на Trino. Решение об этом шаге было принято после анализа и испытаний, и в этой статье я расскажу о причинах этого перехода, особенностях каждого продукта, а также о том, как это повлияет на нашу работу в рамках концепции Data Mesh.

Московский художник Даниил Кудряшов https://kudryashovdd.com/allartworks
Московский художник Даниил Кудряшов https://kudryashovdd.com/allartworks

Dremio и Trino: Основные Отличия

Dremio позиционируется как коробочный продукт, который предоставляет целый набор инструментов “из коробки”. Эта платформа позволяет пользователям выполнять аналитические запросы на больших наборах данных с использованием своего движка SQL. По своей природе Dremio старается исполнять запросы внутри себя, что зачастую приводит к необходимости выгрузки значительных объёмов данных из источника, прежде чем приступать к анализу. Это, в свою очередь, увеличивает время ожидания для пользователей и потребляет дополнительные ресурсы.

Dremio имеет свои плюсы и минусы:

Плюсы:

  • Лёгкость в использовании и интеграции.
  • Поддержка современных форматов данных.
  • Концепция data-as-code.

Минусы:

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

И конечно отсутствие обновлений, поддержки, что фактически является тупиком в развитии для нас.

Trino

Trino, ранее известный как PrestoSQL, представляет собой SQL-движок, который отлично подходит для платформ данных, требующих высокой степени кастомизации. В отличие от Dremio, Trino выполняет запросы ровно так, как это указано в SQL, что позволяет избежать излишних выгрузок данных и оптимизировать процесс обработки запросов. Благодаря своей открытой архитектуре, Trino предоставляет гибкость в настройках и кастомизации, что является ключевым преимуществом. Trino хорошо интегрируется с такими технологиями как Iceberg и Data Build Tool, kafka и многими другими, что обеспечивает более эффективное управление данными и их структурой. Позволяет нам выполнять запросы к данным в топиках Kafka, что особенно востребовано в текущий момент, а также легко добавлять новые типы коннекторов, Dremio так не умеет.

Плюсы:

  • Открытая архитектура и возможность кастомизации.
  • Высокая производительность и эффективность.
  • Поддержка современных форматов данных и подключений.
  • Развитое сообщество и документация.

Компания CedrusData – полностью российская компания и занимается ускорением базового Trino, Cedrus это фактически Trino на стероидах. Компания занимается развитием как новой функциональности, так и разрешением ошибок и просто поддержкой.

Минусы:

  • Необходимость дополнительных настроек и конфигураций.
  • Потребность в более глубоком техническом знании.

Причины Перехода

Гибкость и Настраиваемость

Одной из основных причин перехода с Dremio на Trino является гибкость и настраиваемость последнего. Trino позволяет легко адаптировать платформу данных под любые потребности, что особенно важно в рамках нашей концепции Data Mesh. Это значительно упрощает управление данными и позволяет экономить ресурсы, разделяя хранение данных от вычислительных мощностей.

Открытая Архитектура и Сообщество

Trino имеет открытую архитектуру, что позволяет любому внести изменения или предложить улучшения. Это делает платформу более гибкой и быстро адаптирующейся к изменяющимся требованиям. Большое сообщество пользователей и разработчиков обеспечивает постоянное обновление и улучшение функциональности, что гарантирует высокую производительность и актуальность продукта.

Экономия Ресурсов

Trino требует меньших затрат на исполнение запросов, что уменьшает нагрузку на инфраструктуру и сокращает расходы. Пользователи могут обращаться с данными на любом хранении, будь то Oracle или файлы CSV, благодаря единому SQL-интерфейсу.

Безопасность и Управление

Хотя Dremio предлагал платные функции безопасности, бесплатная версия не могла удовлетворить наши требования. Trino, напротив, предлагает широкий спектр настроек безопасности, а также возможность интеграции с различными инструментами управления данными.

Поддержка и Документация

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

Влияние на Платформу

Переход на Trino позволит нам лучше следовать Data Mesh и основным принципым, а именно:

  • Видимость: данные станут более доступными и легко находимыми для пользователей.
  • Доступность: пользователи смогут быстро извлекать данные из различных систем и форматов.
  • Понимание: наличие описаний данных поможет лучше понимать контекст и содержание.
  • Связность: пользователи смогут легко использовать дополнительные атрибуты благодаря связям в данных.
  • Доверие: уверенность в качестве данных будет повышена.
  • Совместимость: общие представления о данных у производителей и потребителей.
  • Безопасность: данные будут защищены от несанкционированного доступа и манипуляций.

Что такое Data Mesh?

Заключение

Переход с Dremio на Trino – это важный шаг на пути к улучшению нашей платформы данных. Мы уверены, что гибкость, высокая производительность и открытая архитектура Trino помогут нам достигнуть новых высот в управлении и анализе данных. Следите за новостями и присоединяйтесь к обсуждению в нашем чате поддержки!

Всем хороших выходных! Напишите в комментариях, как вам запомнился Dremio, и что вы пожелаете новому ядру на базе Trino.

Калининград, выезд БИТа
Earlier Ctrl + ↓