|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
Есть большое количество таблиц и большое количество SQL-вставок из одной в другую вида INSERT as SELECT. В SELECT'ах нет звездочек, все поля перечисляются явно, но используются вьюхи, код которых тоже доступен. В запросах есть многократно вложенные подзапросы, INNER/LEFT JOINs, CROSS JOIN, WITH, UNION ALL, но нет коррелированных подзапросов с EXISTS\IN. Преобразования, перенос данных образуют сложное дерево , где в одну таблицу заходит поля из многих, в которые в свою очередь заливаются данные из других. итд. Хочется написать инструмент, который отслеживал бы для конкретного поля в конечной таблице, какие поля в него пишутся из прямых таблиц-источников, и так далее , до самого начала. То есть надо провести рекурсивный парсинг или синтаксический разбор всех запросов, которые льют данные в таблицу и отследить преобразования полей, на выходе получить дерево для одного конечного поля - со всеми возможными влияниями типа COALESCE, CASE, NVL\IFNULL итд. Я уверен, что задача много раз вставала раньше перед другими и есть инструменты, но сходу нагуглить не получилось. -- У мудрого человека нет врагов - только учителя ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 12:20 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
Забудь. Нет и не будет таких инструментов. Все DB-менеджеры унылы до невозможности. Элементарного не умеют. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 14:18 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo, гугли data lineage tools ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 14:23 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo Я уверен, что задача много раз вставала раньше перед другими Это вряд ли. Обычно человек знает из какого поля в какое он хочет перемещать информацию ещё при создании базы, до того как написал конкретные запросы. В правильно спроектированной базе нет дублирования и, следовательно, нет "SQL-вставок из одной в другую". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 15:10 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov makondo Я уверен, что задача много раз вставала раньше перед другими Это вряд ли. Обычно человек знает из какого поля в какое он хочет перемещать информацию ещё при создании базы, до того как написал конкретные запросы. В правильно спроектированной базе нет дублирования и, следовательно, нет "SQL-вставок из одной в другую". Не смешно даже. Представьте себе корпоративную среду, в которой сотни витрин, СУБД разных производителей, тысячи запросов, переливающих из одного в другое и оркестратор над всем этим с расписаниями запусков и зависимостями, чтобы начать очередной поток, когда закончатся зависимые или просто по времени. И вы пришли, смотрите на это все, больше половины людей, которые это все писали уже ушли или занимаются другим и все забыли. Ваши действия?.. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 15:26 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
H5N1 makondo, гугли data lineage tools Спасибо, это первое что-то дельное! Я представляю, должен быть для начала просто скрипт, хоть на питоне, хоть на чем. Вход - текст SQL, простой SELECT, даже не INSERT as SELECT. В нем все выходные поля именованные, то есть или как есть или с псевдонимом поля. Выход - маппинг выходных полей , каждому соответствует от 0 до N наборов tableN.fieldM , от которой оно зависит. Ноль - если это константа, NULL или вычислимое выражение, не зависящее от значений входных данных напрямую. Не видали такое, может быть на stackoverflow ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 15:30 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo Спасибо, это первое что-то дельное! Я представляю, должен быть для начала просто скрипт, хоть на питоне, хоть на чем. Вход - текст SQL, простой SELECT, даже не INSERT as SELECT. В нем все выходные поля именованные, то есть или как есть или с псевдонимом поля. Выход - маппинг выходных полей , каждому соответствует от 0 до N наборов tableN.fieldM , от которой оно зависит. Ноль - если это константа, NULL или вычислимое выражение, не зависящее от значений входных данных напрямую. Не видали такое, может быть на stackoverflow ? я бы посмотрел, что такое dbt: https://www.getdbt.com/ краем уха слышал, что он пускалка SQL трасформаций и умеет lineage строить. ну и много в последнее время про него пишут, вроде популярный тул. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 16:16 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
Все советы по сабжу не помогут. Нет и никогда не будет таких инструментов. Нужно просто садится и разбираться в говнокоде. Или традиционно готовить три конверта. Что-то подобное есть в BI QlikView. Отдельный инструмент, который графически показывает, какие таблицы/поля куда переливаются в скрипте загрузки. Смотрел презентацию. Не помню названия. На даже такой, с виду мощный инструмент вряд ли даст ощутимую пользу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 17:57 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
H5N1, я почитал пару страниц, не совсем понятно, что именно они продают. Как можно перевести термин lineage в данным контексте? Родословная? На уровне схем.таблиц я уже построил граф зависимостей, там дело нехитрое. Вот с полями сложнее - это фактически часть синтаксического разбора SQL.. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 18:11 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo H5N1, я почитал пару страниц, не совсем понятно, что именно они продают. Как можно перевести термин lineage в данным контексте? Родословная? На уровне схем.таблиц я уже построил граф зависимостей, там дело нехитрое. Вот с полями сложнее - это фактически часть синтаксического разбора SQL.. я не углублялся, просто помню, что у них был граф зависимостей. до поля или таблицы не смотрел, но судя по картинке до таблицы я не углублялся, просто много сейчас про них говорят и какая-то часть там я понял опен-соурс. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 18:23 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo ... Вот с полями сложнее - это фактически часть синтаксического разбора SQL.... 100% универсального решения для sql вряд ли может быть. Например, пусть у вас есть natural join соединение по некоторому полю, также вытягиваемому в список выбора. Стандарт не требует в таком случае явного указания, какому из источников соединения это поле на самом деле принадлежит. Правда, трудно представить, почему именно в такой ситуации это становилось бы критически важно. Если дело касается плана запроса для конкретной системы, то какие-то поддерживают указание проекций для полей в планах запроса. Красивую картинку потом рисовать руками можно. Если нужен универсальный разборщик sql-запросов, отвязанный от особенностей конкретной системы, посмотрите Apache Calcite. Кажется, он великоват, но думаю, с той или иной пользой его к этому делу прикрутить можно, либо пишите самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 18:50 |
|
Как отследить преобразование полей в разветвленной цепочке запросов SQL?
|
|||
---|---|---|---|
#18+
makondo И вы пришли, смотрите на это все, больше половины людей, которые это все писали уже ушли или занимаются другим и все забыли. Ваши действия?.. ) Сказать "извините, я ошибся дверью" и больше даже на километр не подходить к этому проклятому месту. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:08 |
|
|
Start [/forum/topic.php?fid=33&tid=1547043]: |
0ms |
get settings: |
0ms |
get forum list: |
8ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
36ms |
get topic data: |
3ms |
get forum data: |
2ms |
get page messages: |
15ms |
update_topic_read_status (1547043): 16.12.2021 15:08:43: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
31ms |
check new: |
1ms |
others: | 103ms |
total: | 199ms |
0 / 0 |