SQL Server 용 SQL 구문 분석 프로그램을 만들고 SQL 시각화에 도전하는 이야기
이것은 Azure SQL & Synapse Analytics Advent Calendar 2020 13 일째 기사입니다.
구문 분석 프로그램을 만들었습니다.
산만큼 있는 SQL로부터 데이터의 흐름을 쫓고 싶었으므로, SQL의 구문 분석 프로그램을 만들었습니다.
Microsoft의 Microsoft SQL Server 2016 서비스 팩 2 Feature Pack 에 들어 있는 Microsoft SQL Server 2016 SP2 Transact-SQL ScriptDom을 사용해 작성했으므로, SQL Server용입니다.
최신 SQL Server 2019에서만 사용할 수 있는 구문에는 대응하고 있지 않습니다만, Microsoft제의 구문 분석 라이브러리를 사용하고 있으므로 그 이외의 구문에는 거의 대응하고 있습니다.
여담입니다만...처음에는 개인 버전의 SQL ISO 표준 구문 정의 무너진 것을 계기로 포기했습니다.
다음은 ANTLR 커뮤니티가 만든 TSQL 구문 정의 를 바탕으로 만드는 것을 시도했습니다.
동작하는 곳까지는 가지고 갔습니다만, 원래의 구문 정의에 결함이 많아 아무리 수정해도 탄에 물이었으므로 일단 단념했습니다.
htps : // 기주 b. 코 m / G 세 r 히데 노리 / AN TSQL 파 r r
Graphviz에서 SQL 시각화에 도전 중입니다.
이 구문 분석 프로그램을 사용한 알기 쉬운 응용 예가 없을까 생각하고, Graphviz에서의 SQL의 가시화를 생각해 냈습니다.
작성한 SQL 구문 분석 프로그램은 XML을 출력하므로, 이것을 Graphviz의 dot로 변환해 가시화합니다.
아직 제작이지만 SQL에서 다음과 같은 이미지를 만들 수 있습니다.
이 구문 분석 프로그램을 사용한 알기 쉬운 응용 예가 없을까 생각하고, Graphviz에서의 SQL의 가시화를 생각해 냈습니다.
작성한 SQL 구문 분석 프로그램은 XML을 출력하므로, 이것을 Graphviz의 dot로 변환해 가시화합니다.
아직 제작이지만 SQL에서 다음과 같은 이미지를 만들 수 있습니다.
USE AdventureWorks2016;
GO
UPDATE Production.Product
SET ListPrice = ListPrice * 2
FROM Production.Product AS p
INNER JOIN Purchasing.ProductVendor AS pv
ON p.ProductID = pv.ProductID AND BusinessEntityID = 1540;
GO
-- Query data/Subqueries
-- https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries?view=sql-server-ver15
USE AdventureWorks2016;
GO
/* SELECT statement built using a subquery. */
SELECT Name
FROM Production.Product
WHERE ListPrice =
(SELECT ListPrice
FROM Production.Product
WHERE Name = 'Chainring Bolts' );
GO
/* SELECT statement built using a join that returns
the same result set. */
SELECT Prd1. Name
FROM Production.Product AS Prd1
JOIN Production.Product AS Prd2
ON (Prd1.ListPrice = Prd2.ListPrice)
WHERE Prd2. Name = 'Chainring Bolts';
GO
-- Query data/Subqueries
-- https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries?view=sql-server-ver15
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
-- Reference/Transact-SQL (T-SQL) Reference/Statements/CREATE/VIEW
-- https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver15
사용법
sqlparser -o xml -i -f <SQLファイルパス> -u <XMLファイルパス>
ruby proofofconcept2.rb -x <XMLファイルパス> > <dotファイルパス>
dot -T png <dotファイルパス> -o <pngファイルパス>
sqlparser는 TSQLScriptDomParser
proofofconcept2는 SQLVisualize에서 구할 수 있습니다.
sqlparser의 사용법은 여기 이나, 여기 를 봐 주세요.
Reference
이 문제에 관하여(SQL Server 용 SQL 구문 분석 프로그램을 만들고 SQL 시각화에 도전하는 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hidenori/items/559032c1f8d43cbfbe05텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)