今までのお仕事履歴 & まったりお仕事募集中♪

【質の良い無料コンテンツ紹介】

【ブラックレーベル】謎解き特集!【SCRAPゲームブック】

【通信制大学】産業能率大学に三年次編入しました

【悲報】ジュニアNISAで、買い付け口座を間違えていた話【NISA預りと特定預りは違うのよ】

当サイトではアフィリエイト広告を利用して商品を紹介しています。

【AWS】QuickSightで簡易リアルタイム表示を行う(実践向け)

AWS

QuickSightは手軽にデータを可視化できるBIツールである。

その反面、BIツールと優秀すぎる(?)分、簡易的にリアルタイムなデータを表示したい! と言った時に、使えない不便なツールである。

やったことのある方ならご理解いただけるだろうが、S3にあるCSVファイルの読み込みまでは手軽に出来るのだが、S3に新たにCSVファイルがアップロードされた場合に検知する方法や、それを検知して勝手に更新といったものはQuickSight自体にはない機能なのだ。

データセットの自動更新はQuickSight機能としてあるが、最短でも毎時更新しかない。そのため、それ以下の頻度で更新したい場合などはLambdaで自力実装するしかない。

また、CSVファイルも1000ファイルまでしか読み込んでくれず、現在進行形で行われているデータ収集表示ツールとしては相性が悪く、使い勝手が悪い。

QuickSightはBIツール、解析ツールであって、リアルタイム表示ツールではないのよ……用途が違うのだから仕方ないじゃない……と思いつつ、簡易的に使うにはとても便利なQuickSight。

と、言うワケでQuickSightにてなるたけ簡単に、そこそこのリアルタイム表示に対応したページの作り方をご紹介する。

一切手を触れんでも本格的なリアルタイム表示画面を作りたい場合は「OpenSearch」を利用しよう(当方は使ったことないから詳しいことは知らんけど)

前置き

前提条件

  • QuickSightで、S3辺りからデータを読み込み表示画面を作ったことのある人前提(知識)
  • SQL操作が分かると尚良い(知識)
  • S3に、表示するCSVデータがあること前提(物理)

とする。

QuickSightで、S3辺りからデータを読み込み表示画面を作ったことのある人前提

細かいところは説明しない。

キモとなるところのみを本記事では説明する。一度でもQuickSightでデータ表示を行ったことのある人なら理解できるレベルかと思う。

S3に表示するCSVデータがあることを前提

S3に表示するCSVデータがあること前提とする。

IoTCoreで収集したデータや、CSVファイルを直接アップロードして試してみよう。

JSONデータならあるけど……と言う人は、下記の方でCSVに変換するなり、日付型がなければCSVをJSONに読み替えて、本記事の内容を試してみても良いかもしれない。

JSON(JSONL)でも大体方法は同じだが、timestamp型で読み込む日付がselectできない問題があった。

こんな感じのものが出来上がるよ

S3内のファイルが更新され、かつ、QuickSightでのページ更新がかかれば、データの表示更新が行われる程度のリアルタイム表示画面が作成できる。

QuickSightでの更新のたびに、AthenaのSQLを都度実行することで実現する。

データ量にもよるだろうが、Athenaの料金はそこまで高くないので微々たる金額で済む。

コスト的なところは自分でも試して欲しいが、PoCレベルなら微々たる金額だと思ってもらえば良い。

こんな手順で作成します

  • Athenaで、QuickSightで利用したいデータの、データベースとテーブルを作成する
  • Athenaで、期待通りのデータが表示(select)できるかテスト
  • QuickSightで、上記のselect文を参考に最新データを取り込むSQLを更新のたびに実行するように設定する

「Athena」での操作

①Athenaからクエリエディタを開き、テーブルとビュー横にある「作成」から「S3バケットデータ」を選択する

②S3バケットデータからテーブルを作成するための画面が出てくるので、赤枠部分を適宜入力する。なお、データベースについては既存のものを利用するカタチでも構わない。

③入力データセットは、QuickSightで取り込みたいデータが保存されているフォルダを選択し、ファイル形式を「CSV」とする。(JSONの場合は「JSON」にする)

④取り込むデータの列名、タイプを全項目分指定し、一番下にある「テーブル作成」ボタンを押す。

⑤テーブルが作成される。作成されたテーブルの「…」より「テーブルをプレビュー」を選択すると10件のデータのselect文が自動生成されて、実行されるのでこれでデータが取り込めていればとりあえずOK。

ヘッダ付きだと、各ファイルにあるヘッダごと読み込まれてしまうが、日付等でソートすれば支障ないはずである(ヘッダ取り除ける方法あるなら教えて!!!)

QuickSightに取り込む際のSQLを少々加工したい人は、ここでSELECT文を改造して色々と試してみると良い。本記事では、最新データから取り込むSELECT文でQuickSightに取り込む方法をご紹介する。

「QuickSight」での操作

データセット作成

①データセット作成にて「Athena」を選択し、データソースを作成する

②「カスタムSQLを使用」を選択

③適当な名称を入力し(これがデータセット名になる)、最新のデータを引っ張ってくるSQL文を張り付けて、「クエリの確認」を押す

SELECT * FROM "csv_database_221209"."athena_csv_read_221209" 
where date
BETWEEN CAST('2022-12-01 00:00:00' as timestamp)
AND (CURRENT_TIMESTAMP AT TIME ZONE 'Asia/Tokyo')  + interval '9' hour
order by date desc;

SQLは適当に読み替えて、使用して貰えればと思う。

(Athenaだからなのか分からんが)日付の扱いが大変苦労した。恐らく、UTC絡みなんだろうが。タイムゾーン指定しても正確な日付範囲でSQLできなかったので、自力でマイナス9時間してJSTにしている感じだ(あまり良くはない)

④想定したデータが表示されているか確認し、「保存」ボタンを押す。
 あとはそのデータセットを使って、煮るなり焼くなりしてくれ。

更新やタブ切り替えのたびに、最新データを表示するようにする

「分析」画面の「設定」、更新のオプションをONにして、適用すると幸せになれるかもしれない。

少々未検証なところがあるので、あくまでも参考まで。

まとめ:簡易リアルタイム表示は意外とめんどくさい

QuickSightは分析向けのツールなのだから仕方ないと思いつつ、もう少しこの辺使い勝手よくならないかなぁ、と思う。

QuickSight自体、日々進化しているので、その辺りの機能をいつか有してくれると信じている。

ではでは、この辺で!

コメント