Alteryxからsnowflakeに空間データをバルクロードする方法

Alteryxからsnowflakeに空間データをバルクロードする方法 | Tableau-id Press -タブロイド-
geometry_alteryx_to_snowflake

本記事では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にもこれからどんどん力を入れていくので、私はどんどんニッチな情報を発信していきます~

野口