subquery.ru - dbt, clickhouse, cube – Telegram
subquery.ru - dbt, clickhouse, cube
650 subscribers
10 photos
1 video
46 links
SubQuery — автоматизация данных для аналитиков и data-инженеров.

Пайплайны, описанные кодом, с визуализацией и тестами, готовый dbt-стек c IDE, планировщик запусков и безопасная совместная работа.

𝗕𝗹𝗼𝗴
https://subquery.ru

𝗗𝗶𝗿𝗲𝗰𝘁
@mironovich
Download Telegram
Google Optimize server-side

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

Смотрим
https://burgerdata.com/blog/google-optimize-server-side/

@Burgerdata
Как работать с API

Длиннющая статья вышла, я даже сам не осилил прочитать, но, может, у вас получится.
Там про OAuth2 с примерами на js и python, довольно сумбурно, как сейчас думаю.
А еще пример полностью автоматического отчета с авторизацией, обновлением токенов и доставкой агрегата в телегу, чтобы больше времени у вас оставалось на интересные задачи.

https://burgerdata.com/blog/kak-rabotat-s-api/

Так-то 3 денька осталось. Шевелись, Плотва!

@Burgerdata
​​Datastudio - ownership

И еще одно долгожданное обновление: в Datastudio наконец можно передавать владельца дашборда. Отличная новость и для агентств и для клиентов, и я надеюсь, они не придерживали её специально до кристмаса 🤣

@Burgerdata
Tips: Google Spreadsheets

Эпи
чный тред с типсами по гугл шитам. Где-то в СНГ хватило бы на целый телеграм канал 😇
https://twitter.com/benlcollins/status/1217105023097802753
Ваша задача - вспомнить про них в нужный момент, что конечно же очень не просто.

@Burgerdata
GA Enhanced Ecommerce

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

Так вот, господин Коке, имея кучу свободного времени в силу недавней скоропостижной безработицы, расписал чуть подробнее этот метод, и даже приложил небольшой apps noscript для автоматизации.

https://juliencoquet.com/en/blog/2020/01/21/google-analytics-ecommerce-upload-product-data-with-google-sheets/

@Burgerdata
​​Яндекс Метрика. Цели

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

Естественно, что и при редкой работе с Метрикой я всегда всё делаю согласно документации. Так вот, в этой самой документации есть любопытная ремарка касательно целей:

Внимание. Значение идентификатора target не должно содержаться в URL страниц сайта. Иначе будет собираться некорректная статистика, учитывающая посещения страниц, содержащих в адресе значение, выбранное при создании цели.

Получается, что разница между целями типа js-событие и url есть только в интерфейсе для удобства юзера, в бэке же они все эти годы хранились вместе. А значит, мы можем фиксировать цели с js-событиями условиями для url.

Зачем?
В этом случае доступны проверки вхождения и регулярки, что наверняка оценят любителя автотегов, посылающие в Метрику что-то типа {{Event Category}}_{{Event Action}}_{{Event Label}}

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

А ещё варианты?
Вместо это советуют пользоваться параметрами визитов, которые тоже, кстати, можно автоматизировать.

@Burgerdata
GTM Server-side

Кле
вые новости пришли с Superweek, который проходит сейчас в Венгрии. Брайан Кун (если я правильно разглядел фотку) анонсировал GTM для серверной стороны. Это решит очень много проблем с нагрузкой на клиент, с запретами на куки, кастомным стримингом данных и т.п.

Семён конечно уже вовсю излагает свои мыслишки
https://twitter.com/SimoAhava/status/1222459714614841346

@Burgerdata
Apps noscript V8

В аппскрипте поменялся движок для выполнения JS. Теперь это V8, на котором работают сhrome и nodejs. Больше не придётся щелкать в голове тумблер, чтобы забыть привычные конструкции 🤓
Надеюсь, теперь это облако для бедных, станет чуть менее непопулярно.

У меня получилось включить V8, добавив "runtimeVersion": "V8" в корень манифеста: View - Show manifest file. Никаких опций Enable из гайда по ссылке я в своих скриптах не увидел.

https://developers.google.com/apps-noscript/guides/v8-runtime

Из менее интересного: в ЯМетрике теперь по умолчанию визиты атрибуТТТируются как в GA – по последнему известному источнику. Хорошая новость, потому что большинство юзеров по моему опыту, даже не знали, что это такое, и открывая отчеты, просто копипастили данные в общую эксельку с GA.

@Burgerdata
​​APP+WEB

