Tableau Prepにおける処理速度とメモリ消費量
はじめに
Tableau Prepを使って700万行のデータを.hyperに抽出しようとした際に、エクセルとCSVにおける処理速度の違いについて試してみたので紹介する。
結論だけ言えば、特別な事情がない限りCSVを使う方が良さそうであると分かった。
やったこと
先日、SQLでデータベースから700万種類の商品ごとの売り上げを求めてそれをTableauで可視化することに挑戦した。その際に、データが大きすぎて直接ファイルにアウトプットできず、Python経由でSQLを回してデータフレームオブジェクトを70万行ずつ10分割してエクセルに出力するという方法を取った。
そしてそれをPrep上でユニオンしようとしたのだが、エクセルファイル読み込みの段階でロードが固まってしまった。どうも、エクセルは読み込みが遅いらしい。1ファイルだけ読み込んでも、ゆうに1分以上待たされた。仕方ないので、エクセルファイルを全て(手動で)CSVに変換して再チャレンジ。
今度は1ファイルにつき30秒も掛からずに読み込めた。ただし一度に10ファイルをドロップするとCPUがパンクするため、慎重を期して1ファイルずつドロップした。この時点で、CSVの方が圧倒的に読み込みが早いということが分かった。
続いて10個の同じフォーマットのファイルをユニオンで縦結合した。Prepでは1つのユニオン操作で6つまでしかソースを結合できないので、5ファイル分ずつユニオンして一度.hyperファイルとして吐き出し、2つの.hyperファイルを再度結合するという手順で処理した。
やってみたところ、Prepへの読み込み速度は.hyper>CSV>>Excelだった。350万行のデータがスムーズに読み込めるのはなかなかに感動的である。エクセルなら100万行の時点で下手すればフリーズする。また、データ容量も.hyperだとエクセルやCSVに比べて数分の一に圧縮されていた。流石。
メモリ消費量の観察
折角なので、ちょっと目線を変えてメモリの消費量を観察してみることにした。前職で数値シミュレーションを扱っていた関係で、マシンスペックとリソースモニターが気になるのだ。
Prepもいわゆるインメモリでデータを扱っているはずなので、読み込んだデータ量とメモリ消費量はほぼ比例するはず。70万行 × 7カラムのエクセルファイルとCSVを1ファイル読み込ませたところ、メモリの消費量はそれぞれ以下のようになった。どうやらCSVの方が、メモリ消費量が1/5で済むようだ。
折角なので、TableauやPrepを使う際のPCスペックについて少し考えてみる。処理するデータ量にもよるが、TableauおよびPrepを使うならメモリは最低でも8GB、もしくは16GBあった方がよいというのが筆者の感想である。
単なる事務処理用だと、会社から4GBメモリのマシンが支給されるケースも多いだろう。だが今どきの一般的なWindows PCは、ただ起動するだけで2-4GB近くメモリを消費していたりするので大規模なデータを処理するだけの余裕が無い。見かけ上の数字に騙されてはいけない。(バックグラウンドアプリケーションや、画面の描画そのものが原因なため避けられない)
結論
〇Prepに読ませるファイルは、エクセルよりもCSVの方が相性が良い。もちろん.hyperの方が更に良いのは言うまでもない。
*CSVだとデータ保存がうまくいかない一部例外があるので注意
〇Tableauを扱うのであれば、最低8GB、できれば16GBのメモリを搭載したマシンが望ましい。Tableau使用時の処理能力の限界は概ねメモリで決まる。
*余談だが「PCの動作が遅い」というのは、メモリ不足なことがほとんどである。特にウェブブラウザやOutlook等、使っていないアプリケーションのひらっきぱなしは危険。ブラウザのタブ1つにつき、数十MBを消費するのでさっさと閉じてしまおう。
ちなみに
ここまで書いておいて何だが、そもそも「Ad hoc分析ならデータベースとTableauを直結して直接抽出を作った方が早かった説」が提唱されている。
更に、これだけ頑張って処理した700万行の可視化からは某調査兵団ばりに何の成果も得られなかったことも記しておく。思ったような相関が見いだせず、エクセルでは作れない散布図を一つ作っただけになってしまった。可視化や分析をやったからといって、成果が出るとは限らない。南無。
ただ、その結果この小ネタを執筆できたので良しとしよう。
気軽にクリエイターの支援と、記事のオススメができます!