Chap3

Chapter03 DataSpider実践Tips

DataSpider Tips 18選

 Chapter03では処理フローの作成方法やマッピングのテクニック、運用の手順など、さまざまなTipsを紹介していきます。開発時や運用時に「こういうことをしたいけれど、どの機能を使ったらいいかわからない」というときにこのページを開いてみてください。
 この章ではDataSpiderの基本的な機能や操作の説明は省いています。そのため、はじめてDataSpiderを使う方は、まずChapter02の「2.3 準備編② DataSpiderの基本操作」(P.38~50)をお読みいただき、基本操作を理解したあとで、このTipsにトライすることをお薦めします。

Tips01データの行と列を入れ替える
データの横軸と縦軸を入れ替える処理
Tips02区切り文字で区切られた文字列を抜き出す
特定の区切り文字で1カラムの値を複数カラムに区切って抜き出す処理
Tips03入力データが数値かどうか判定する
入力値が期待した値かどうかを判定し、期待値と異なる場合はエラーログを出力する処理
Tips04月末の日付を取得する
指定した月の翌月末日を取得する処理
Tips05改行文字を別の文字列に置換する
文字を連結する処理で片方にNULLが入った場合にも値を出力する処理
Tips06文字とnull値を連結する
NULLと値を連結した際に値を返す処理
Tips07エラー発生時にメール送信
処理にエラーが発生したかどうかを検知して、エラーの場合にはメール通知する処理
Tips08日付のフォーマットを変換する
標準の日付フォーマットを任意の日付フォーマットに変換する処理
Tips09複数の入力データをマージする
複数の入力されたデータを、キーをもとにマージして1つのデータとして出力する処理
Tips10処理をバッチ実行する(ScriptRunner)
ScriptRunnerを使ってDataSpiderのスクリプトを外部からバッチ実行する方法
Tips11環境の移行
DataSpiderの環境がテスト/本番と異なるサーバの場合の環境移行機能の使い方
Tips121つの入力データを複数ファイルに仕分けする
入力データを、キーをもとに複数のファイルに仕分けして出力する処理
Tips13ユーザ定義ロジックアイコンの作成
Mapperの関数を組み合わせてユーザー定義関数を作成する手順
Tips14ファイル一覧の取得
ディレクトリに存在するファイル名の一覧取得方法
Tips15処理の戻り値をセットする
処理の呼び出し元に任意の戻り値を返す方法
Tips16固定長ファイルの扱い方
固定長ファイルの読み取り定義方法
Tips17コードを名称に置き換える
入力されたコードをマスターテーブルの値を参照して名称に置換する処理
Tips18連携対象ディレクトリをマウントする
DataSpiderファイルシステムへのマウント設定の方法

Tips01 データの行と列を入れ替える

 入力データの行と列を入れ替える処理の作り方を紹介します。たとえば、下の処理前のデータのように横に時系列で値を持つデータの行/列を入れ替えて、縦に時系列で値を持つ形に変換することができます。

処理のイメージ

使う機能

  • 行列の入れ替え……[デザイナ]→[ツールパレット]→[変換]→[TransposeConverter]→[行列の入れ替え]

サンプルスクリプト

 入力されたExcelデータ「時系列売り上げ_横」をCSVファイル「時系列売り上げ_縦」に出力する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_1」を新規に作成します。

  • 2

     [シートから読み取り]アイコンをキャンパスに貼り付けて、入力元のExcelシート「時系列売り上げ」からデータを読み取る処理を作成します。

    • シートから読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[Excel]→[シートから読み取り]

  • 3

     [行列の入れ替え]アイコンをキャンパスに貼り付けて、「時系列売り上げ_横」を「入力データ」に指定します。

    • 行列の入れ替え……[デザイナ]→[ツールパレット]→[変換]→[TransposeConverter]→[行列の入れ替え]

  • 4

     [CSVファイル書き込み]アイコンをキャンパスに貼り付けて、CSVへの書き込み処理を指定します。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 5

    フローを完成させて処理を実行します。最初に紹介した「処理のイメージ」と同じデータが出力されていれば成功です。

Tips02 区切り文字で区切られた文字列を抜き出す

 DataSpiderでは、メールアダプタで受信した添付ファイル名やLotus Domino/Notesアダプタで抽出した添付ファイル名は1カラムにカンマで区切られたデータとして出力されます。個々の添付ファイル名を取り出して処理を行なう際には、カンマで区切られたファイル名を個々に抜き出す必要があります。そこで、このTipsでは区切り文字で区切られた文字列を抜き出す方法を紹介します。

処理のイメージ


セミコロンで区切られたデータをそれぞれ抜き出して出力した処理のイメージ

使う機能

  • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[処理]→[変数代入]
  • 繰り返し(条件指定) ……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(条件指定)]
  • CSVファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル読み取り]

サンプルスクリプト

 CSVファイル中に、「;(セミコロン)」で区切られたデータが格納されています。はじめにこのデータを抽出して変数に代入し、次にセミコロンの位置で値を区切ってデータを個々に抜き出し、最後に別の変数に代入する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_2」を新規に作成し、次のように区切り文字データを格納するスクリプト変数「対象データ」と、結果確認用のスクリプト変数「結果表示用」を作成します。

  • 2

     [CSVファイル読み取り]アイコンをキャンパスに貼り付けて、セミコロン区切りのデータを持つCSV形式の入力データ「TIPS_02入力データ.csv」を読み取る処理を作成します。

    • CSVファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル読み取り]

  • 3

     [変数代入]アイコンをキャンパスに貼り付け、変数に「対象データを変数に代入」という名前を付けます。名前を付けたら、変数Mapperを開き、後続の処理を作りやすくするため、2で抽出したデータの末尾にセミコロンを結合して、結合した値を変数「対象データ」に代入します。

    • 変数代入……[デザイナ]→[基本]→[処理]→[変数代入]
    • 単一行文字列定数……[変数代入]→[ツールパレット]→[文字列]→[基本]→[単一行文字列定数]
    • 連結……[変数代入]→[ツールパレット]→[文字列]→[演算]→[連結]

  • 4

    3で代入した変数「対象データ」の値を繰り返し、セミコロンで区切って値を取り出す処理を作成するため、[繰り返し(条件指定)]アイコンをキャンパスに貼り付けます。条件式は対象データがなくなるまで繰り返すように「変数 対象データが " と等しくない」に設定します。

    • 繰り返し(条件指定)……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(条件指定)」

  • 5

    1つ目のセミコロンより前の値を取り出す処理を作ります。[変数代入]アイコンをキャンパスに貼り付け、名前を「区切り文字より前のデータを結果表示用変数に代入」と指定します。名前を変更したら、アイコンをダブルクリックして変数Mapperを開きます。

  • 6

    区切り文字「セミコロン」より前のデータを取り出し、結果データを表示するためのスクリプト変数「結果表示用」に代入します。最初のループでは一番左のセミコロンより前の文字列が取り出されます。

    • 指定文字より前……[変数代入]→[ツールパレット]→[文字列]→[関数]→[指定文字より前]

  • 7

    次のループで利用する値を作るための[変数代入]アイコンをキャンパスに貼り付け、名前を「区切り文字より後のデータを対象データに代入」と指定します。

  • 8

    1回目のループで抽出したデータ以外を次のループの処理対象とするため、セミコロンより右を抜き出して変数「対象データ」に代入します。

    • 指定文字より後……[変数代入]→[ツールパレット]→[文字列]→[関数]→[指定文字より後]

  • 9

    デバッグ実行してスクリプト変数にセットされた値を確認するために、「区切り文字より後のデータを対象データに代入」にブレークポイントを設定します。アイコンをクリックしてフォーカスを合わせ、右クリックメニューでブレークポイントを設定します。

  • 10

    プロセスフローを引いて完成します。

  • 11

    スクリプトをデバッグ実行して結果を確認します。デバッグ実行を行なうには、デザイナのメニューから[テスト実行]‐[デバッグ実行の開始/再開]を選択、もしくはツールバーから ボタンを押します。

  • 12

    デバッグ実行を行なうと、ブレークポイントを設定した「区切り文字より後のデータを対象データに代入」で処理が一時停止します。

    一時停止状態のスクリプト

    スクリプト変数「結果表示用」に代入された値

     処理を再開したい場合には、再度メニューから[テスト実行]‐[デバッグ実行の開始/再開]を選択、もしくはツールバーからを押します。
     デバッグ実行時には、「デバッグ情報」で変数が代入されている状況が確認できます。作成したスクリプトの実行後、「結果表示用」スクリプト変数に、「データ1」→「データ2」→「データ3」と順番に代入されていれば成功です。