Добавили возможность рисовать свои пути по сайту, в том числе шаги, предшествовавшие чему-то. То есть можно задать точку начала или точку конца, и достроить остальное.

У меня конечно далеко не лучший на планете G-счетчик для демонстрации, и в ближайшее время я переходить туда не планирую, но попытка хорошая 🤔

@Burgerdata
И жизнь стала чуточку лучше 😊
​​APP+WEB - Enhanced Ecommerce

В этом карантине работаешь весь день, и руки доходят даже до забытого бэклога. Вот и гугиль добавил наконец расширенный екоммерс в новый счетчик. Документация у них давно висела на сайте, но сам трекер должным образом не реагировал , теперь же шлётся что-то отличное от [object Object].

Дока для gtag
Дока для gtm

Глядишь, скоро и отчёты добавят, где эти данные можно будет нормально посмотреть.

@Burgerdata
📣 Здравствуйте, товарищи!

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

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

А чего ещё можно ожидать?

А ещё мне необходимо побольше людей обращать в свою веру, и поэтому в канале будут появляться посты по актуальному для меня стеку:

🧦 dbt
🧦 Cube (семантический слой)
🧦 ИИ Агенты (ии слой)
🧦 ClickHouse
🧦 Trino
🧦 DuckDB
1
Мы с вами расстались в ковид.

Тогда на карантине много кто поднабрал. Стали большими мои данные, а с ними и счета за BQ.
В попытке сэкономить я эволюционировал от scheduled queries до dataform, с которого потом пришлось перейти на dbt.

Однако многим коллегам трансформация далась непросто, ведь для командной работы с dbt-core необходимо
⁃ установить python окружение, dbt и доп.пакеты
⁃ настроить подключение, проект, таргеты для прода и дева
⁃ освоить git: ветки, коммиты, конфликты, релизы
⁃ подключаться к ВМ по SSH с vpn, редактировать cron, разбирать логи
⁃ как-то ещё надо получать алерты об упавших моделях из расписания
⁃ всё это у нас умножилось на дюжину персон в отделе, десятки клиентов, проектов и сотни моделей

Коллегам было очень, очень тяжело. А ведь данные всего мира не стоят слезинки на щеке аналитика! 🥹

Какие были варианты?

⁃ освободить ставки, нанять инженеров и научить их работать с данными диджитал маркетинга
⁃ второй

Мы выбрали второй!
🔥4
​​Встречайте https://subquery.ru

Мы постарались сделать удобный сервис для работы с dbt, чтобы технология была доступна не только инженерам данных, но и аналитикам и другим спецам со знанием SQL. Уже год он используется для обработки маркетинговых данных крупнейшего российского рекламодателя.

👂Какие функции есть?
⁃ поддерживаем адаптеры ClickHouse, PostgreSQL и принимаем заявки
⁃ sql редактор с подсказками, проверками и настройками под себя
⁃ граф моделей, поиск, таргеты, стриминг логов dbt
⁃ запуски по расписанию, удаленные запуски, бэкфилы, алерты
⁃ ветки, публикации, история версий и изменений
⁃ файловый менеджер S3

👂Что нужно, чтобы начать?
Опубликованная СУБД ClickHouse или PostgreSQL.
Мы предоставляем демо-проект для пробы, в котором конечно же не стоит вести дела.

👂Сколько стоит?
Небольшой проект можно вести бесплатно.
Что-то посерьезнее потребует постоплаты по числу рабочих мест.
Для энтерпрайза лимиты обсуждаются отдельном в каждом конкретном случае.

👂Что дальше?
dbt - первый этап. Позже мы добавим BI систему, коннекторы к источникам, облачную СУБД, свой счетчик и прочее. Есть открытый роадмап, вы можете повлиять на приоритеты.

Приглашаю попробовать https://subquery.ru
Можно со своим репозиторием.
Надеюсь, это сэкономит ваши слёзы.🥹
🔥5
​​В subquery.ru есть файловый менеджер для работы с файлами S3.

Так или иначе мы периодически сталкиваемся с ручными данными, занимаемся загрузкой\выгрузкой, поэтому решили, что удобно, когда всё рядом, и не надо ходить в утку.
Ну и конечно его использование бесплатно, если поступаете со своим бакетом.

Я включил в нашу документацию руководство по работе с S3 в ClickHouse.

