Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Tesla のデータをAPI経由で定期的に Google BigQueryに連携し分析できるようにする:CDataSync

前回の記事で Tesla API の Mock Serverを作ったんですが、作っただけじゃツマラナイので色々と妄想を膨らませて、試してみようと思います。

kageura.hatenadiary.jp

f:id:sugimomoto:20200121114916p:plain

先の記事でも解説しているんですが、Tesla API はおよそ200項目におよぶ大量の車両データ・センサーデータを取得することができます。

バッテリーのチャージ状況から、シートヒーターの稼働、近くの充電サイトまで取得することができます。

なので、このデータを使って、BIツールで分析したいな! というのが最初の狙いでした。

分析を行うために Tesla API の難しいところ

さて、前述の通り Tesla は豊富なデータをAPI経由で取得できるのですが、ちょっとむずかしい部分もあります。

f:id:sugimomoto:20200121114519p:plain

実はこのAPIでは Tesla の「今」の状態しか取得できず、どういう状態を辿ったのか? という経過データは取得できません。

なので、実際にこの Tesla がどのように使われていて、バッテリーの消費量経過や1ヶ月にどの頻度で動かしていて、どの頻度で充電しているのか? といった情報はその「今」のデータをDWHやRDBといった外部にレプリケートして、分析する必要があります。

なので、CDataで提供しているデータレプリケート製品である「CDataSync」を利用して、Google BigQuery へ定期的にデータを連携するアプローチを試してみました。

f:id:sugimomoto:20200121114526p:plain

こんな風にできた

最終的に Tesla API と BigQuery・CDataSync を組み合わせて、以下のように実行できました。

この動画を撮った時は手動で何回か実行していますが、するするとBigQueryにデータが反映されていることがわかるかと思います。

これで、1分間隔とかでデータをレプリケートすれば、Tesla がどんな変化を辿ったのかを分析できるという寸法です。

必要なもの

それでは具体的な手順を解説していきます。

残念ながら、私は 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

f:id:sugimomoto:20200121114536p:plain

保存先フォルダは後ほど使用するので「C:\CData_REST\Tesla」といった書き込み可能な任意のフォルダに配置してください。

Google BigQuery の準備

まずは、データの格納先となる Google BigQueryのプロジェクトとデータセットを構成しておきます。

なお、今回はあらかじめ専用のアカウントを作って対応しています。

手順は特に難しくありません。GCPの管理コンソールへ移動し、新しいプロジェクトを作成

f:id:sugimomoto:20200121114542p:plain

BigQuery に移動し、プロジェクト配下にデータセットを作っておきます。ここに連携結果がテーブルとして格納されます。

f:id:sugimomoto:20200121114547p:plain

以上で BigQuery 側の準備は完了です。

CDataSyncのインストール

それでは、取得した情報を元にCDataSyncの設定を行っていきましょう。

CDataSyncはインストール型のソフトウェアなので、以下のURLからダウンロードして、任意のPCでセットアップを行います。

https://www.cdata.com/jp/sync/

f:id:sugimomoto:20200121225431p:plain

セットアップ後、CData Syncの画面がブラウザで立ち上がるので、セットアップ時に入力したパスワードとユーザー名「admin」を入力して、ログインします。

f:id:sugimomoto:20200121114600p:plain

ログイン後「情報」タブに移動し、「30日間の評価版をアクティベート」を行えば、CDataSyncの初期設定は完了です。

f:id:sugimomoto:20200121114606p:plain

REST データソースの設定

まずはデータのSyncを行うためのデータソースの設定を行っていきましょう。

CDataSyncでは任意のデータソースを自由に追加して、連携することが可能です。

今回は汎用的なREST データソースを使います。デフォルトでは REST データソースが含まれていないため、「接続」に移動し「+ Add More」をクリックし、追加を行います。

f:id:sugimomoto:20200121114612p:plain

f:id:sugimomoto:20200121114617p:plain

一覧の中から「REST」を検索し、追加します。

f:id:sugimomoto:20200121114622p:plain

追加後、CDataSyncが再起動します。再起動後、データソースの一覧から「REST」が選択できるようになるので、これを選択し接続設定を行います。

f:id:sugimomoto:20200121114626p:plain

接続設定では、「接続文字列」を選択して、以下の項目をセットし、保存します。

  • 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を指定します。

f:id:sugimomoto:20200121114635p:plain

BigQueryへの同期先設定

続いて、同期先となるBigQueryへの接続を構成します。

「接続」→「同期先」から「Google BigQuery」を選択し

f:id:sugimomoto:20200121114642p:plain

あらかじめ作成しておいた、「ProjectId」と「Dataset Id」を入力し、「接続」をクリックします。

クリックすると、OAuthの認証プロセスが開始されますので、対象アカウントでログインし、アクセス許可を承認してください。承認後、設定を保存すれば準備完了です。

f:id:sugimomoto:20200121114648p:plain

ジョブの作成

それでは実際にジョブを作成し、データをBigQueryに連携してみましょう。

ジョブのタブから「ジョブを作成」をクリックし

f:id:sugimomoto:20200121114653p:plain

事前に構成した「Tesla」と「BigQuery」を、ソースと同期先としてそれぞれ構成します。

f:id:sugimomoto:20200121114701p:plain

次に連携するデータを決定するために、「テーブルを追加」をクリックし

f:id:sugimomoto:20200121225043p:plain

Tesla の車両データは「VehicleData」というテーブルにすべて格納されているので、このテーブルを取得するクエリを記述します。(例:CACHE [VehicleDataLogs] SELECT * FROM [VehicleData])

f:id:sugimomoto:20200121225105p:plain

最後にスケジュールタブから定期的に処理にするためにスケジューラーを設定します。

Run jobから「Advanced」を選択し、Cron式で定期実行間隔を指定します。今回はとりあえず1分毎の実行として「 * * * 」を指定しました。

f:id:sugimomoto:20200121114721p:plain

後は設定を保存すれば、完了です。

テスト実行

テスト実行はテーブルタブから対象となるクエリを選択し、「実行」ボタンをクリックすることで実施可能です。

f:id:sugimomoto:20200121225157p:plain

正常に同期されると、以下のようにBigQuery上でデータが閲覧できるようになります。

f:id:sugimomoto:20200121224954p:plain

f:id:sugimomoto:20200121224915p:plain

Google Data Portal でビジュアライズ

あとはBigQueryが接続できるBIツール・サービスであれば、そのまま分析ができるようになります。

例えばGCPのサービスで提供されている Google Data Portalの場合

Google Data Portalのトップ画面にアクセスし、空のレポートを作成し

f:id:sugimomoto:20200121114736p:plain

新しいデータソースの作成から

f:id:sugimomoto:20200121114757p:plain

BigQueryに接続します。

f:id:sugimomoto:20200121114803p:plain

最初、データ接続の承認が必要なので、承認処理を実施し

f:id:sugimomoto:20200121114809p:plain

連携されたテーブルを選択

f:id:sugimomoto:20200121114814p:plain

あとは「レポートに追加」をクリックすればOKです。

f:id:sugimomoto:20200121114820p:plain

これで Google Data Portal の機能を使って、分析・可視化を行うことができます。

ただ、残念ながら Mock API が返すデータが全部同じなので、分析しがいはありません・・・泣

さいごに

こんなことを試していると、どんどん Tesla を買わないといけないんじゃないかという衝動に駆られます。