Tips03 入力データが数値かどうか判定する

 Mapperのロジックアイコンには、正規表現を使った値の検証を行なうアイコンがあります。このアイコンを使うと、入力データの値の種類/型を検証することができます。このTipsでは、ロジックアイコンを使用して値が数値かどうか検証する方法を紹介します。

使う機能

  • 正規表現にマッチ……[Mapper]→[ツールパレット]→[条件]→[文字列]→[正規表現にマッチ]

サンプルスクリプト

 Excelの「注文明細」の「数量」が数値かどうかを判定します。数値でなければエラーデータをログに出力し、正常なデータのみCSVファイルに出力する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

入力データ(TIPS_03注文明細.xls)

ログに出力するメッセージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_3」を新規に作成し、スクリプト変数「チェック」と「レコード位置」を作成します。

  • 2

    [シートから読み取り]アイコンをキャンパスに貼り付けて、Excelから注文明細を読み取る処理を作成します。

    • シートから読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[Excel]→[シートから読み取り]

  • 3

    1件ずつデータを検証するため、[繰り返し処理(データ件数)]アイコンを使って「注文明細読み取り」を繰り返し処理する指定を作成します。

    • 繰り返し(データ件数)……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(データ件数)]

  • 4

     「数量」が数値かどうか検証します。まず[変数代入]アイコンをキャンパスに貼り付け、[変数代入]アイコンを開き、[正規表現にマッチ]アイコンを貼り付けます。[正規表現にマッチ]アイコンのプロパティに「¥d+」と指定します。この設定で数量が数値だったらtrue、数値でなければfalseを変数「チェック」に戻すことができます。

    • 正規表現にマッチ……[変数代入]→[ツールパレット]→[条件]→[文字列]→[正規表現にマッチ]

  • 5

    何件目のレコードでエラーが発生したかをログに出力するために、繰り返し回数「foreach」のコンポーネント変数「count」に「1」を加算した値を変数「レコード位置」に代入します。

    • 足し算……[変数代入]→[ツールパレット]→[数値]→[演算]→[足し算]
    • 数値定数……[変数代入]→[ツールパレット]→[数値]→[基本]→[数値定数]

  • 6

    変数「チェック」に「false」がセットされたかどうかを[条件分岐]アイコンで判定します。「false」がセットされていたら「数量」が数値ではなくエラーデータであることを意味します。

    • 条件分岐……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[条件分岐]

    条件編集画面

  • 7

    条件に当てはまるデータは、エラーデータです。注文データの数量が数値以外だった場合は、エラーログを出力します。ログに出力するために[コントロールパネル]の[アプリケーションログ出力先設定]を使ってログ出力先を設定します。

  • 8

     [アプリケーションログ出力先設定]を起動したら「新しいアプリケーションログ出力先の追加」をダブルクリックします。

  • 9

    [ログ出力先の種類の選択]画面で「ローテーションファイル」を選択します。

  • 10

    ログ出力先を設定します。

  • 11

    デザイナに戻り、[ログ出力]アイコンをキャンパスに貼り付けて、エラーログ出力を設定します。

    • ログ出力……[デザイナ]→[ツールパレット]→[基本]→[処理]→[ログ出力]

  • 12

    [CSVファイル書き込み]アイコンを貼り付けて、数量が数値だった場合は正しいデータとしてCSVにデータを出力する処理を作成します。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 13

    プロセスフローを引いて処理を完成します。実行して3件目~5件目がエラーと判定されてエラーログに出力されることを確認しましょう。また、エラーデータを除く正常なデータがCSVに出力されていれば成功です。

    正常データ出力結果

    エラーログ出力結果

NOTE

数値以外にも、正規表現を使用した値の検証を行なうことができます。たとえば、日付書式の検証であれば以下のような正規表現になります。

 ¥d{2,4}/¥d{1,2}/¥d{1,2}

この正規表現の場合、以下の形式であれば正しいデータとしてtrueが返ります。

 2007/01/31、2007/1/1、07/1/31、07/1/1

Tips04 月末の日付を取得する

 月末の日付は月によって異なります。たとえば、請求日は注文日の翌月末日という決まりなので、注文日をもとに翌月末日を自動算出したい、という場合もあるでしょう。このTipsでは、入力された日付の翌月末日を求める方法を紹介します。

処理のイメージ

使う機能

  • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[変数代入]

  • 日の設定……[変数代入]→[ツールパレット]→[日付]→[設定]→[日の設定]
  • 年を増減……[変数代入]→[ツールパレット]→[日付]→[演算]→[年を増減]
  • 月を増減……[変数代入]→[ツールパレット]→[日付]→[演算]→[月を増減]
  • 日を増減……[変数代入]→[ツールパレット]→[日付]→[演算]→[日を増減]
  • 数値定数……[変数代入]→[ツールパレット]→[数値]→[基本]→[数値定数]

サンプルスクリプト

 変数「date_in」の値を変換して変数「date_out」にセットする処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_4」を新規に作成し、変数「date_in」と「date_out」を作成します。変数「date_in」には初期値「2007/06/15」をセットします。

  • 2

     [変数代入]アイコンをキャンパスに貼り付け、以下の図のように処理を作成します。

    • 変数代入……[デザイナ]→[基本]→[処理]→[変数代入]
    • 月を増減……[変数代入]→[ツールパレット]→[日付]→[演算]→[月を増減]
    • 日の設定……[変数代入]→[ツールパレット]→[日付]→[設定]→[日の設定]
    • 日を増減……[変数代入]→[ツールパレット]→[日付]→[演算]→[日を増減]

    変数は、以下のような流れで処理されます。

    変数の移り変わりのイメージ

  • 3

    デザイナに戻り、プロセスフローを引いて完成です。実行し、[デバッグ情報]のウィンドウで結果を確認します。次のように、変数「date_out」にセットされた値と同じ日付「2007-07-31T00:00:00 000+0900」が表示されていれば成功です。

NOTE

日付はDataSpiderのシステム標準日付フォーマットで「yyyy-MM-ddThh:mm:ss.
S+0900」で演算されます。演算結果を後続の処理で任意の日付フォーマットに変える方法は、Tips08(P.260)を参照してください。

Tips05 改行文字を別の文字列に置換する

 Mapperロジックアイコンには、正規表現にマッチした文字を別の文字に置換するアイコンがあります。このTipsでは、そのアイコンを利用し、Excelファイルの1つのセルのデータに含まれる改行コードをHTMLファイルに出力するときに<br>に置換して改行を反映する方法を紹介します。

処理のイメージ

使う機能

  • 正規表現置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[正規表現置換]