https://docs.subquery.ru/files/guides/clickhouse-s3/
🔥4
Однажды человек пришёл к мудрецу и сказал ему:
- О, мудрейший, я хочу жениться и выбираю девственницу.
Мудрец вышел, а когда вернулся, то в руках он держал два..

В общем я надкусил Apache Iceberg, и если вы обещаете никому не говорить, то расскажу, как это было.

Сходим в 🪣 s3, одолеем чудовище по имени Nessie, вкусим DuckDB паштет, ну и Trino тоже поучаствует.

https://subquery.ru/blog/iceberg-trino-duckdb/
🔥6
🚀 Новый релиз!

- Запросы в консоли можно разделять с помощью ; и запускать индивидуально
- Окно поиска поддерживает регулярки, выбор регистра и массовую замену!
- Добавлена команда dbt retry. Она основывается на записи в run_results, так что в персональной ветке зайдёт, а вот в коллективной отцом может оказаться любой.
- Оптимизировали работу с хранилищем результатов запроса. Теперь там всё по тирам с разными TTL и компрессией.
- General system stability improvements to enhance the user's experience.
🔥8👏5🤩4
​​Семантический слой

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

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

Вдобавок к этому недавно прошла конференция СБЕРа на тему использования AI в BI, где коллеги говорили про тестирование подходов в виде DataAPI или Text2SQL. А нам внедренный семантический слой позволил подключить агента меньше, чем за неделю(!)

Я написал пару статей о нашем опыте взаимодействия с Cube и надеюсь, что это поможет стать ему хоть чуточку популярнее

Сила атрибута meta в Cube

Как организовать тенанты в Cube
👍75👀3🔥2🤩2
AI в BI

Видимо, кто-то до сих пор верит, что SQL придумали для секретарш, и потому надеется научить ему ИИ. Обывателю кажется, что "подай-принеси" данные делать несложно, но мы-то с вами знаем, кого и куда порой приходится натягивать, чтобы всё сошлось, а ведь дата стюарды отнюдь нерезиновые!

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

Попробую разложить тизер из прошлого поста. Итак, я уверен, что нейросеть не должна генерить SQL.
Это плохо контролируемый процесс, а вольности тут недопустимы, отвечать-то всё равно нам.
Как быть?
Мы ведь с вами делаем дашборды, в которых заказчик может тыкать только выданные виджеты, фильтры, смотреть предустановленные метрики и срезы. Так вот с этими недосекретаршами ситуация аналогичная - их нужно ограничить.

🧞‍♂️ План

1️⃣ Описываем в кубе необходимые бизнес метрики со всякими сложными SQL выражениями, джойнами и прочим. Добавляем к ним дескрипшны.
2️⃣ Пишем MCP сервер с перечислением нужных нейросети инструментов. Для демки мы использовали библиотеку от верцеля. Также вам понадобятся Дима и Гриша.
3️⃣ Суём машине в контекст наши инструменты, инструкции по их использованию, а потом закидываем вопрос юзера. Если выплывет, устраиваем на полставки.

🧙‍♀️ Какие инструменты писать?

dataset_meta
Подносим ИИшнице меню на выбор, в нём перечень всех полей датасета с описаниями, т.е. meta куба.

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

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

dataset_query
Когда многомиллиардная разработка наконец осознаёт, что от неё хотят, то формирует json запроса в куб

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

🦄 Как это выглядит?


import { createMcpHandler } from '@vercel/mcp-handler'
import { z } from 'zod'

const handler = createMcpHandler(
(server) => {
server.tool(
'dataset_query',
'Get data with Cube query',
{
measures: z.array(z.string()),
dimensions: z.optional(
z.array(z.string())
),
filters: z.optional(
z.array(
z.object({
member: z.string(),
operator: z.string(),
values: z.array(z.string()),
})
)
),
// ...
})
})



🧚 Что надо учесть?

1. Можно использовать разные модели для планирования решения и реализации. Это скажется и на скорости и на стоимости, так многие делают.
2. За ИИ всегда надо проверять. В неудачных дублях скринкаста он дергал функцию генерации конфига виджета дважды, потому что первое изделие не прошло сертификацию. Мы используем zod, как в примере.
3. Мультитенантность и RLS тоже не стоит доверять нейросети, для этого потребуются низкоуровневые методы
4. ИИ получает доступ к данным. Передача ценных данных между юрлицами, а тем более трансграничная, не всегда допустима.
5. Видос я ускорил.
6. Всё равно кто-то попросит скриншот дашборда в мессенджер... каждый день
🔥7🤩43👀3🆒3