powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Как отследить преобразование полей в разветвленной цепочке запросов SQL?
12 сообщений из 12, страница 1 из 1
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120196
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть большое количество таблиц и большое количество SQL-вставок из одной в другую вида INSERT as SELECT.
В SELECT'ах нет звездочек, все поля перечисляются явно, но используются вьюхи, код которых тоже доступен.
В запросах есть многократно вложенные подзапросы, INNER/LEFT JOINs, CROSS JOIN, WITH, UNION ALL, но нет коррелированных подзапросов с EXISTS\IN.

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

Хочется написать инструмент, который отслеживал бы для конкретного поля в конечной таблице, какие поля в него пишутся из прямых таблиц-источников, и так далее , до самого начала. То есть надо провести рекурсивный парсинг или синтаксический разбор всех запросов, которые льют данные в таблицу и отследить преобразования полей, на выходе получить дерево для одного конечного поля - со всеми возможными влияниями типа COALESCE, CASE, NVL\IFNULL итд.

Я уверен, что задача много раз вставала раньше перед другими и есть инструменты, но сходу нагуглить не получилось.



--
У мудрого человека нет врагов - только учителя
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120227
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забудь. Нет и не будет таких инструментов.

Все DB-менеджеры унылы до невозможности. Элементарного не умеют.
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120231
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo,

гугли data lineage tools
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo
Я уверен, что задача много раз вставала раньше перед другими

Это вряд ли. Обычно человек знает из какого поля в какое он хочет перемещать информацию ещё при создании базы, до того как написал конкретные запросы.

В правильно спроектированной базе нет дублирования и, следовательно, нет "SQL-вставок из одной в другую".
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120261
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
makondo
Я уверен, что задача много раз вставала раньше перед другими

Это вряд ли. Обычно человек знает из какого поля в какое он хочет перемещать информацию ещё при создании базы, до того как написал конкретные запросы.

В правильно спроектированной базе нет дублирования и, следовательно, нет "SQL-вставок из одной в другую".


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

И вы пришли, смотрите на это все, больше половины людей, которые это все писали уже ушли или занимаются другим и все забыли.
Ваши действия?.. )
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120264
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
H5N1
makondo,

гугли data lineage tools

Спасибо, это первое что-то дельное!

Я представляю, должен быть для начала просто скрипт, хоть на питоне, хоть на чем.
Вход - текст SQL, простой SELECT, даже не INSERT as SELECT. В нем все выходные поля именованные, то есть или как есть или с псевдонимом поля.
Выход - маппинг выходных полей , каждому соответствует от 0 до N наборов tableN.fieldM , от которой оно зависит.
Ноль - если это константа, NULL или вычислимое выражение, не зависящее от значений входных данных напрямую.

Не видали такое, может быть на stackoverflow ?
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120296
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo

Спасибо, это первое что-то дельное!

Я представляю, должен быть для начала просто скрипт, хоть на питоне, хоть на чем.
Вход - текст SQL, простой SELECT, даже не INSERT as SELECT. В нем все выходные поля именованные, то есть или как есть или с псевдонимом поля.
Выход - маппинг выходных полей , каждому соответствует от 0 до N наборов tableN.fieldM , от которой оно зависит.
Ноль - если это константа, NULL или вычислимое выражение, не зависящее от значений входных данных напрямую.

Не видали такое, может быть на stackoverflow ?


я бы посмотрел, что такое dbt: https://www.getdbt.com/
краем уха слышал, что он пускалка SQL трасформаций и умеет lineage строить.
ну и много в последнее время про него пишут, вроде популярный тул.
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120337
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все советы по сабжу не помогут.
Нет и никогда не будет таких инструментов.
Нужно просто садится и разбираться в говнокоде. Или традиционно готовить три конверта.

Что-то подобное есть в BI QlikView.
Отдельный инструмент, который графически показывает, какие таблицы/поля куда переливаются в скрипте загрузки.
Смотрел презентацию. Не помню названия.

На даже такой, с виду мощный инструмент вряд ли даст ощутимую пользу.
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120344
makondo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
H5N1, я почитал пару страниц, не совсем понятно, что именно они продают.

Как можно перевести термин lineage в данным контексте? Родословная?
На уровне схем.таблиц я уже построил граф зависимостей, там дело нехитрое.
Вот с полями сложнее - это фактически часть синтаксического разбора SQL..
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120351
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo
H5N1, я почитал пару страниц, не совсем понятно, что именно они продают.

Как можно перевести термин lineage в данным контексте? Родословная?
На уровне схем.таблиц я уже построил граф зависимостей, там дело нехитрое.
Вот с полями сложнее - это фактически часть синтаксического разбора SQL..

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


я не углублялся, просто много сейчас про них говорят и какая-то часть там я понял опен-соурс.
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120364
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo
...
Вот с полями сложнее - это фактически часть синтаксического разбора SQL....


100% универсального решения для sql вряд ли может быть.
Например, пусть у вас есть natural join соединение по некоторому полю, также вытягиваемому в список выбора.
Стандарт не требует в таком случае явного указания, какому из источников соединения это поле на самом деле принадлежит.
Правда, трудно представить, почему именно в такой ситуации это становилось бы критически важно.

Если дело касается плана запроса для конкретной системы, то какие-то поддерживают указание проекций для полей в планах запроса.
Красивую картинку потом рисовать руками можно.
Если нужен универсальный разборщик sql-запросов, отвязанный от особенностей конкретной системы,
посмотрите Apache Calcite.
Кажется, он великоват, но думаю, с той или иной пользой его к этому делу прикрутить можно, либо пишите самостоятельно.
...
Рейтинг: 0 / 0
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
    #40120659
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makondo
И вы пришли, смотрите на это все, больше половины людей, которые это все писали уже ушли или занимаются другим и все забыли.
Ваши действия?.. )

Сказать "извините, я ошибся дверью" и больше даже на километр не подходить к этому проклятому месту.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Как отследить преобразование полей в разветвленной цепочке запросов SQL?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]