SASを初めて使った時の感想は、「速い!」でした。私にとってはSASは、何千万件というデータを、Oracleなどのデータベースより早く処理ができるし、柔軟にデータ加工もできる、そして統計解析や分析もできる最高のツールです。
そんな私ですが、会社の分析環境がSASからSnowflakeに代わり、Snowflakeに触れる機会があったので、SAS大好きユーザーとして、Snowflakeを評価してみました。
なお、会社では数千万件のお客様データと数億件のトランザクションデータを扱い、分析・モデルを構築する業務をしております。
データ処理・加工スピードについて
データの処理や加工スピードですが、SASよりもSnowflakeが圧倒的に速いです。数千万~1億件あたりのデータの集計、加工については、Snowflakeの方が体感で1/10ぐらいの時間で処理できます。
また、チューニング用のコーディングなども必要ありません。SQLで普通にselect文を書くだけで、びっくりするくらいのスピードで処理されます。
件数は2億件、カラム数100ぐらいテーブルを、ある程度複雑なSelect文で集計しても10秒ぐらいです。SASだと・・・100秒はかかります。
外部データの入出力について
外部データの入出力はSASのほうが簡単です。SASツールからインポートとエクスポートボタンを押下すればファイルの入出力が実現できます。
一方、Snowflakeもインポートとエクスポートボタンを押下すれば、ファイルの入出力が実現できますが、ツールがWEBベースのアプリのため、大容量データがとりこめません。また出力もWEBブラウザの機能1ファイルづつダウンロードするため作業効率が良くないです。
なお、Snowflakeにて大容量データの入出力を行う場合は、別のサービスやSnowSQLというCLIツールを使う必要があります。
SnowSQLであれば、SAS以上に柔軟な外部データの入出力が可能ですが、こちらの方法だと、仕組みや手順を新たに覚える必要があり難易度が高いです。
日本語の変数・テーブル名の扱いやすいさ
SASやSnowflakeは両者とも変数名やテーブル名に日本語を使うことができますが、使いやすさとしてはSASの方が良いです。
SASは、原則、日本語、英語、どちらの言語も変数名やテーブル名に使うことができます。便利です!。
一方、Snowflakeでは、変数やテーブル名に日本語を使う場合は「”(ダブルクォーテーション)」で囲む必要があります。※英語名の変数やテーブル名には「”(ダブルクォーテーション)」は必要ありません。
「”(ダブルクォーテーション)」を使うことで、特に面倒くさくなるのが、ストアドプロシージャ内の記載方法です。
例えば、INFORMATION_SCHEMA.COLUMNSというカラム名称を保持したテーブルから値を取得し、そのカラム名を使って別のSQLを実行するストアドプロシージャを考えます。
INFORMATION_SCHEMA.COLUMNSから取得したカラム名称は「”(ダブルクォーテーション)」で囲まれていないので、取得した値を使って別のSQLを作成するような処理を記載すると、事前に「”(ダブルクォーテーション)」で囲むような記述が追加で必要となり、手間暇がかかります。
関数作成の容易さ
SASでは「%macro」で関数を作成できます。Snowflakeでは 「CREATE PROCEDURE」で関数を作成することができます。
関数を容易に使えるという点ではSASに軍配があがりますが、関数で実現できる内容を評価するとPython関数が使えるSnowflakeに軍配があがります。
SASのマクロは誰でも気軽に扱えますが、Snowflakeのストアドプロシージャは、ある程度のプログラムの知識が必要となり、習得に時間もかかります。
集計ツールの使いやすさ
SASではEnterpriseGuide、SnowflakeではWebUIというツールを使います。
ツールはそれぞれ良い面があるのですが、分析屋が使いやすさという観点で評価すると、SASのEnterpriseGuideのほうが評価が高いです。
SASのEnterpriseGuideの評価が高い理由は、SASの場合、処理が終わった後のデータをExcelのような表で容易に見ることができるためです。
分析屋にとって大事なことは、データを見ながら仮説を考えたり、集計の正確性をチェックすることなので、処理後のデータをすぐ確認できるSASツールを評価します。
一方、SnowflakeのWebUIでは、処理結果を確認するためselect文を発行する必要があり、ひと手間ふえるため、かなりめんどくさいです。
転置・行列変換について
転置・行列変換とは以下のように、行と列を入れ替える機能です。Excelの行/列を入れ替えて貼り付け機能も同じです。
転置・行列変換は、SASだと容易にできますが、Snowflakeだと簡単には実現できません。実務だと、列を年月とした帳票を作成することも多いので、転置は容易にできることが望ましいです。
回帰分析・ツリー分析等の分析について
加工したデータを使って回帰分析やツリー分析を行うのには、SASが便利です。
Snowflakeは、分析ツールではなく、データウェアハウスなので、この結果は当然です。
Snowflakeで分析分析等を行う場合は、別のサービス等を使って分析をすることになります。
その他 null値について
SASにはnull値という概念はないのですが、Snowflakeにはnull値という概念があります。
SASユーザーがSnowflakeを使うと、null値という概念が分からず、うまく集計できない場合があります。
まとめ
これまでの比較結果をまとめてみました。
SAS | Snowflake | |
データ処理・加工スピードについて | × | ◎ |
ファイルの入出力について | ◎ | × |
日本語の変数・テーブル名の扱いやすいさ | ◎ | × |
関数作成の容易さ | ◎ | × |
集計ツールの使いやすさ | ◎ | × |
転置・行列変換について | ◎ | × |
回帰分析・ツリー分析等の分析について | ◎ | × |
その他 null値について | ◎ | × |
結果、◎の数はSASが7個、Snowflakeは1個でした。そう、分析屋としてはやはりSASが使いやすいと感じます。
ただし、私は今後、データ集計・加工ツールとしては、Snowflakeを使っていく予定です。
Snowflakeを使う理由は、圧倒的な処理速度です。何千万、何億というデータを驚くべきスピードで処理・加工できます。
ツールとして多少使いづらくても、時間のかかる集計・加工処理が減ることで、色々な分析や仮説の検証が容易にできるようになるメリットを高く評価してます。
コメント