Amazon QuickSightのSPICEデータセットのデータ容量をサイジングしてみた

QuickSightのSPICE(Super-fast, Parallel, In-Memory Calculation Engine)データセットの容量を見積もる計算式があります。実際にデータを投入し、確認してみました。
2021.06.02

はじめに

データアナリティクス事業本部の藤川です。
QuickSightを使用していて気になるのがSPICE(Super-fast, Parallel, In-Memory Calculation Engine)データセットの容量です。 料金表にSPICEの容量に応じて課金されるとありますが、どのくらいのデータ容量を見込んでおけば良いのでしょうか?
SPICEデータセットの容量を見積もる計算式がありましたので、実際にデータを投入し、確認してみました。サイジングする際のご参考にしてください。

計算方法

QuickSightで取り扱えるデータ型

まず始めにQuickSightで取り扱えるデータ型についてです。大きく分けて、次の3種類です。
※参考:サポートされているデータ型と値 - Amazon QuickSight

  • 日付(Date)
  • 10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる)
  • 文字列(String)

計算方法

データ型ごとに、専有するデータ容量が異なります。各カラムのデータ容量から、1レコードに必要なデータ容量が求まります。これにデータ件数を掛けるだけです。
※参考:SPICE データセットの容量計画 - Amazon QuickSight

データ型 データ容量
日付(Date) 8バイト
10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる) 8バイト
文字列(String) 8バイト + UTF-8の文字長
Total logical row size in bytes =
   (Number of Numeric Fields *  8 bytes per field)
 + (Number of Date Fields    *  8 bytes per field)
 + (Number of Text Fields    * (8 bytes + UTF-8 encoded character length per field) )

Total bytes of data = Number of rows * Total logical row size in bytes

GB of SPICE Capacity Needed = Total bytes of data / 1,073,741,824

やってみた

それでは、実際にCSVファイルを用いて、SPICE容量を見積もってみましょう。

CSVファイル

用意したCSVファイルは、国土交通省の位置参照情報です。 Athena等に取り込みやすいよう、文字コードをShift-JISからUTF-8に変換しています。

項目
ファイルサイズ 4,662,856バイト(約4.5MB)
レコード件数 19,600,780行

CSVファイルのヘッダーは次の通りです。

"都道府県名","市区町村名","大字・丁目名","小字・通称名","街区符号・地番","座標系番号","X座標","Y座標","緯度","経度","住居表示フラグ","代表フラグ","更新前履歴フラグ","更新後履歴フラグ"

テーブル(Athena)

Glueデータカタログを使用し、CSVファイルをAthenaに取り込みました。テーブル定義は、Glueが自動で定義したものです。
また、各カラムに入っている文字列データの最大文字長について確認しました。

カラム名 都道府県名 市区町村名 大字・丁目名 小字・通称名 街区符号・地番 座標系番号 X座標 Y座標 緯度 経度 住居表示フラグ 代表フラグ 更新前履歴フラグ 更新後履歴フラグ
データ型 string string string string string bigint double double double double bigint bigint bigint bigint
最大文字長 4文字 10文字 14文字 10文字 8文字 - - - - - - - - -

データセット(SPICE)

QuickSightの画面に表示されるSPICEデータセットのデータ容量とレコード件数です。

項目
データ容量 約4.8GB
レコード件数 19,600,780行

計算してみた

UTF-8の文字長以外

データ型ごとに何カラムあるか表にまとめました。一番右の列が1レコードごとに必要なデータ容量です。
ここでは、UTF-8の文字長以外で、1レコード当たり112バイト必要ということが分かります。

データ型 データ容量 数量 合計
日付(Date) 8バイト なし 0バイト
10進数(Decimal)、整数(Integer)、Boolean(数値として扱われる) 8バイト 9カラム 72バイト
文字列(String) 8バイト + UTF-8の文字長 5カラム 40バイト + UTF-8の文字長

UTF-8の文字長

UTF-8の文字長は、前掲の表から抜粋しました。ここでは、合計46文字ですが、バイト数ではないことに注意してください。
ダブルバイトの文字列の場合、UTF-8の文字長は3バイトとして見積もっておきます。
46文字は3倍の138バイトとなります。

カラム名 都道府県名 市区町村名 大字・丁目名 小字・通称名 街区符号・地番
最大文字長 4文字 10文字 14文字 10文字 8文字

合計

UTF-8の文字長以外(112バイト)とUTF-8の文字長(138バイト)を合計し、1レコード当たり250バイト必要ということが分かります。 これに、レコード件数(19,600,780行)を掛けて、GB単位に変換すると、SPICE容量が約4.56GB必要という見積値が得られます。

250バイト/行 x 19,600,780行 = 約4.56GB

先ほど、UTF-8の文字長3バイトと仮定し、見積もっていますので、多少誤差が出ているのではないかと思われます。

さいごに

SPICEはとにかく高速です。データソースに対し、無駄なスキャンが走ることを抑えることで、AWS利用料の削減を期待できます。 一方で、SPICEの容量は制限があります。SPICEデータセットの容量計画をしておくことで、QuickSightを最大限のパフォーマンスで利用できるようになるでしょう。
※参考:データソースクォータ - Amazon QuickSight

合わせて読みたい