Spatial データへの対応

マイクロソフトの太田です。

社内や知人から聞かれた質問の代表的なものをとりあげて、解説していこうと思います。今日は社内の人からSQL Server 2008の空間データ型について、質問を受けました。

Spatial データ

どのような機能かということと、次のバージョンでの展望のようなものを聞かれました。一言で言うと、Spatial データ型のサポートとは、次の3点セットを意味します。

1. 空間情報(xy 座標または緯度経度等)を、位置を表す情報として格納するためのデータ型

2. 上記のデータ型に入れられたデータ(点、図形、領域等)を操作する関数群

3. 上記関数のいくつかが高速に実行できるようにするためのインデックス

データを表現する部分(多くは地図とともに表示されます)は、SQL Server 2008 としては特に対象としていません。ただし、SSMS(SQL Server Management Studio)では一部表示機能(空間結果)があります。

情報が少ないことは事実なのですが、次のような説明はあります。

https://msdn.microsoft.com/ja-jp/library/cc280766.aspx

https://msdn.microsoft.com/ja-jp/library/cc280487.aspx

上記の3点セットの中で、1は Geometry 型と Geography 型というものがあります。これらはそれぞれ平面状のx座標、y座標で表される図形を入れるためのデータ型、および緯度経度(+空間参照識別系)で表される図形を入れるためのデータ型となります。そして2はそれらの関係(図形間の包含関係、距離等)や特性(長さ、面積、頂点等)を取得するための関数群です。これらの関数群は Geometry 型と Geography 型とで用意されているものが異なります。たとえば Geometry 型にある STContains のような包含関係を表す関数は Geography 型にはなく、逆の場合もあります。

空間データに対するクエリの例や関数の例は、Geoquery2008 というソフトウェアで見るとかなり視覚的に理解しやすいと思います。

次のスクリーンショットはSQL Server 2008用のAdventureWorks2008というデータベースの中のPerson.Addressテーブルに対してクエリを行った結果を図示しています。

(使い方は、Connectでデータベースに接続し、データベースを選び、クエリを記述します。)

GeoQuery2008 screenshot 

このサンプルデータベースについては中身のデータまで真剣に見たことがなかったのですが、住所情報が散らばっていることが分かりました。

またメニューの Examples を選ぶと前述の関数群の一覧が表示され、いずれかを選択するとその使用例としてのクエリの例が表示され実行(Execute)すると結果が地図上にプロットされます。一通りの機能の概要を見るには便利なツールです。

このように1と2については表層的に理解することができます。質問者はきっとインデックスについてお客様から聞かれたのかも知れません。また今後の予定については、当然どのような拡張が行われますかという意図だと考え、可能性をお伝えしたのですが、質問者の意図は、「機能がなくなることはないですか?」というものだったようです。ちょっとがっかりしましたが、空間情報や FILESTREAM をはじめとするいわゆる通常の文字数値以外のデータの扱いは Beyond Relational というカテゴリになりますが、これは今後もSQL Serverにとっては大きな柱の一つですという回答をいたしました。この辺はまたいつか書いてみたいと思います。