この記事はSnowflake Advent Calendar 2023シリーズ2の9日目です。
みんなでアドベントカレンダーを埋め尽くそうぜ!
はじめに
ここ1年くらいのSnowflakeは地理空間データの扱いがものすごいスピードで改良されているのですが、20年以上の歴史のあるPostGISと比べるとまだまだ足りない機能があります。
…という話をSnowVillageでしていたら「足りない関数はCARTO Analytics Toolboxにあったりするので、そっちも見るとハッピーになれるかと」というコメントが。
なにそれ知らない、ハッピーになりたい!試してみましょう。
使い方
CARTO Analytics Toolboxには2つのバージョンがあります。CARTOのアカウントなしで利用できる基本的なものがCARTO Analytics Toolbox Coreです。
これはSnowflake上のMarketplaceでNative Appとして公開されていて、無料で使用することができます。
取得
ボタンを押すことでNative Appを自分のアカウントにインストールできます。
Application名
はワークシートなどからCARTOの関数にアクセスするときに使うアプリケーション名、
インストールに使用したウェアハウス
はインストール中に使うウェアハウスです。
1分ほどでインストールできました。
以降はワークシートからCARTOの関数を呼び出すことができます。
アプリケーション名がデフォルトのままであれば、例えば以下のように呼び出せます。
SELECT CARTO_ANALYTICS_TOOLBOX_CORE.CARTO.VERSION_CORE();
試してみよう
ではワークシートからCARTOの関数を呼び出してみましょう。
例えば東京からサンフランシスコまでの大圏コースを調べてみましょう。サンフランシスコに行きたいかー!
APIリファレンスはこちらです。
-- 東京とサンフランシスコの緯度・経度を定義してGEOGRAPHY型に変換
WITH tokyo AS (SELECT TO_GEOGRAPHY('POINT(139.6917337 35.6895014)') as geog),
sanfrancisco AS (SELECT TO_GEOGRAPHY('POINT(-122.4192524 37.7794658)') as geog)
-- 大圏コースを計算。50個の点で近似
SELECT CARTO_ANALYTICS_TOOLBOX_CORE.CARTO.ST_GREATCIRCLE(tokyo.geog, sanfrancisco.geog, 50) AS geog
FROM tokyo, sanfrancisco;
JSON形式で出力されました。ただ、数字を見ても正しいか分かりませんね…
OpenStreetMap WKT Playgroundというサイトで地理空間データの可視化ができるのですが、入力フォーマットがWKT形式に限定されています。
WKT形式で出力されるように設定して再実行してみましょう。
-- 出力フォーマットをWKT形式に設定する
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT='WKT';
-- 東京とサンフランシスコの緯度・経度を定義してGEOGRAPHY型に変換
WITH tokyo AS (SELECT TO_GEOGRAPHY('POINT(139.6917337 35.6895014)') as geog),
sanfrancisco AS (SELECT TO_GEOGRAPHY('POINT(-122.4192524 37.7794658)') as geog)
-- 大圏コースを計算。50個の点で近似
SELECT CARTO_ANALYTICS_TOOLBOX_CORE.CARTO.ST_GREATCIRCLE(tokyo.geog, sanfrancisco.geog, 50) AS geog
FROM tokyo, sanfrancisco;
出力された結果をコピペすれば、大圏コースを確認することができました!
おわりに
CARTO Analytics Toolboxには色んな関数があるので地理空間データで遊ぶのが捗りますね!
そしてNative AppによるSnowflakeの機能拡張、簡単なのにポテンシャルがすごい。