サンプルスクリプト

 Excelファイルの野菜レシピを読み取り、改行文字を「<BR>」に置換してHTMLファイルを生成する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_5」を新規に作成し、[シートから読み取り]アイコンをキャンパスに貼り付けて、Excel形式の野菜レシピデータを読み取る処理を作成します。

    • シートから読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[Excel]→[シートから読み取り]

  • 2

     [HTMLファイル生成]アイコンをキャンパスに貼り付けて、HTMLファイルに出力する処理を作成します。

    • HTMLファイル生成……[デザイナ]→[ツールパレット]→[ファイル]→[HTML]→[HTMLファイル生成]

  • 3

    キャンパスに配置された「HTMLファイル生成(野菜レシピ一覧)」アイコンをダブルクリックして、HTMLの出力設定を行ないます。「入力データの追加」アイコンを利用して入力元「野菜レシピ読み取り」を追加します。入力元に表示されたスキーマの「row」をキャンパスにドラッグ&ドロップしテーブル形式で挿入するように設定します。ヘッダーを追加して最終的に以下のように設定します。

  • 4

    デザイナからデータフロー上で右クリックしてマッピングを追加します。

  • 5

    追加されたMapperアイコンをダブルクリックして開きます。出力先の構造を指定するため、「HTMLファイル生成(野菜レシピ一覧)」を右クリックして[スキーマの読み込み]を選択します。

  • 6

     [構造の読み込み]ウィンドウが表示されるので、[コンポーネントから選択]にチェックを入れて、名前から「野菜レシピ読み取り」を選択します。

  • 7

    入力された件数分HTMLの行を生成するため、入力元の「row」→「単純な繰り返し」→「row」に線をつなぎます。また「コード」と「野菜名称」は、入出力の同じ項目同士をマッピングします。そして次に、[正規表現置換]アイコンで改行コードを「<BR>」に置換する処理を作成します。

    • 単純な繰り返し……[Mapper]→[ツールパレット]→[繰り返し]→[基本]→[単純な繰り返し]
    • 正規表現置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[正規表現置換]

  • 8

    Mapperの名前を初期値の「mapping」から「改行文字を置換してマッピング」に変更します。またHTML生成処理内に指定した入力元の記述も合わせて変更します。

  • 9

    デザイナに戻り、プロセスフローを引いて完成です。処理を実行し、出力されるHTMLが入力されるExcelのデータと同じ位置で改行されていれば成功です。

出力結果

Tips06 文字とnull値を連結する

 Mapperの文字列連結アイコンは、デフォルトでは入力された値のどちらか片方が空文字の場合に全体の結果として空文字を出力します。このTipsでは文字列連結をする際に連結対象の文字列に空の文字が含まれた場合にも値を出力する方法を紹介します。

処理のイメージ

 入力データの「住所1」と「住所2」を連結して「住所」として出力し、「住所2」が空のデータの場合は「住所1」を「住所」として出力します。

使う機能

  • 条件判定による出力の切り替え……[変数代入]→[ツールパレット]→[分岐]→[基本]→[条件判定による出力の切り替え]

サンプルスクリプト

 Excelファイル「ユーザアカウントマスタ」からCSVファイル「住所データ」を作成します。ユーザアカウントマスタの「住所2」には、データが空(null)の行が含まれています。

入力データ(ユーザアカウントマスタ.xls)

 スクリプトで行なうのは、ユーザアカウントマスタの「住所1」と「住所2」を連結して「住所データ」の「住所」カラムに出力する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_6」を新規に作成し、[シートから読み取り]アイコンをキャンパスに貼り付けて、入力ファイル「ユーザアカウントマスタ」を読み取る処理を作成します。

    • シートから読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[Excel]→[シートから読み取り]

  • 2

    次に[CSVファイル書き込み]アイコンをキャンパスに貼り付けて、CSVファイルにデータを出力する処理を作成します。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み」

  • 3

     [マッピングの追加]ウィンドウが表示されるので、[はい]を選択してMapperの処理を追加します。「住所1」と「住所2」を結合する処理を作成します。「住所2」は、[nullを置換]アイコンにつないだ後、[連結]アイコンの下のハンドラにつなぎます。

    • nullを置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[nullを置換]
    • 連結……[Mapper]→[ツールパレット]→[文字列]→[演算]→[連結]

    NOTE

    [nullを置換]アイコンは、デフォルトでは入力がnullの場合に空白を出力します。そのため「住所2」がnullの場合は、「住所1」と「空白」が連結されて「住所1」のみ「住所」に出力されます。

  • 4

    デザイナに戻り、Mapperの名前を「住所1と住所2を連結」にします。最後にプロセスフローを引いて完成します。

    実行して、次のようなファイルが出力されていれば成功です。

Tips07 エラー発生時にメール送信

 処理がエラーになったときに、管理者や担当者にエラーが発生したことをメールで通知する処理を作ることができます。ここでは[1通メール送信]機能の使い方を紹介します。

処理のイメージ

使う機能

  • 1通メール送信……[デザイナ]→[ツールパレット]→[ネットワーク]→[Mail]→[1通メール送信]

サンプルスクリプト

 野菜マスタ読み取り処理でエラーが発生したらメールを通知する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_7」を新規に作成し、[例外監視]アイコンと[CSVファイル読み取り]アイコンをキャンパスに貼り付けます。読み取るファイルは、「/data/dss_learning/tips/野菜マスタ.csv」を指定します。

    • 例外監視……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[例外監視]
    • CSVファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル読み取り]

  • 2

    エラーメールを通知する処理を[1通メール送信]機能を使って作成します。[1通メール送信]アイコンをキャンパスに貼り付けます。

    • 1通メール送信……[デザイナ]→[ツールパレット]→[ネットワーク]→[Mail]→[1通メール送信]
  • 3

    次の画面が表示されるので、まず「送信サーバ」を選択します。登録済みのメールサーバ接続設定がプルダウンメニューに表示されていたらメールサーバ接続名を選択し、表示されていない場合は「追加」をクリックします。

  • 4

     [メール送信サーバ接続設定]画面が表示されるので、サーバ名を入力します。設定ができたら[完了]ボタンをクリックします。

    NOTE

    手順3で一覧から送信サーバ名を選択した方は、この4の設定は不要です。手順5に進んでください。

  • 5

     [必須設定]タブで、[送信元メールアドレス]と[送信先]を指定します。送信先を複数登録したいときは、登録したいメールアドレスの数分[追加]ボタンをクリックして送信先の欄を追加します。

  • 6

     [メッセージ]タブでメールの件名と本文を入力します。メールの本文には、エラーの内容や想定される原因と対処方法などを書いておくと、メールを受信した人がメールの内容をもとに対処できるので便利です。

  • 7

    プロセスフローを引いて完成です。スクリプトを実行してメールが届くことを確認するため、エラーが発生するように「野菜マスタ.csv」のファイル名を存在しない名前に変更して実行してみましょう。メールが正しく届いていれば処理成功です。

Tips08 日付のフォーマットを変換する

 Mapperの現在日時アイコンでシステム日付を取得すると標準日付フォーマットで日付が出力されます。この標準日付フォーマットを任意の日付フォーマットに変換することができます。

処理のイメージ

 標準日付フォーマットを「yyyy年MM月dd日」フォーマットに変換します。

使う機能

  • 現在日時……[変数代入]→[ツールパレット]→[日付]→[基本]→[現在日時]
  • 日時フォーマッティング……[変数代入]→[ツールパレット]→[文字列]→[日付]→[日時フォーマッティング]

