Alteryx Designerのデータ入力/出力ツールを使ってODBC接続でSnowflakeと連携する – Snowflake Advent Calendar 2019 #SnowflakeDB

2019.12.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。DA部のスズです。

本エントリはSnowflake Advent Calender 2019の21日目のエントリです。

本エントリでは、ODBC接続を利用して、Alteryx Designerのデータ入力/出力ツールとSnowflakeとの連携をご紹介します。

準備

事前準備&動作環境

今回利用したAlteryx Designerの環境は以下の通りです。

  • Windows 10 Pro
  • Alteryx Designer Non-Admin 日本語 バージョン2019.3.2.15763

Alteryx DesignerからSnowflakeへの接続には、今回はODBCを使用します。SnowflakeのODBCについては、以下のドキュメントに記載があります。インストーラのダウンロードやODBCの設定手順についてもドキュメンテーションに記載されています。

利用する環境がWindowsなので、Windows用のインストーラをダウンロードします。今回はsnowflake64_odbc-2.20.0.msiを利用しています。

データの入出力には、Snowflakeチュートリアルで提供されているサンプルデータの一部を使用しました。Snowflakeのチュートリアルは以下のエントリでご紹介しております。

また、AlteryxのヘルプにはSnowflakeとの連携について記載があります。あわせてご参照ください。

Alteryx DesignerからSnowflakeへの接続に使用したSnowflakeのユーザーアカウントについては、Default RoleがSYSADMIN、Default Warehouseに任意のWarehouseが設定されているものを使用しています。

ODBCの設定

インストーラをダブルクリックし、ウィザードに従ってインストールします。

ODBCをインストールしたのち、ODBCデータソースアドミニストレーターにSnowflakeの接続先を追加します。追加をクリックします。

SnowflakeDSIIDriverを選択して完了をクリックします。

Snowflake Configuration Dialogでは、Data SourceUserServerを設定してOKをクリックします。Data SourceはDSN、UserはSnowflakeにログインするユーザー、ServerはSnowflakeのURL(https://の部分を除く)を設定します。

これでODBCの準備ができました。

Alteryx Designerとの連携

データ入力ツールでデータの取得

Alteryx Designerのデータ入力ツールを使って、Snowflakeからデータを取得してみます。

データ入力ツールからデータ接続を開き、データソースにあるSnowflakeのODBCをクリックします。

Snowflakeデータソース名にDSNを選択し、接続先のユーザー名、パスワードを設定してOKをクリックします。

データを取得するSnowflakeのテーブルを選択してOKをクリックします。

データ入力ツールの設定は以下のようになっています。

ワークフローを実行すると、Snowflakeのデータベースからデータを取得できました。

データ出力ツールでデータを出力

今度はAlteryx Designerのデータ出力ツールを使って、Snowflakeに新しくテーブルを作成してデータを出力してみます。

Snowflake側には、あらかじめデータベースを作成しておきます。今回はAlteryx Designerからのデータの出力先として、「FROM_ALTERYX」というデータベースを作成しました。

Alteryx Designerのデータ出力ツールの設定をしていきます。データ接続のデータソースにあるSnowflakeのODBCをクリックします。

Snowflakeデータソース名にDSNを選択し、接続先のユーザー名、パスワードを設定してOKをクリックします。

データの出力先となるテーブルの名前を入力してOKをクリックします。

データ出力ツールの設定は以下のようになっています。出力オプションは新しいテーブルを作成するを設定しています。これでワークフローを実行してみます。

エラーになりました!

以下のエラーメッセージが出力されていました。

Error: データ出力 (4): テーブル "FROM_ALTERYX" の作成でのエラー: Cannot perform CREATE TABLE. This session does not have a current database. Call 'USE DATABASE', or use a qualified name.
CREATE  TABLE "FROM_ALTERYX" ("FIRST_NAME" char(9),"LAST_NAME" char(8),"EMAIL" char(22),"STREETADDRESS" char(20),"CITY" char(11),"START_DATE" date)

This session does not have a current database. Call 'USE DATABASE', or use a qualified name.とあり、データベースの指定が抜けていたようです。

データ出力ツールの設定の事前SQLステートメント作成を開き、SQL EditorにUSE DATABASE <データベース名>を設定して、再度ワークフローを実行してみます。

今度は成功しました。

コマンドプロンプトからSnowflakeに接続し、作成したテーブルの結果を出力してみると、データが出力されていることを確認できました。

<ユーザー名>#COMPUTE_WH@FROM_ALTERYX.PUBLIC>SELECT * FROM TEST;
+------------+-----------+------------------------+----------------------+-------------+------------+
| FIRST_NAME | LAST_NAME | EMAIL                  | STREETADDRESS        | CITY        | START_DATE |
|------------+-----------+------------------------+----------------------+-------------+------------|
| Lem        | Boissier  | lboissier@sf_tuts.com  | 3002 Ruskin Trail    | Shikārpur   | 2017-08-25 |
| Harrietta  | Goolding  | hgoolding4@sf_tuts.com | 450 Heath Trail      | Osielsko    | 2017-11-27 |
| Emili      | Cornner   | ecornner3@sf_tuts.com  | 177 Magdeline Avenue | Norrköping  | 2017-08-13 |
| Avo        | Laudham   | alaudham2@sf_tuts.com  | 6948 Debs Park       | Prażmów     | 2017-10-18 |
| Iain       | Hanks     | ihanks1@sf_tuts.com    | 2 Pankratz Hill      | Monte-Carlo | 2017-12-10 |
+------------+-----------+------------------------+----------------------+-------------+------------+
5 Row(s) produced. Time Elapsed: 1.614s

事前SQLステートメント作成を使用しない場合

データ出力ツールの設定に事前SQLステートメント作成を使用した方法をご紹介しましたが、ODBCにDatabaseとSchemaを指定しておくことで、データ出力ツールでのデータベースの指定を省略することができます。

以下の画像では、ODBCのDatabaseに「FROM_ALTERYX」、Schemaに「PUBLIC」を設定しています。

この場合、データ出力ツールでは事前SQLステートメント作成でデータベースを指定していなくても、ワークフローを実行可能です。

最後に

SnowflakeとAlteryx Designerのデータ入力/出力ツールとの連携についてご紹介しました。今回のエントリではツールを使ったデータの入力/出力を確認することが目的だったため、5レコードというとても少ない数で動作確認しました。実際のデータではレコード数が多くなるかと思います。レコード数が多い場合はデータの取得や出力に時間がかかる可能性がありますのでご注意ください。

明日の22日目は、兼本侑始による「AlteryxのIn-databaseツールを使って大量データを効率よく集計する」の予定です。お楽しみに!