本記事ではAlteryxからポリゴンなどの空間データをsnowflakeにロードする方法を紹介します。
空間データをロードする際、spatial obj型のままデータをロードすることができなかったのですが
試行錯誤してロード方法がわかったので紹介します。
必要になる処理
以下の手順でAlteryxから空間データをロードできます。
①snowflakeで空間データの列をGEO型に指定してテーブル作成
➁Alteryx側では空間データの列を、文字列型に変換してbulkロード
個人的に、列数が多いとsnowflake側でのテーブル作成が手間に感じるので、
本記事では、snowflake側でテーブルを作成しない方法でやり方を説明します。
手順
①空間データの型変換
空間データの型をSpatial obj→V_Stringに変換
サイズをデータがTruncateしないサイズ
かつsnowflakeの許容サイズ(16,777,216以下)に変換(参考)
➁一旦、データをsnowflakeにバルクロードしてテーブル作成
Output optionをCreate New Tableにして、データをロード
テーブル作成が目的で全レコードロードする必要ないので、Sample toolとかでデータ絞ることを推奨
③snowflakeでGEO型の列を作成
VARCHARからGEO型への型変換ができなかったので(わからなかった)、
空間データにあたる列を削除して、GEO型で作り直しています。
以下のようなクエリで、空間データの列を削除し、同名の列をGEO型で再作成しています。
alter table "DB_NAME"."SCHEMA"."TABLE_NAME"
drop column "COLUMN_NAME" ;
alter table "DB_NAME"."SCHEMA"."TABLE_NAME"
add column "COLUMN_NAME" geography;
④AlteryxからBulkロード
!まずSelect toolで空間データの列の並び替えを行ってください。
③の手順で、列の序数(並び順)が変わっているため、そのままロードするとErrorが発生します。
Output optionをDelete & AppendにしてデータをBulkロードする
この手順でsnowflakeに空間データのロードが成功します。
まとめ&注意点
ポリゴンのサイズによっては、Spatial objからV_Stringの変換の際に、
snowflakeの許容サイズ(16,777,216以下)を超えてしまう場合があり、
そのポリゴンは、snowflakeにあげることができません…
Generalize toolを用いて、ポリゴンの間引きを行えば解決できる場合がありますが、
ポリゴンの形状が変わってしまうため、最善策とは言えません。
本記事の内容は暫定的な対応ですが、参考にしていただければ幸いです。
snowflakeにもこれからどんどん力を入れていくので、私はどんどんニッチな情報を発信していきます~
野口