サンプルスクリプト

 標準日付フォーマットのシステム日付を任意の日付フォーマットに変換して変数に代入する処理です。この処理の作成方法を以降で紹介します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_8」を新規に作成し、変数「日付」を作成します。

  • 2

     [変数代入]アイコンをキャンパスに貼り付け、アイコンに「日付変換」という名前を付けます。

    • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[処理]→[変数代入]
  • 3

     [変数代入]アイコンをダブルクリックして変数Mapperを開きます。そして、[現在日時]アイコンと[日時フォーマッティング]アイコンをキャンパスに貼り付けます。

    • 現在日時……[変数代入]→[ツールパレット]→[日付]→[基本]→[現在日時]
    • 日時フォーマッティング……[変数代入]→[ツールパレット]→[文字列]→[日付]→[日時フォーマッティング]

  • 4

     [日時フォーマッティング]アイコンのプロパティで、日付フォーマットに「yyyy年MM月dd日」と指定して、手順3の画面例と同じ設定になるようにマッピングします。

  • 5

    デザイナに戻り、処理のフローを完成して実行します。[デバッグ情報]ウィンドウで指定したフォーマットの日付が出力されていたら成功です。

補足

日時フォーマット

 日時フォーマットは年、月、日、曜日、時、分、秒、ミリ秒などを指定することができます。日時フォーマット以外の文字列は、指定した位置にそのまま出力されます。

 日時フォーマットに指定できる文字

Tips09 複数の入力データをマージする

 DataSpiderのマージ機能では、SQLのJOINと同じように複数の入力データをキーをもとに結合して1つのデータとして出力することができます。そこでこのTipsでは、マージの設定方法を紹介します。

処理のイメージ

使う機能

  • マージ……[デザイナ]→[ツールパレット]→[変換]→[基本]→[マージ]

サンプルスクリプト

 2つのCSVファイルをマージして結果をCSVファイルに出力する処理の作成方法を以降で紹介します。

スクリプト完成イメージ

出力結果のイメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_9」を新規に作成します。

  • 2

     [CSVファイル読み取り]アイコンをキャンパスにドラッグ&ドロップし、2つの入力ファイルを読み出す処理を作成します。まず「注文者情報」を読み取る処理を作成します。

    • CSVファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル読み取り]

  • 3

    次に、[CSVファイル読み取り]アイコンをキャンパスにドラッグ&ドロップし、注文明細ファイルを読み取る処理を作成します。

    • CSVファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル読み取り]

  • 4

     [マージ]アイコンをキャンパスにドラッグ&ドロップし、名前を付けます。「注文者情報の読み取り」と「注文明細読み取り」を、それぞれ[マージ]アイコンへ右クリックでドラッグ&ドロップしてデータフローを引きます。

    • マージ……[デザイナ]→[ツールパレット]→[変換]→[基本]→[マージ]

  • 5

    次に、[CSVファイル書き込み]アイコンをドラッグ&ドロップし、結合結果のデータをCSVに書き込む処理を作成します。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 6

    [マージ]アイコンから[CSVファイル書き込み]アイコンへデータフローを引き、[マージ]アイコンをダブルクリックしてマッピング画面を開きます。

  • 7

     [And-Integrateマージ]アイコンをキャンパスにドラッグ&ドロップします。表示される4つのハンドラのうち、1つ目のハンドラ「L」には「注文書情報_読み取り」の繰り返しの単位「row」をつなぎ、2つ目のハンドラ「K」にはキー項目「注文番号」をつなぎます。

    • And-Integrateマージ……[Mapper]→[ツールパレット]→[マージ]→[基本]→[And-Integrateマージ]

  • 8

     「注文明細_読み取り」も同じ手順で[And-Integrateマージ]アイコンの2つ目の「L」と「K」のハンドラにそれぞれ「row」と「注文番号」をつなぎます。そして最後に[And-Integrateマージ]アイコンから出力先の「row」につなぎます。

  • 9

    以下のように、入力元から出力先にそれぞれドラッグ&ドロップしてつなぎます。

  • 10

    デザイナに戻り、プロセスフローを引いて実行します。

  • 11

    次のように注文番号をキーに注文情報と注文明細がマージされたCSVファイルが出力されていれば成功です。

    実行結果

補足

5種類のマージ機能

 マージには、結合の条件を設定する5種類のアイコンがあります。「APPEND」はキーにマッチしたレコードの下に結合するデータを追加し、「INTEGRATE」はキーにマッチしたレコードを横につないでデータを出力します。

例)APPENDの場合の出力イメージ

例)IMTEGRATEの場合の出力イメージ

Tips10 処理をバッチ実行する(ScriptRunner)

 作成した処理を実行するDataSpiderのトリガー機能の1つにバッチ実行用のアプリケーショントリガー(ScriptRunner)があります。このScriptRunnerを使うとOSのコマンドプロンプトからバッチによる処理の実行と戻りステータスの取得ができます。たとえば、運用ツールから一元的に連携処理を実行管理したい場合にもこのScriptRunnerを利用することができます。

処理のイメージ

使う機能

  • 外部アプリケーション起動……[デザイナ]→[ツールパレット]→[基本]→[処理]→[外部アプリケーション起動]
  • ScriptRunner……ScriptRunner.exe

 ScriptRunnerは、サーバに登録されたスクリプトを外部から実行するためのクライアントプログラムです。DataSpiderをインストールすると以下のディレクトリにScriptRunner.exeがインストールされます。

  • DataSpiderサーバ ⇒ ${dataspider.home}/server/bin/ScriptRunner.exe
  • DataSpiderクライアント ⇒ ${dataspider.home}/client/bin/ScriptRunner.exe

サンプルスクリプト

 ScriptRunnerからのバッチ実行を行なう処理を作成します。バッチが起動されたことが確認できるようにNotepadを起動するスクリプトを作成します。

スクリプト完成/実行イメージ

バッチ実行の手順

  • 1

    スクリプト「TIPS_10」を新規に作成します。

  • 2

     [外部アプリケーション起動]アイコンをキャンパスにドラッグ&ドロップし、メモ帳を起動する処理を作成します。

    • 外部アプリケーション起動……[デザイナ]→[ツールパレット]→[基本]→[処理]→[外部アプリケーション起動]

  • 3

    デザイナからバッチ実行するスクリプト「TIPS_10」を含むプロジェクトをサーバに登録します。

  • 4

    スクリプト実行用設定ファイルを作成します。実行したいスクリプト「TIPS_10」を右クリックして[スクリプト実行用XMLの出力]を選択し、任意のディレクトリに名前を付けて保存します。

  • 5

    作成されたスクリプト実行用設定ファイル「tips_10.xml」の内容を確認してみましょう。ScriptRunnerは、この設定情報をもとにサーバに接続してスクリプトを実行します。

  • 6

    次にバッチファイルを作成します。4で「tips_10.xml」を出力したフォルダに作成します。

    • C:¥DS_batchディレクトリにバッチファイルtips_10.batを作成した例 ⇒ c:¥DS_batch¥tips_10.bat

    バッチファイルに記述する内容

    "C:¥Program Files¥DataSpiderServista¥client¥bin¥scriptrunner.exe" C:¥DS_batch¥tips_10.xml

    ※下線部分にはDataSpiderをインストールしたディレクトリを指定します。

  • 7

    それではWindowsのコマンドプロンプトからバッチ「tips_10」を実行しましょう。

    C:¥DS_batch>tips_10
  • 8

    正常に実行されるとメモ帳が起動します。メモ帳を閉じると終了ステータス「EXIT_STATUS=0」が返ります。EXIT_STATUS=0が返っていたら成功です。

    C:¥DS_batch>tips_10

    C:¥DS_batch>"C:¥Program Files¥DataSpiderServista¥client¥bin¥scriptrunner.exe" C:¥DS_batch¥tips_10.xml
    INFO|SCRIPT_RUNNER|LOGIN_START|SERVER=127.0.0.1|PORT=7700|USER=root
    INFO|SCRIPT_RUNNER|LOGGED_IN|SESSION_ID=m22nraaqa58kdva7ubbp4u44d1at89uj
    INFO|SCRIPT_RUNNER|EXECUTION_START|ID=rg00009g1rl00go0n084r87eh4le|SCRIPT_PK=ScriptPK「root@TIPS」「TIPS_10」

    INFO|SCRIPT_RUNNER|EXECUTION_END|ID=rg00009g1rl00go0n084r87eh4le|EXIT_STATUS=0|TIME=5047
    INFO|SCRIPT_RUNNER|LOGOUT_START|SESSION_ID=m22nraaqa58kdva7ubbp4u44d1at89uj
    INFO|SCRIPT_RUNNER|LOGGED_OUT
