関係型データベースとSQLは長年企業のデータ管理基盤として利用されてきたが、ビジネスインテリジェンス(BI)ツールでは依然としてセマンティックレイヤーの必要性が殘る。Looker、Power BI、TableauなどのツールはDAXやLODといった専用クエリ言語を採用しており、直接SQLを扱うことは少ない。この背景から、BIツールが複雑なクエリ処理やフォーマット管理、データガバナンス、再利用可能な計算を実現するためには、SQLの表現力を拡張するセマンティックレイヤーの構築が不可欠となる。本記事では、Calciteを活用したセマンティックレイヤーの設計と実現方法を解説する。
関係モデルはテーブル構造でデータを保存し、クエリでは明示的に結合や集約ロジックを指定する必要がある。例えば、1994年と1995年の売上比較を行うには、それぞれの年ごとのクエリを繰り返す必要がある。これに対し、次元モデルは聲明的なクエリを可能にし、時間範囲を指定するだけで自動的にデータスキャンと集約を実行する。関係モデルは手作りの義大利パスタに、次元モデルは註文のピザに例えられる。この違いは、関係モデルが底層の計算を繰り返すのに対し、次元モデルが座標系を抽象化してクエリを簡素化する點にある。
セマンティックレイヤーはユーザーとデータの間の抽象層であり、以下の機能を提供する。
核となる目標は、SQLの基盤を変更することなく、その表現力を拡張することである。
度量は単なる集約関數(SUMなど)にとどまらず、複雑な式(利益率 = (収入 - 成本)/収入)を含む。また、特定の地域や時間範囲、顧客條件などに依存する上下文依存性を持つ。実裝には、ウィンドウ集約(OVER句)による時間系列比較や、カスタム式による複雑な計算(売上予測)が用いられる。例えば、売上成長率を計算するには2回のクエリが必要だが、次元モデルでは「去年の売上」を新たな度量として定義することで簡略化可能である。
技術的な課題としては、ウィンドウ集約で異なる部門の社員給與比較が困難な點や、度量の再利用性(閉包性質)が挙げられる。
Calciteはデータベースシステム開発のためのツールキットであり、HiveやDrillなどのシステムに埋め込まれる。SQLのセマンティクスを拡張し、セマンティックレイヤーの機能を実現する。データモデル設計では、度量を含むテーブルモデルを構築し、閉包性質(テーブルからテーブルを生成可能)を維持する。例えば、社員表に「利益率」度量を追加し、クエリ時に直接使用可能にする。
今後の方向性として、標準SQLの拡張によりDAXなどの専用言語の閉鎖性を迴避し、動的度量定義(外部データソースへの參照、天気情報など)をサポートする予定である。
度量はSQLビューで定義され、複雑な式(利益、売上予測)をデータモデルに封入する。例えば、「3匹の犬を飼い、2匹以下の貓を飼う顧客の利益率」など、條件付きの度量が可能。@
演算子を用いて度量評価の上下文を制御し、去年の利益や全顧客の合計を計算可能。visible
フラグにより、分析者の総給與などのフィルタリング結果を制御する。
度量は正しい粒度で計算される必要があり、例えば収入は各註文の収入を合計し、利益率は各集約層の合計をもとに計算する。時間系列データでは、季節末の在庫を合計するなど、粒度の制御が重要。LOD(Level of Detail)言語はTableauのLOD構文に類似し、集約順序を保証する。
extend
演算子を用いて仮想データポイント(予測売上)を生成し、2025年などの未実在の時間點を処理可能。SQLビューにより線形回帰や機械學習アルゴリズムなどの予測モデルを統合し、ユーザーは計算詳細を気にせず利用可能。時間系列では、間隔の埋め込み(補間)と未來データの生成(外挿)を區別する。
K-meansなどの聚類アルゴリズムを用いて、データポイントを中心點に割り當てた聚類IDを度量として生成。複雑な計算(聚類)はマテリアル化ビューに保存し、クエリごとに再計算を迴避。
セマンティックモデルは「星型」構造で業務ビュー(出荷、在庫)を接続し、倉庫、製品、顧客などの共有実體を結びつける。自然言語クエリはグラフィック検索により解析され、「去年低在庫製品を購入した地域を表示」といったクエリが可能。事前に定義された度量(収入など)により、自然言語処理システムがSQLを生成し、精度を向上。
クエリ言語はSQLの拡張形式を採用し、新たな言語の再発明を避ける。Calciteの実裝狀況では、4488が完了、5692(@演算子)の仕様書が完了、5105が実験段階でCalcite主幹に統閤中。度量の使用は選択的であり、強制されない。
average_salary
)