QuickSight で計算フィールドを追加すると SPICE 取り込みがスキップされる
QuickSight では、データにエラーがあると SPICE 取り込みがスキップされます。
例えば、以下のサンプルファイルを準備します。本サンプルでは、ヘッダーを除く 2 行目のタイムスタンプの値が "blank" という文字列になっています。
UserName,TimeStamp
Takara,2025-05-18 20:00:00
Satou,blank
Onishi,2025-07-02 02:00:00
Nagayama,2025-04-22 09:00:00
QuickSight データセット作成の画面から上記ファイルをアップロードし、データセット編集画面から右上の「保存して公開」を選びます。
すると、サンプルデータの 2 行目がスキップされたデータセットがプレビューされます。
データセットの詳細画面の更新タブを確認すると、SPICEに正常に取り込まれた行数が 3 つ, エラーのためスキップされた行が 1 つあることがわかります。
※赤枠内の項目が見切れていますが、それぞれ「スキップされた行」「取り込まれた行」の項目です
スキップされた行の詳細については、同画面の「ステータス」のリンクを選択すると表示ができます。
エラー詳細画面より、行がスキップされた理由は、日付型フィールドである TimeStamp 列に日付形式ではない値がセットされていることが原因でした。また、どの行がスキップされたのかについては、「エラー行ファイルをダウンロード」より、確認ができます。
ダウンロードしたエラーレポートの中身には、以下のようにエラーとなった行およびその理由が記載されています。
今回は MALFORMED_DATE と記載があり、これは日付形式が誤っているとのエラーです。
ERROR_TYPE,COLUMN_NAME,UserName,TimeStamp
MALFORMED_DATE,TimeStamp,Satou,blank
なお、今回の "MALFORMED_DATE" のようなスキップされた行のエラーコードについては下記公式ドキュメントに記載がありますため、ご参照ください。
計算フィールドを追加したらスキップされる
先ほどはエラーレポートからスキップの理由が明確に示される例でしたが、本レポートがダウンロードできないパターンもあります。
例として、まずサンプルデータを 2 つ用意します。
データ自体に歯抜けや型の誤りはありません。
TeamId,TeamName
1-A,Bulls
1-B,Nets
1-C,Lakers
1-D,Magic
TeamId,StartTime
1-B,2025-05-18 20:00:00
1-D,2025-02-11 19:00:00
1-A,2025-07-02 02:00:00
1-B,2025-04-22 09:00:00
まず sample_data_1.csv をアップロードし、データ編集画面を表示します。
4行のレコードがきちんと読み込まれていることがわかります。
編集画面右上の「データを追加」より、sample_data_2.csv をアップロードします。
その後、TeamID フィールド同士で Full Join します。
すると以下のように 6 行のレコードがプレビューされます。これは、sample_data_1 と sample_data_2 で TeamId が 6 つ(1-A 〜 1-D, 2-A, 2-B)存在するためです。
続いて、以下の関数で計算フィールドを追加します。
extract('HH',addDateTime(9,'HH',{StartTime}))
addDateTime()
は日時に時間単位を加算(or減算)する関数、extract()
は日付の指定部分を抜き取る関数です。
上記のように関数を組み合わせると、前述の sample_data を結合したデータの StartTime フィールド値に 9 時間を加算し、その時の時間(hour)の値を抜き出すという意味合いになっています。
計算フィールドを追加した結果、以下のように 4 行のレコードがプレビューされ、2 行のレコード(1-A, 1-C)は表示されないことに気が付きます。
すなわち、計算フィールドを追加した途端、スキップ行が発生していることになります。
データセット詳細画面の更新タブを確認しても、2行がスキップされていることがわかります。
ステータスのリンクをクリックし、スキップされた理由を確認します。
しかし、エラー詳細を見ても「未定義の例外が発生した 2 行」とのみ記載されており、なぜスキップされたのかが把握できません。
また「エラー行ファイルをダウンロード」の部分もグレーアウトしており、スキップの理由については自分でトラブルシュートを行なっていく必要があります。
結合データに計算フィールドを追加するとスキップされた理由
スキップされた理由については、追加した extract 関数が正常に実施できない行があったためです。以下、検証していきます。
まず、スキップされた行は TeamId が 1-A, 1-C のものになります。
結合した時のデータを見ると、1-A, 1-C については、sample_data_2 に StartTime が存在せず、値が null になっていることがわかります。
前述のextract('HH',addDateTime(9,'HH',{StartTime}))
について、addDateTime()
のみを実行した計算フィールド (calc_add) を追加して動作確認してみます。
すると以下の通り、関数の計算結果も null となった calc_add フィールドが追加されます。
このフィールドに対し、extract()
を指定した計算フィールドを追加します。
その結果、1-A, 1-C の行がスキップされ、4行のみプレビューされました。
上記のような動作になる原因は、extract()
関数を値が null となっている行に対して実行しているためです。
extract()
は日付値の指定部分を返す関数になります。そのため、読み込む値が null などの日付値ではない場合、計算が正しく行われません。
QuickSight では計算フィールドに互換性のないデータが含まれている場合、その行をスキップするという特性があるため、その特性を理解した上で、データの持ち方や計算フィールドの関数の作り方を考える必要があります。
計算フィールドに、計算フィールドの関数と互換性がないデータやそこから除外されたデータではなく、計算と連動するデータが含まれていることを確認します。例えば、データセットに parseDate を使用している計算フィールドがある場合、QuickSight は、そのフィールドに有効な日付が含まれていなければ行をスキップします。
終わりに
今回は、QuickSight の SPICE 取り込みがスキップされる時のトラブルシュートをやってみました。
基本的には 公式ドキュメント にスキップ原因について記載がありますが、膨大なデータを結合したり、計算フィールドを追加していると、理由がわからないスキップに出会うこともあるかと思いましたため本記事を作成しました。
今回の内容が SPICE 取り込みに悩む方の一助になれば幸いです。
参考文献