NOTE

DataSpiderサーバマシン以外のマシンでScriptRunner.exeを実行して、リモートマシンからDataSpiderのスクリプトを起動することもできます。その場合はDataSpiderのスクリプトをバッチ起動したいリモートマシンに、DataSpiderの実行クライアントをインストールします。実行クライアントのインストールについては、P.31の8を参照してください。

補足

実行時に引数を渡す方法

 実行時に引数を渡すこともできます。たとえば、メモ帳で開くファイル名を実行時引数で渡したいときは、次のように指定します。

  • ① 文字列型のスクリプト変数「ファイル名」を作成します。その際[スクリプト入力変数として使用する]にチェックを入れます。

  • ② スクリプト「TIPS_10」を開きます。外部アプリケーション起動「メモ帳起動」のプロパティの起動引数を追加します。次の画面の手順で、「変数の挿入」から「ファイル名」を選択すると、引数欄に「${ファイル名}」がセットされます。[Enter]キーでセットされた値を確定してください。

  • ③ プロジェクトをサーバに登録します。

  • ④ プロジェクトエクスプローラウィンドウ上で、スクリプト「TIPS_10」を右クリックして[スクリプト実行用XMLの出力]を選択し、「C:¥DS_batch¥tips_10_2.xml」と名前を付けて保存します。

  • ⑤ 手順④で保存したスクリプト実行用XMLを編集し、第1引数を変数「ファイル名」に渡す指定を追加します。

    ●変更前

    <params>
    <param project="root@TIPS" script="TIPS_10">
    <input key="ファイル名"/>この行(12行目)を編集

    ↓

    ●変更後

    <params>
    <param project="root@TIPS" script="TIPS_10">
    <input key="ファイル名">%{1}</input>

  • ⑥ notepad起動時の引数として指定するテキストファイルを作成します。このファイルに記述する内容は何でもかまいません。

    • ファイル名 ⇒ c:¥DS_batch¥test.txt
  • ⑦ バッチファイルを作成して、実行します。

    • バッチファイル名 ⇒ c:¥DS_batch¥tips_10_2.bat
    • バッチファイルに記述する内容
      "C:¥Program Files¥DataSpiderServista¥client¥bin¥scriptrunner.exe" C:¥DS_batch¥tips_10_2.xml C:¥DS_batch¥test.txt
  • ⑧ スクリプトが実行されて引数で指定したテキストファイル「test.txt」の内容が表示されたら成功です。

Tips11 環境の移行

 DataSpiderのテストサーバの環境を本番環境のサーバに移行したい場合、環境移行機能を使ってテストサーバと本番サーバの同期をとることができます。

使う機能

  • 設定のエクスポート/設定のインポート……[コントロールパネル]→[DataSpiderServerの設定]→[サーバ移行]タブ→[設定のエクスポート]/[設定のインポート]

移行の手順

  • 1

    Studioの[コントロールパネル]から[DataSpiderServerの設定]を起動し、「サーバ移行」タブの[設定のエクスポート]ボタンをクリックします。

  • 2

     [設定のエクスポート]ウィンドウが表示され、移行する内容を選択できます。

  • 3

    エクスポートファイルは指定したディレクトリに圧縮(ZIP形式)ファイル形式で出力されます。任意のディレクトリを指定し、[次へ]ボタンをクリックするとエクスポートが開始されます。

  • 4

     「export_<yyyyMMddhhmmss>.zip」というファイル名でエクスポートファイルが出力されます。

  • 5

    手順4で出力されたエクスポートファイルをインポートしたいマシン(DataSpiderサーバがインストールされたマシン)にコピーし、Studioの[設定のインポート]機能でインポートします。インポートすると既存の環境設定を上書きするため、注意が必要です。インポート元とインポート先の環境の同期をとりたい場合にこの機能を使用してください。

補足

プロジェクトのアップロード/ダウンロード

 プロジェクトごとにアップロード/ダウンロードすることもできます。プロジェクトのバックアップや、DataSpiderがテストマシンと本番マシンに導入されている場合には各サーバ間のプロジェクト単位の移行に利用できます。

● ローカルへダウンロード

[マイプロジェクト]を開き、ダウンロードしたいプロジェクトを右クリックして[ローカルへダウンロード]を選択します。
[全バージョンの一括ダウンロード]または[バージョンを指定してダウンロード]が選択できます。デザイナでスクリプトを保存したタイミングで1バージョンずつ作成されています。最新の保存内容のみダウンロードする場合は更新日付が最新のバージョンを選択します。

 保存するとプロジェクトと同名のディレクトリが作成され、ディレクトリ内にはプロジェクトデータが出力されます。出力されたディレクトリを移行先のマシンにコピーして移行先DataSpiderサーバのマイプロジェクトにアップロードします。

● ローカルからアップロード

[マイプロジェクト]を開き、メニューの[ファイル]-[ローカルからアップロード]を選択します。
ファイルチューザ画面が開いたら、アップロードしたいプロジェクトのデータを含むディレクトリ名を指定します。

Tips12 1つの入力データを複数ファイルに仕分けする

 入力データを複数の出力先に振り分けて出力することができます。このTipsでは、Accessの「注文明細」テーブルの注文データを注文者ごとにCSVファイルに仕分けして出力する方法を紹介します。注文者ごとに仕分けするための条件として「注文者情報」テーブルのメールアドレス「注文者Mail」を使います。

処理のイメージ

「注文者情報」テーブルに登録されているメールアドレス「注文者Mail」と、「注文明細」テーブルのメールアドレス「注文者Mail」が一致する情報を順次抽出してファイルに出力する処理を、「注文者情報」テーブルに登録されているメールアドレスの数だけ繰り返し実行します。

使う機能

  • 繰り返し(データ件数)……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(データ件数)]
  • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[処理]→[変数代入]

サンプルスクリプト

