МОТИВАЦИЯ

Вы когда-нибудь работали со скриптом SQL, который имел недружественное количество CTE. Лично мне довольно утомительно читать все, чтобы понять суть. Я всегда хотел, чтобы был более наглядный способ анализа и анализа длинного кода SQL на основе CTE. Это привело меня к интересной идее для быстрого проекта.

ПРОЕКТ

Для этого проекта я разработал простой инструмент с flask и D3.js, который анализирует тяжелые SQL-скрипты CTE для создания ориентированных ациклических графов (DAG). В DAG каждый узел представляет отдельный CTE, а ребра представляют происхождение (т. е. cte2 ссылается на cte1 в своем выражении from). Когда пользователь щелкает узел в DAG, соответствующий код SQL для CTE появляется в верхнем центральном редакторе пользовательского интерфейса, а сведения о столбцах отображаются в таблице под кодом SQL. (см. скриншот ниже)

Для создания групп обеспечения доступности баз данных использовался D3.js. Это надежная библиотека JavaScript для визуализации данных. Flask был веб-фреймворком, выбранным для воплощения инструмента в жизнь. Flask известен как один из самых простых фреймворков для создания веб-приложений с помощью Python.

РАЗБОР SQL И СОЗДАНИЕ DAG

Чтобы создать DAG из кода SQL, мы должны сначала проанализировать код SQL и выгрузить его в файл json, который может использоваться D3. Я использовал пакет Python SQLGlot для разбора SQL. Узнать больше о SQLGlot можно здесь. С помощью этого пакета мы можем запустить код, аналогичный приведенному ниже, для извлечения списка CTE с соответствующими столбцами и таблицами.

Строка 5 приведенного выше кода извлекает все выражения CTE в объект-генератор. Каждый объект в генераторе представляет собой дерево, представляющее структуру сценария SQL. Каждое дерево должно быть проанализировано, чтобы найти элементы в операторах select и from (строки 10 и 11 выше). После анализа CTE извлеченные данные помещаются в словарь. Этот словарь сбрасывается в файл Json. Затем файл помещается в каталог static/model в нашем приложении flask для использования d3.

Если вам нужна дополнительная информация об этом проекте, посетите репозиторий GitHub→ здесь.

ВОЗМОЖНОСТИ ДЛЯ СОВЕРШЕНСТВОВАНИЯ!

Этот проект далеко не идеален. Есть еще много ошибок, над которыми нужно работать. Например, у инструмента есть проблемы с анализом подзапросов и обработкой столбцов, которые зависят от шаблонов регулярных выражений. Кроме того, он плохо работает с некоторыми более нетрадиционными синтаксисом SQL, такими как использование() в качестве предиката соединения или exclude() в операторе выбора. Если кто-то хочет внести свой вклад в проект или может дать полезный совет, пожалуйста, дайте мне знать!

РЕДАКТИРОВАТЬ: 05.06.2022

CTE Explorer был обновлен для работы с using() и exclude().