SnowflakeにGeospatial Data Types(Preview)がやってきました!

2020.06.10

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

先日Snowflakeのオンラインイベント「Say Hello To The Data Cloud」にて、様々な新機能、実装予定の機能が紹介されました。

この中で「Geospatial Data Types」への対応の紹介もあり、2020/06/10現在では既に「Preview Features」として公開されています。こちらはオープンプレビュー中なので、すぐに試すことができます。

今回は、この「Geospatial Data Types」について、テーブルの作成からデータのINSERT/SELECTまでを簡単に試してみたいと思います。

データ型と関数について

データ型については、下記のドキュメントに記載がありました。

データ型は「GEOGRAPHY」型となり、測地系は「WGS84」(SRID 4326)となるようです。

また、併せて各種空間関数も実装されていました。よく利用しそうなものは一通り揃っている印象です。

テーブルを作ってみる

早速、「GEOGRAPHY」型をもつテーブルを作ってみます。なお、折角なのでPreview公開された新しいUIで試してみます。

CREATE TABLE public.geospatial_table (
    id INT,
    name VARCHAR,
    geo GEOGRAPHY
);

「GEOTRAPHY」型を指定したカラムを持つテーブルを作るだけです。簡単ですね。

INSERTしてみる

データのINSERT時は、下記のデータ型の値が指定できるとのことです。GEOGRAPHY型に型変換をせずにWKTなどをそのまま扱ってくれるのは嬉しいですね。

  • GEOGRAPHY
    • GEOGRAPHY型
  • VARCHAR
    • WKT, WKB(hexフォーマット), GeoJSON(文字列)のいずれかの文字列
  • BINARY
    • WKBバイナリ
  • VARIANT
    • GeoJSON

また、GEOGRAPHY型としては以下の空間オブジェクトを扱えるそうです。

  • WKT / WKB / GeoJSON
    • ポイント
    • マルチポイント
    • ラインストリング
    • マルチラインストリング
    • ポリゴン
    • マルチポリゴン
    • ジオメトリコレクション
  • GeoJSON
    • フィーチャー
    • フィーチャーコレクション

今回は以下のように「WKT」の値で「Point」をインサートしてみます。

INSERT INTO public.geospatial_table (id, name, geo) VALUES (1, 'point', 'POINT(139.7742058 35.697247)');

以上でデータの準備ができました。

SELECTしてみる

では、SELECTしてみます。まずは何も考えずにSELECTしてみましょう。

SELECT
   id
 , name
 , geo
FROM
  public.geospatial_table
;

表示されました。デフォルトではGeoJSON形式でSELECTされるようです。また、該当値を選択すると、画面右下に座標と型が表示されるので分かり易いですね。

出力フォーマットは以下のいずれかに変更できるとのことなので、WKTに変更してみます。

  • GeoJSON(デフォルト)
  • WKT
  • WKB
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT='WKT';

WKTになりましたね。SESSIONで指定できるのはとても便利そうです。

まとめ

以上、Snowflakeの「Geospatial Data Types」を試してみました。個人的に空間データがサポートされたのはとても嬉しいです。また、データ入出力の扱いもし易くてとても素敵ですね。

今回のイベントで同じく発表されたデータ可視化機能「Snowsight」がありますが、もしも「Snowsight」で地図表示も対応されたら空間データの可視化が捗りそうなので、素晴らしい「Geospatial Data Types」の対応と同様に、是非こちらも対応して欲しいなという気持ちでいっぱいになりました。

どなたかのお役に立てば幸いです。それでは!