0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SORACOM Harvest DataのデータをCSV形式で自動取得する(後編)

Posted at

概要

SORACOM Harvest DataのデータをCSVで取得するシリーズ最終回です。
前編では環境構築、中編ではTalend Open Studio(以降TOS)を使ったJSONデータダウンロードとPythonによるCSV変換を説明しましたので、最終回では自動実行する方法を説明します。
前編中編を読んでいない方は前編から順にお読みください。

前提

自動実行は常時起動のWindowsサーバーで実行することとします。
タスクスケジューラーを使い、1日前のデータを、午前0時経過後に実行することにします。

TOSの変更

TOSにはContext変数をいうものがあり、実行時にコマンドライン引数として渡すことが可能です。

これを使って日付が指定できるようにします。

対象日の指定

中編で作成したTOSのジョブにContext変数「ctx_date」を設定し、Valueに対象の日付をyyyy/MM/ddの形式で設定しておきます。
image.png

初期処理のfrom_strとto_strの指定方法を変更します。
image.png

String from_str = "2023/07/23 00:00:00";
String to_str = "2023/07/23 23:59:59";
    
String from_str = context.ctx_date + " 00:00:00";
String to_str = context.ctx_date + " 23:59:59";

保存先の指定

ついでに保存フォルダを指定できるようにして、ファイル名をharvest_data.jsonからharvest_data20230723.jsonのような名前で保存できるようにします。

  1. Context変数「ctx_folder」を設定し、Valueに保存先を設定しておきます。
    image.png
    ※ TOSのフォルダは\(円マークやバックスラッシュ)区切りではなく、/(スラッシュ)区切りで表記する必要があります。

  2. 初期処理の末尾にファイル名のグローバル変数セットを追加する。
    image.png

    // 保存ファイル名
    globalMap.put("file", context.ctx_folder + "harvest_data" + context.ctx_date.replace("/", "") + ".json");
    
  3. tFileOutputJSONのFile Nameを(String)globalMap.get("file")にする
    image.png

  4. ついでに、tFileOutputJSONはファイルが既にファイルが存在するとエラーになるため、初期処理の後にtFileDeleteを追加し、OnSubjobOkでつなぎなおす。

    • File Name:(String)globalMap.get("file")
    • Fail on error:オフ
      image.png

以上でTOSの修正完了です。

TOSの自動実行

実行モジュールの作成

  1. TOSのジョブを右クリックし、「Build Job」を選択する。
    image.png

  2. 「Finish」をクリックする。
    image.png

自動実行設定

ここからは実際にジョブを自動実行する常時起動のサーバー上の作業となります。
サーバーにはJDKPython(pandas)のインストールを行っておいてください。
※ TOSのインストールは不要です

バッチファイルに処理を追加

実行モジュールの作成で作ったZIPファイルを任意のフォルダに展開し、「HarvestData」の中にあるバッチファイル「HarvestData_run.bat」を以下の通り編集(赤字部を追記・緑字は説明文)する。

%~d0
cd %~dp0

昨日の日付を取得
for /f %%i in ('powershell -Command "& {$yesterday = (Get-Date).AddDays(-1); $yesterday.ToString('yyyy/MM/dd')}"') do set YESTERDAY=%%i

対象日と保存先フォルダをContext変数として追記
java -Dtalend.component.manager.m2.repository="%cd%/../lib" -Xms256M -Xmx1024M (略) local_project.harvestdata_0_1.HarvestData --context=Default %* --context_param ctx_date=%YESTERDAY% --context_param ctx_folder=(ファイルの保存フォルダ)

JSON→CSVの変換
set YYYYMMDD=%YESTERDAY:/=%
python C:\work\tos\soracom_json_csv.py (ファイルの保存フォルダ)harvest_data%YYYYMMDD%.json

※ ファイルの保存フォルダは\(円マークやバックスラッシュ)区切りではなく、/(スラッシュ)区切りで表記する必要があります。

タスク設定

編集したバッチファイル「HarvestData_run.bat」の実行を登録する。

  1. タスクスケジューラを起動し、「タスクの作成」をクリックする。
    image.png
  2. 名前に「HarvestData」を入力し、「ユーザーがログオンしているかどうかにかかわらず実行する」を選択し、「最上位の特権で実行する」を選択する。
    image.png
  3. 「トリガー」を選択し、「新規」をクリックする。
    image.png
  4. 「毎日」を選択し、実行する時刻を指定し、「OK」をクリックする。
    image.png
  5. 「操作」を選択し、「新規」をクリックする。
    image.png
  6. プログラム/スクリプトで「HarvestData_run.bat」のパスを指定し、「OK」をクリックする。
    image.png
  7. 「OK」をクリックすると、パスワードを求められるのでパソコンのログインパスワードを入力し、「OK」をクリックする。
    image.png
    image.png

以上で自動実行の設定完了です。

おわりに

当初考えていた以上の大作となってしまいました。
馴染みのない方には難しい内容になってしまったと反省していますが、どなたかのお役に立てたら幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?