「注文者情報」テーブルからSQL指定で抽出した注文者Mail(メールアドレス)を[繰り返し(データ件数)]を使って変数にセットします。変数にセットしたメールアドレスにヒットするデータを「注文明細」テーブルから抽出して結果をCSVに出力する処理をメールアドレスの数だけ繰り返す処理のサンプルです。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_12」を新規に作成します。

  • 2

     「注文者情報」テーブルから注文者Mailのデータを抽出します。1メールアドレスにつき1件取り出されるSQLを指定するため、[検索系SQL実行]アイコンを使います。

    • 検索系SQL実行……[デザイナ]→[ツールパレット]→[データベース]→[Access]→[検索系SQL実行]

    抽出されるデータのイメージ

  • 3

     [繰り返し処理(データ件数)]アイコンをキャンパスにドラッグ&ドロップし、入力データに手順2で作成した「注文者Mailの抽出」を指定します。[完了]ボタンをクリックすると表示される[マッピングの定義]ウィンドウは[いいえ]を選択します。

    • 繰り返し(データ件数)……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(データ件数)]

  • 4

    注文者Mailの値を変数にセットするため、文字列型の変数「メールアドレス」を作成します。

  • 5

     [変数代入]アイコンをキャンパスにドラッグ&ドロップし、変数Mapperを開きます。手順3の「foreach(繰り返しデータ件数)」で抽出した「注文者Mail」を変数「メールアドレス」にセットします。

    • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[処理]→[変数代入]

  • 6

     「注文明細」テーブルから変数「メールアドレス」に一致するデータのみ抽出する処理を作成します。

    • 検索系SQL実行……[デザイナ]→[ツールパレット]→[データベース]→[Access]→[検索系SQL実行]

  • 7

     [CSVファイル書き込み]アイコンをキャンパスにドラッグ&ドロップし、「メールアドレス」に一致したデータをCSVに出力します。ファイル名には変数「メールアドレス」の値を使います。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 8

    プロセスフローをつないで処理を完成させ、実行します。

  • 9

    CSVファイルが6つ作成され、それぞれのメールアドレスにマッチするデータが各ファイルに出力されていれば成功です。

    出力結果

Tips13 ユーザ定義ロジックアイコンの作成

 Mapperのロジックを組み合わせて自分で定義したロジックを、ユーザ定義ロジックアイコンとして登録することができます。ユーザ定義ロジックアイコンは一度作成すると何度でも使うことができるので、よく使う機能や共通のパターンは、ユーザ定義ロジックとして登録しておくと毎回作成する必要がないため便利です。

処理のイメージ

 都道府県名、市区町村名、住所1、住所2の4つの値を結合する処理と、住所1と住所2に含まれる半角の数字や文字や記号を全角に変換する処理をユーザ定義ロジックに登録します。

入力する変数の値

出力される変数の値

使う機能

  • ユーザ定義ロジック……[変数代入]→[ツールパレット]→[ユーザ定義ロジック]

サンプルスクリプト

 都道府県名、市区町村名、住所1、住所2の4つの変数の値を結合して変数「統合された住所」に代入する処理と、住所1と住所2に含まれる半角の数字や文字や記号を全角に変換する処理を変数Mapperで作成します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_13」を新規に作成します。

  • 2

    次に、5つの変数を作成します。変数の初期値にはサンプルデータを指定します。

  • 3

     [変数代入]アイコンをキャンパスにドラッグ&ドロップし、変数Mapperを開きます。ツールパレットの[ユーザ定義ロジック]パネルの上で右クリックし、[追加]-[ユーザ定義ロジック]を選択します。

    • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[変数代入]

  • 4

     [ユーザ定義ロジックの追加]ウィンドウが表示されるので、ユーザ定義ロジック名に「住所結合と全角変換」と入力します。

  • 5

     [ユーザ定義ロジック]パネルに表示された[住所結合と全角変換]アイコンをダブルクリックします。

  • 6

    ロジックを定義するためのウィンドウが表示されます。まず、入力ハンドラを作成します。「入力ハンドラ」を右クリックして、[ハンドラの新規作成]を選びます。今回は4つの値(都道府県名、市区町村名、住所1、住所2)を入力するため入力ハンドラを4つ作成します。

  • 7

    ハンドラが4つできたらロジックを作成します。最初にハンドラ1(都道府県名)とハンドラ2(市区町村名)を連結します。

    • 連結……[ユーザ定義ロジック]→[ツールパレット]→[文字列]→[演算]→[連結]

  • 8

    住所1と住所2は半角を全角に変換してから連結します。ハンドラ3(住所1)とハンドラ4(住所2)をそれぞれ[半角→全角]アイコンにつなぎます。

    • 半角→全角……[ユーザ定義ロジック]→[ツールパレット]→[文字列]→[日本]→[半角→全角]

  • 9

    住所1と住所2には数字や記号の半角文字も含まれるので、[半角→全角]のプロパティの[アルファベットの変換][数字の変換][記号の変換]にそれぞれチェックを入れます。

  • 10

    ハンドラ3とハンドラ4をそれぞれ[連結]アイコンでつなぎ、さらに出力ハンドラにつなぎます。

    • 連結……[Mapper]→[ツールパレット]→[文字列]→[演算]→[連結]

  • 11

    変数Mapper画面に戻り、マッピングキャンパスに[住所結合と全角変換]アイコンをドラッグ&ドロップすると、作成した4つの入力ハンドラが表示されます。上から順に入力変数をハンドラにつなぎます。そして最後に出力ハンドラを出力先の変数「結合された住所」に線をつなぎます。

  • 12

    デザイナに戻り、プロセスフローを引きます。スクリプトが完成したら[デバッグ情報]ウィンドウで「結合された住所」にセットされた値を確認しましょう。4つの値が結合され、文字もすべて全角に変換されていれば成功です。

    実行結果

Tips14 ファイル一覧の取得

 ディレクトリ内のファイル名一覧を取得したいときには、[ファイル名一覧取得]アイコンを使います。入力されるファイル名を取得して後続の処理で使いたいときにこの機能を使うと便利です。

実行結果のイメージ

 /data/dss_learning/sampleディレクトリ内のファイル名一覧を取得します。

  • ファイル一覧取得対象ディレクトリ ⇒ /data/dss_learning/sample

 以下は、取得したファイルの数だけ繰り返しスクリプト変数(ファイル名)に値をセットする処理の実行ログ出力例です。

使う機能

  • ファイル名一覧取得……[デザイナ]→[ツールパレット]→[ファイル]→[ファイル操作]→[ファイル名一覧取得]

サンプルスクリプト

 ディレクトリ「/data/dss_learning/sample」配下のファイル一覧を取得して変数「ファイル名」に値をセットする処理を、ファイルの数だけ繰り返します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_14」を新規に作成します。

  • 2

    文字列型の変数「ファイル名」を作成します。

  • 3

    次に、[ファイル名一覧取得]アイコンをキャンパスに貼り付けて[名前]に「ファイル一覧取得」と指定します。次に[ディレクトリパス]にファイル名を取得するディレクトリ「/data/dss_learning/sample」を指定します。

    • ファイル名一覧取得……[デザイナ]→[ツールパレット]→[ファイル]→[ファイル操作]→[ファイル名一覧取得]

  • 4

    指定したディレクトリ内のファイルの数だけ、変数にファイル名をセットする処理を繰り返すため、[繰り返し(データ件数)]アイコンを使います。

    • 繰り返し(データ件数)……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[繰り返し(データ件数)]

  • 5

     [変数代入]アイコンをキャンパスにドラッグ&ドロップし、変数Mapperを開きます。[繰り返し(データ件数)]で取得したファイル名を出力先の変数「ファイル名」にマッピングします。

    • 変数代入……[デザイナ]→[ツールパレット]→[基本]→[変数代入]

  • 6

    デザイナに戻り、プロセスフローをつないでスクリプトを完成させ、処理をデバッグ実行します。[実行ログ]に変数に代入されたファイル名が表示されれば成功です。

Tips15 処理の戻り値をセットする

 DataSpiderのスクリプトを実行すると、処理結果のステータスが戻り値として返ります。デフォルトでは成功したら0、失敗したら内容に応じたステータスが戻り値として返りますが、この戻り値を任意の値に変更することができます。たとえば、アプリケーションで決められたルールに合わせて任意の戻り値を設定したいときにこのTipsを使うことができます。

