Tesla のデータをAPI経由で定期的に Google BigQueryに連携し分析できるようにする:CDataSync
前回の記事で Tesla API の Mock Serverを作ったんですが、作っただけじゃツマラナイので色々と妄想を膨らませて、試してみようと思います。
先の記事でも解説しているんですが、Tesla API はおよそ200項目におよぶ大量の車両データ・センサーデータを取得することができます。
バッテリーのチャージ状況から、シートヒーターの稼働、近くの充電サイトまで取得することができます。
なので、このデータを使って、BIツールで分析したいな! というのが最初の狙いでした。
分析を行うために Tesla API の難しいところ
さて、前述の通り Tesla は豊富なデータをAPI経由で取得できるのですが、ちょっとむずかしい部分もあります。
実はこのAPIでは Tesla の「今」の状態しか取得できず、どういう状態を辿ったのか? という経過データは取得できません。
なので、実際にこの Tesla がどのように使われていて、バッテリーの消費量経過や1ヶ月にどの頻度で動かしていて、どの頻度で充電しているのか? といった情報はその「今」のデータをDWHやRDBといった外部にレプリケートして、分析する必要があります。
なので、CDataで提供しているデータレプリケート製品である「CDataSync」を利用して、Google BigQuery へ定期的にデータを連携するアプローチを試してみました。
こんな風にできた
最終的に Tesla API と BigQuery・CDataSync を組み合わせて、以下のように実行できました。
CDataSync(https://t.co/1kxHnVpW2B) で Tesla API のデータをBigQueryに定期的に吐き出し!
— Kazuya Sugimoto @CData Software Japan (@sugimomoto) 2020年1月21日
Tesla APIはその時の情報しか取れないので、これで、1分間隔とかでデータをDWHに吐き出せば、経過データとして分析ができる!
残念ながらダミーデータだけどな! pic.twitter.com/mYyeq0w3ul
この動画を撮った時は手動で何回か実行していますが、するするとBigQueryにデータが反映されていることがわかるかと思います。
これで、1分間隔とかでデータをレプリケートすれば、Tesla がどんな変化を辿ったのかを分析できるという寸法です。
必要なもの
それでは具体的な手順を解説していきます。
- Google BigQuery・Data Portalが利用可能な GCPアカウント
- Tesla もしくは Tesla Mock API(https://orgopenapitools20200118014702.azurewebsites.net/swagger/index.html)
- CData Sync
残念ながら、私は Tesla を持っていないので、今回は Tesla の Mock API を利用しています。ただ、設定ファイルを調整すれば、接続は問題ないはずです。もし実際に本番データにアクセスしてみたい方が居ましたら、私のTwitterアカウントなどにDMください。
https://orgopenapitools20200118014702.azurewebsites.net/swagger/index.html
REST データ処理用 RSDファイルの作成
まず、Tesla API を CDataSync で利用できるようにするための設定ファイルを作成します。
この設定ファイルは私がすでに作成してしまっているので、以下のGitHubから保存してください。
https://github.com/sugimomoto/CData.REST.Tesla
保存先フォルダは後ほど使用するので「C:\CData_REST\Tesla」といった書き込み可能な任意のフォルダに配置してください。
Google BigQuery の準備
まずは、データの格納先となる Google BigQueryのプロジェクトとデータセットを構成しておきます。
なお、今回はあらかじめ専用のアカウントを作って対応しています。
手順は特に難しくありません。GCPの管理コンソールへ移動し、新しいプロジェクトを作成
BigQuery に移動し、プロジェクト配下にデータセットを作っておきます。ここに連携結果がテーブルとして格納されます。
以上で BigQuery 側の準備は完了です。
CDataSyncのインストール
それでは、取得した情報を元にCDataSyncの設定を行っていきましょう。
CDataSyncはインストール型のソフトウェアなので、以下のURLからダウンロードして、任意のPCでセットアップを行います。
https://www.cdata.com/jp/sync/
セットアップ後、CData Syncの画面がブラウザで立ち上がるので、セットアップ時に入力したパスワードとユーザー名「admin」を入力して、ログインします。
ログイン後「情報」タブに移動し、「30日間の評価版をアクティベート」を行えば、CDataSyncの初期設定は完了です。
REST データソースの設定
まずはデータのSyncを行うためのデータソースの設定を行っていきましょう。
CDataSyncでは任意のデータソースを自由に追加して、連携することが可能です。
今回は汎用的なREST データソースを使います。デフォルトでは REST データソースが含まれていないため、「接続」に移動し「+ Add More」をクリックし、追加を行います。
一覧の中から「REST」を検索し、追加します。
追加後、CDataSyncが再起動します。再起動後、データソースの一覧から「REST」が選択できるようになるので、これを選択し接続設定を行います。
接続設定では、「接続文字列」を選択して、以下の項目をセットし、保存します。
- Location=C:\CData_REST\Tesla;User=tesla@sample.com;password=hogehoge;other="client_id=1234;client_secret=abcd;VehicleId=1111";
User・PasswordはTeslaにログインする時に利用するアカウントを設定します。ClientIdとClientSecretはこちらから取得してください。
VehicleIdは分析したい対象のTesla車両IDを指定します。
BigQueryへの同期先設定
続いて、同期先となるBigQueryへの接続を構成します。
「接続」→「同期先」から「Google BigQuery」を選択し
あらかじめ作成しておいた、「ProjectId」と「Dataset Id」を入力し、「接続」をクリックします。
クリックすると、OAuthの認証プロセスが開始されますので、対象アカウントでログインし、アクセス許可を承認してください。承認後、設定を保存すれば準備完了です。
ジョブの作成
それでは実際にジョブを作成し、データをBigQueryに連携してみましょう。
ジョブのタブから「ジョブを作成」をクリックし
事前に構成した「Tesla」と「BigQuery」を、ソースと同期先としてそれぞれ構成します。
次に連携するデータを決定するために、「テーブルを追加」をクリックし
Tesla の車両データは「VehicleData」というテーブルにすべて格納されているので、このテーブルを取得するクエリを記述します。(例:CACHE [VehicleDataLogs] SELECT * FROM [VehicleData])
最後にスケジュールタブから定期的に処理にするためにスケジューラーを設定します。
Run jobから「Advanced」を選択し、Cron式で定期実行間隔を指定します。今回はとりあえず1分毎の実行として「 * * * 」を指定しました。
後は設定を保存すれば、完了です。
テスト実行
テスト実行はテーブルタブから対象となるクエリを選択し、「実行」ボタンをクリックすることで実施可能です。
正常に同期されると、以下のようにBigQuery上でデータが閲覧できるようになります。
Google Data Portal でビジュアライズ
あとはBigQueryが接続できるBIツール・サービスであれば、そのまま分析ができるようになります。
例えばGCPのサービスで提供されている Google Data Portalの場合
Google Data Portalのトップ画面にアクセスし、空のレポートを作成し
新しいデータソースの作成から
BigQueryに接続します。
最初、データ接続の承認が必要なので、承認処理を実施し
連携されたテーブルを選択
あとは「レポートに追加」をクリックすればOKです。
これで Google Data Portal の機能を使って、分析・可視化を行うことができます。
ただ、残念ながら Mock API が返すデータが全部同じなので、分析しがいはありません・・・泣
さいごに
こんなことを試していると、どんどん Tesla を買わないといけないんじゃないかという衝動に駆られます。