SQLの構文解析

タイトル画像

はじめに

弊社では各企業様が持っているデータを効率的に活用できるBIツール【Excellent/WebQuery/FreeWay】を製造・販売しております。弊社BIツールではSQLを使ってデータ取得を行っておりますが、このSQLの解析を行う技術を使ったサービスも提供しております。

今回は我々システムコンサルタントが持っている「SQL解析」の技術や、その技術を使ったサービスについて簡単にご説明します。

SQLの構文解析について

皆さんにとっては当たり前のことかと思いますが、「SQL」と一言で言ってもデータベースの種類や、SQLを作成する人によっても書き方が異なるといったこともあるのではないでしょうか?

例えばsales(売上管理)テーブルから「product(商品名)」と「date(売上年)」を出力する方法として、以下の2パターンのSQLがあったとします。

 

  • パターンA:select product as 商品名, substr(date, 1, 4) as 売上年 from sales;
  • パターンB:select product 商品名, substring(date, 1, 4) 売上年 from sales;

 

データベースの種類によっての作法の違いなどはありますが、どちらのSQLも同じデータ出力を目的としたSQLです。では、この時出力される列名は?また、使用されていう関数はどれでしょうか?

基本的なSQLの知識がある方であれば、簡単な質問だと思います。しかしシステムがこの質問に回答するためには、それぞれの構文の意味を理解し、解析をする必要があります。

冒頭でも述べた通り、SQLの書き方はデータベースの種類や人によって異なってくる部分があるため、「出力名はどこに書かれている」といった規則が必ずしも当てはまらないケースがあります。

SQLにおけるそれぞれの違いを判別し、どこにどういった要素の項目が存在しているかを1つ1つ解析しなければ、「表示する列名」や「使用されている関数」などは解りません。

今回例として挙げているSQLのレベルであればそれほど難しくないように感じますが、実際の業務でデータを抽出する際のSQLは複雑なものも少なくありません。数十個のテーブルを結合し、数百の列項目を選択し、関数を使い、サブクエリを使い、UNIONを使い…といったように、どんな構文のSQLを解析するかは予測できません。

我々システムコンサルタントでは、BIツールを製造しているメーカーとして、その様な複雑なSQLでも解析を行える技術の開発を行っております。そういった解析の技術をどう活用しているのか、一例をご紹介します。

SQLの構文解析って何に使うの?

では、SQLの構文解析はどういったことに使えるのでしょうか?

利用方法はいくつかありますが、この技術を利用して我々が提供しているサービスとしては、BIツールの移行作業の自動化が挙げられます。BIツールなどのアプリケーションを使用している場合、費用対効果や保守サービスの終了、サーバー更改などを理由にした、新しいアプリケーションへの移行はいつか行う作業の1つではないでしょうか。

こういったBIツールの移行を考える際、移行に向けての大きな障壁になるものの1つに既存資産の移行があります。

これまでのツールで使ってきた定型帳票は、当然新しいツールでも使いたいという要望もあるかと思います。しかし、この定型帳票の定義は各ツールによって異なる部分があるため、移行には手動での作業が必要になり時間がかかってしまいます。そんな時、今回ご紹介したSQLの構文解析の技術を利用すると、移行作業が格段に早くできます。

各ツールで定型帳票の定義は異なりますが、多くの場合は定義の中にデータを取得するためのSQLが組み込まれています。このSQLの構文を解析することで「使用しているテーブル」「出力する列・列名」「使用している関数」などが解るため、その情報を元に定型帳票の定義を作成することができるのです。

最後に

我々、システムコンサルタントは、BIツールの製造・販売・サポートを自社で行っている国内メーカーです。

1990年代から様々な業種のお客様にご利用いただいており、そこで蓄積されたノウハウを元に、お客様の業務に最適なご提案をしております。

弊社で製造しているBIツール「Excellent/WebQuery/FreeWay」について、ご興味がございましたら是非お問い合わせください。

製品イメージロゴ

Excellent/WebQuery/FreeWayの詳細はこちら