処理のイメージ

 親スクリプトから子スクリプトを実行し、子スクリプトで抽出したデータが0件だったら戻り値「100」を親スクリプトに返す処理です。初期状態ではデータが0件でもエラーではないので戻り値は「0」が返りますが、この処理ではデータが0件の場合は戻り値を「100」にして親スクリプトに返します。

使う機能

  • [戻り値]プロパティ……[デザイナ]→[end]アイコンのプロパティ[戻り値]
  • exitStatus……[変数代入]→[コンポーネント変数]→[exitStatus]

サンプルスクリプト

 親スクリプトから子スクリプトを呼び出します。呼び出した子スクリプトでは、野菜マスタを抽出して、抽出結果が0件かどうか判定をしています。0件の場合は戻り値「100」を、0件でなければCSVにデータを出力して正常終了の「0」を戻り値として親スクリプトに返します。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    「TIPS_15」フォルダを作成し、新規に子スクリプト「TIPS_15_子」を作成します。

  • 2

    「野菜マスタ」を抽出してCSVに出力する処理を作成します。

    • 検索系SQL実行……[デザイナ]→[ツールパレット]→[データベース]→[Access]→[検索系SQL実行]

    SQL文

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]
    • ファイル出力先 ⇒ /data/dss_learning/out/TIPS15_out.csv
  • 3

    [条件分岐]アイコンで野菜マスタ抽出結果が0件だったかどうかを判定します。ここでは「野菜マスタ」からの抽出結果の件数を持つコンポーネント変数「野菜マスタ:count」が「0」と「等しい」かどうかで0件かどうかを判定しています。

    • 条件分岐……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[条件分岐]

  • 4

    条件に当てはまる0件の場合、[End]の戻り値に「100」を指定します。0件に当てはまらない場合は、データをCSVに出力するため[if(END)]のアイコンから「野菜マスタ出力」に線をつなぎます。「野菜マスタ出力」につないだ[End]の戻り値は初期値の「0」を使います。

    • End……[デザイナ]→[ツールパレット]→[基本]→[フロー]→[end]

  • 5

    次に、親スクリプト「TIPS_15_親」を作成します。親スクリプトのキャンパスに、手順1で作成した子スクリプトをプロジェクトエクスプローラからドラッグ&ドロップし、親スクリプトから子スクリプトを呼び出す処理を作ります。

  • 6

    正しく戻り値が返るかどうか、確認するため親スクリプトには整数型の変数「戻り値」を1つ作ります。

  • 7

     [変数代入]アイコンをドラッグ&ドロップして、変数Mapper画面で子スクリプトの戻り値がセットされるコンポーネント変数[exitStatus]の値を、親スクリプトの変数「戻り値」にセットする処理を作ります。

  • 8

    「TIPS_15_親」スクリプトのデザイナ画面に戻り、プロセスフローをつないで処理を完成させ、実行します。

  • 9

     [デバッグ情報]ウィンドウで実行結果を確認します。戻り値「100」が変数「戻り値」にセットされていれば成功です。

NOTE

このTipsで紹介した戻り値はScriptRunnerを使った場合、バッチ実行時の戻り値として呼び出し元に返ります。運用ツールでDataSpiderの処理をバッチ実行した際に処理の結果を戻り値によって判定したい場合にも利用できます。

Tips16 固定長ファイルの扱い方

 EDIシステムとの連携やホストとの連携では固定長フォーマットのテキストデータ(固定長ファイル)が入出力のデータとして扱われることが多くあります。DataSpiderの固定長アダプタでは、下記の例のように1つの物理ファイル内に複数のレコードフォーマットが存在するデータも扱うことができます。

処理のイメージ

 ここでは例として、次の3種類のレコードフォーマットを持つ人事データ(固定長テキストデータ)を、1件のレコードとして横につないでCSVファイルとして出力する処理を作成します。

  • 部署レコード(部署名など部署に関する情報)
  • 社員レコード(部署に所属する社員に関する情報)
  • 人数レコード(部署に所属する社員数)

使う機能

  • 固定長ファイル読み取り……[ツールパレット]→[ファイル]→[固定長]→[固定長ファイル読み取り]

サンプルスクリプト

 固定長ファイル「TIPS_16固定長人事データ.txt」を読み取り、CSVファイルに出力する処理です。

スクリプト完成イメージ

サンプルスクリプトの作り方

  • 1

    スクリプト「TIPS_16」を新規に作成します。

  • 2

     [固定長ファイル読み取り]アイコンをキャンパスにドラッグ&ドロップし、ファイル名を指定します。ファイル名を入力したらフォーマットの「追加」をクリックします。

    • 固定長ファイル読み取り……[デザイナ]→[ツールパレット]→[ファイル]→[固定長]→[固定長ファイル読み取り]

  • 3

    これから作成する人事データのフォーマットに「人事データフォーマット定義」と名前を付けます。入力データのフォーマットを定義するため、[固定長ウィザードの起動]をクリックします。

  • 4

    固定長ウィザードが起動するので、入力データの構造を定義します。3種類のレコード定義を確認しましょう。

    レコード構成情報

  • 5

    1つめのレコード「部署レコード」から作成します。[固定長ウィザード]の「構造定義」上で右クリックし、[追加]-[レコード]を選択してレコードの定義画面を開きます。

  • 6

    レコード名と出現回数を指定します。部署レコードは各部署につき1回出現するので[無制限]のチェックをはずし、「1」と指定します。

  • 7

    次に、フィールドを追加します。追加した「部署レコード」を右クリックし、[追加]-[フィールド]を選択します。

  • 8

    1つめのフィールドはレコード識別情報を持つタグフィールドなので、名前を「レコードタグ」とします。また、レコード構成情報をもとにフィールド型、フィールド長、パディング文字を設定します。

  • 9

    これで1つめのフィールドが出来ました。残りのフィールドは手順4のレコード構成情報をもとに、手順58を繰り返して作成します。

    指定完了後の構造定義

  • 10

    構造定義で定義したデータから処理に使うフィールドを[追加]ボタンで列一覧に追加します。列一覧に追加されたフィールドのみDataSpiderのスクリプトで処理に使うことができます。列の追加が完了したら[了解]ボタンをクリックして[固定長ウィザード]を閉じます。

  • 11

    デザイナに戻り、[CSVファイル書き込み]アイコンをキャンパスにドラッグ&ドロップし、データをCSVファイルに出力する指定を作ります。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 12

    最後にプロセスフローをつないで実行します。

次のフォーマットのCSVファイルが出力されていれば成功です。

出力結果の例

補足

構造定義のインポート/エクスポート

 DataSpiderの固定長アダプタの構造定義は、外部ファイルからインポートしたり、CSVファイルとしてエクスポートすることが可能です。項目の数が多い場合は、事前にテキストファイルで構造情報を作成してインポート機能を利用すると便利です。

  • 構造定義ファイルのインポート
  • エクスポートした構造定義ファイル

Tips17 コードを名称に置き換える

 品目コードを品名に変換したいときには、Mapperでコードを名称に置き換える処理を作ることができます。Mapperでコードを名称に変換する方法は、3種類あります。それぞれの違いと使い方をこのTipsで紹介します。

変換パターン

  • 文字列ごとに置換
  • CSVファイルにより置換
  • DBテーブルにより置換

処理のイメージ

 「生産農家マスタ」テーブルの県コードを県名に置き換えるデータを出力します。

実行イメージ

基本スクリプト

 「生産農家マスタ」テーブルからデータを抽出してCSVファイルに出力する処理が基本スクリプトです。Mapperで3つの変換パターンのいずれかを使用して、「生産農家マスタ」テーブルの「県コード」を県名に置き換えます。

基本スクリプト完成イメージ

 以降では、まず基本スクリプトの作成手順を紹介し、続いてMapperで各変換パターンを使用して変換処理を作成する手順を紹介します。

基本スクリプトの作り方

  • 1

    スクリプト「TIPS_17」を新規に作成します。

  • 2

     [テーブル読み取り]アイコンをキャンパスにドラッグ&ドロップし、「生産農家マスタ」テーブルからデータを全件抽出します。

    • テーブル読み取り……[デザイナ]→[ツールパレット]→[データベース]→[Access]→[テーブル読み取り]

  • 3

     [CSVファイル書き込み]アイコンをドラッグ&ドロップし、変換結果を出力するCSV書き込み処理を作ります。出力する列(カラム)は5つなので、[追加]ボタンを5回クリックして列を作ります。

    • CSVファイル書き込み……[デザイナ]→[ツールパレット]→[ファイル]→[CSV]→[CSVファイル書き込み]

  • 4

     [マッピングの追加]ウィンドウが表示されるので、[はい]を選択してマッピング画面を開きます。

     マッピング画面でコード変換処理を作成します。コード変換のパターンは3種類あります。以降では、各パターンで変換処理を作成する手順を紹介します。

コード変換パターン1~文字列ごとに置換

 マッピングの[文字列ごとに置換]機能を使って変換するテーブルの値を手入力で指定する方法です。変換するコードの種類が少ないときや、コード変換用のテーブルがない場合にこの方法を使います。

使う機能

  • 文字列ごとに置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[文字列ごとに置換]
  • 1

     [文字列ごとに置換]アイコンをキャンパスにドラッグ&ドロップし、[県コード]→[文字列ごとに置換]→5つめの[column]に線をマッピングします。

  • 2

     [文字列ごとに置換]アイコンのプロパティの1行目[変換テーブル]の右端の[▼]をクリックすると[変換テーブルの設定]ウィンドウが表示されます。[追加]ボタンを3回クリックして追加した行に、変換元の県コードと変換先の県名を左右にセットで入力します。指定が完了したらデザイナに戻り、スクリプトのプロセスフローをつないで処理を完成させます。

コード変換パターン2~CSVファイルにより置換

 CSVファイルにコードと名称が登録された変換テーブルがある場合は、マッピングの[CSVファイルにより置換]機能で変換することができます。

使う機能

  • CSVファイルにより置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[CSVファイルにより置換]
  • 1

     [CSVファイルにより置換]アイコンをキャンパスにドラッグ&ドロップし、[県コード]→[文字列ごとに置換]→5つめ[column]に線をマッピングします。

  • 2

     [CSVファイルにより置換]アイコンのプロパティでは、CSVファイル名に「都道府県コード表.csv」を指定します。CSVファイルの1行目のヘッダーは置換対象とならないように[1行目のヘッダーをスキップ]をチェックします。指定が完了したらスクリプトのプロセスフローをつないで処理を完成させます。

コード変換パターン3~DBテーブルにより置換

 データベースにコードと名称がセットで登録されたマスタテーブルがある場合は、Mapperの[DBテーブルにより置換]機能で変換することができます。

使う機能

  • DBテーブルにより置換……[Mapper]→[ツールパレット]→[文字列]→[変換]→[DBテーブルにより置換]
  • 1

     [DBテーブルにより置換]アイコンをキャンパスにドラッグ&ドロップし、[県コード]→[DBテーブルにより置換]→5つめ[column]の順でマッピングします。

  • 2

     [DBテーブルにより置換]アイコンのプロパティで、リソース名、変換テーブル名と変換元のコードを持つ項目を[キー列]に、置き換える値を持つ列を[値列]にそれぞれ指定します。指定が完了したらスクリプトのプロセスフローをつないで処理を完成させます。

確認 スクリプトを実行して結果を確認してみましょう。県コードが正しく県名に変更されていたら成功です。

完成したスクリプト

出力結果

県名置換データ.csv

Tips18 連携対象ディレクトリをマウントする

 DataSpiderはDataSpiderファイルシステムという論理的なビューを通してOSの物理ディレクトリやファイルを参照する仕組みを持っています。データ連携対象のファイルが置かれているOSの物理ディレクトリをDataSpiderから参照するためにはマウント設定機能で物理ディレクトリとDataSpiderファイルシステムを関連づけます。このTipsではDataSpiderファイルシステムの役割と、DataSpiderファイルシステムへのマウント設定の方法を紹介します。

使う機能

  • マウント設定……[コントロールパネル]-[マウント設定]

DataSpiderファイルシステムとは?

 DataSpiderファイルシステムとはDataSpiderからOSのファイルシステムを参照するためのDataSpider独自の論理的なディレクトリビューです。DataSpiderのスクリプトでは物理ディレクトリ名やファイル名をそのまま利用せず、DataSpiderの論理ビュー名を利用して処理を作成します。

デフォルトの参照設定

 DataSpiderのルートディレクトリはDataSpiderサーバをインストールしたディレクトリを指しています。

※上記はDataSpiderインストール時にリポジトリDBを利用しない設定を選択した場合のデフォルトの設定です。

マウント

 マウント機能により任意の物理ディレクトリをDataSpiderファイルシステムにマウントすることができます。連携対象のファイルがDataSpiderをインストールしたディレクトリ配下以外の場所にある場合は、連携対象の物理ディレクトリをDataSpiderファイルシステムにマウントして処理に利用します。

設定手順

 物理ディレクトリ「C:¥DS_batch」をDataSpiderファイルシステムのマウントポイント「/APPL01」にマウントする設定例です。

  • 1

    [コントロールパネル]の[マウント設定]をクリックします。

  • 2

    [新しいマウントポイントの作成]をダブルクリックします。

  • 3

     [マウント元]の[参照]ボタンをクリックして、マウントしたいOSファイルシステムの物理ディレクトリ名を指定します。

  • 4

    次に[マウント先]の[参照]ボタンをクリックして、DataSpiderファイルシステムのファイルチューザを開き、マウントポイントとなるディレクトリを新規作成します。

  • 5

     [マウント設定]の画面でマウント元、マウント先を確認したら[完了]ボタンをクリックします。これでマウント設定は完了です。

確認 DataSpiderのエクスプローラでマウントされたディレクトリが表示されること、およびマウントされたディレクトリが[マウント設定]で指定したOSのディレクトリを参照していることを確認してみましょう。


  • DataSpiderのエクスプローラから見た
    DataSpiderファイルシステム

  • Windowsエクスプローラから見た
    マウント元ディレクトリ

DataSpiderファイルシステムのメリット

 処理の開発時と本番運用時で異なるマシンを使用する場合、開発マシンから本番マシンに移行する際に、連携対象ファイルの配置場所が変更になることがあります。その際、すべてのスクリプトの設定を変更することは現実的ではありません。
 DataSpiderファイルシステムによって、スクリプトの設定を変更することなくマウント設定のみ変更することでOSの物理ディレクトリの配置場所変更に対応することができます。このように、DataSpiderファイルシステムはOSが管理する物理ディレクトリ名称に依存せずスクリプトを作成/管理できるメリットがあります。

補足

ネットワークディレクトリをマウントする

 ネットワークディレクトリのマウントはUNC名を指定します。

  • マウント元ディレクトリの指定例 ⇒ ¥¥appresso¥ds_sample

 ネットワークディレクトリをマウントする場合は、DataSpiderサーバプロセスを起動したWindowsのログインユーザーがマウント対象のディレクトリが存在するサーバに対してのログイン権限を持つ必要があります。

▲ページの先頭へ戻る