• ホーム
  • 製品ブログ
  • ファイルを連携してみた:サイズの大きなファイルの連携 ~菊ち...

ファイルを連携してみた:サイズの大きなファイルの連携 ~菊ちゃんのASTERIA Warp体験記~

こんにちは。インフォテリアのキクチです。

少しずつ春っぽさが出てきましたね。
この前上野駅前を通りかかったら桜が咲き始めていました。開花宣言はまだみたいですが、ピンクが舞ってくると一気に春の雰囲気になりますね。

さて、今回は大きなサイズのファイルを連携してみたいと思います。

実運用でメモリ不足のエラーを出さないためにどう連携するのか、ヒントになればと思いながら体験してみましたので、どうぞ参考にしてください!

「大きなサイズのファイル」とつないでみた

さぁ、今回も気合を入れて体験していきたいと思いますが、その前に!
前回のブログを公開した後、スーパーASTERIAer(ASTERIA Warpにすごく詳しい人の意)のNさんからご指摘をいただきました。

「CopyFile」コンポーネント!?

Nさん「キクチくん、ブログがんばってるね~」
キクチ「ありがとうございます!分からないなりに精一杯やらせてもらってます。」
Nさん「でもさ~、今回の複数ファイル連携、もっとイケてるフローに出来るよ。」
キクチ「イケてないですか!?だいぶスマートになったんですけど…」
Nさん「イケてないというか、もっと簡素に出来るかなと…。連携要件を考えて作ったみたいだけど、要は単純なファイルコピーだよね?」
キクチ「はい。日次かなんかであるフォルダに置かれたファイルを別ファイルにコピーしてくる想定で作ってみました。」
Nさん「それであれば、 CopyFileコンポーネント使っちゃえば一発だよ。」
キクチ「… CopyFile!?そんな便利なコンポーネントがあるんですか??」
Nさん「ファイルタブのところ見てみると、ファイル操作に必要なものは一通り揃ってると思うから見てみるといいかもね。」
キクチ「…なんと…」

と、いうことで見てみましたファイルタブのコンポーネント。
なんとファイルのコピーや移動(リネーム)、削除に存在確認なんかもこのタブのコンポーネントで行えちゃいますね。
詳しくはリファレンスを見ていただければと思いますが…

「コンポーネントの機能」について
コンポーネントリファレンスをご参照ください。

で、作り直したフローがこちら

なんと…コンポーネント一個で実現してしまいました…

ファイルタブのコンポーネントを配置

データの中身を変換などかける必要がなければ、こちらの方が断然すっきりしますね。
またひとつASTERIA Warpの簡単さを知ってしまいました…!

サイズの大きなファイルの連携

さて、ここからが今回の本題です。サイズの大きなファイルの連携、体験してみます!
日々のデータを蓄積していく過程で、どうしてもファイルサイズは大きくなってしまうと思います。
今回はそんなファイルを連携するにはどうしたら運用を止めずに行えるかを試してみます。

以下の想定でフローを考えてみます。

  1. 日次で100MBのデータが蓄積されるファイルを連携する。

たったこれだけ。フロー自体はシンプルなものになりそうです。
新しいフロー「ファイル連携3」を立ち上げて設定しました。

「ファイルを連携する3」を立ち上げて設定

読み込み元ファイルはこちらの約100MBのファイルを使用します。

testdata100mb.csvを使用

連携自体はこれで行えるはずですが…

実行失敗

失敗してしまいました…

メッセージ的には「ASTERIA Warpに割り当てられたヒープメモリが不足している」ということが読み取れます。

運用を考えれば、FSMC(管理コンソール)からASTERIA Warpでの最大メモリサイズの設定を変更することも手段の一つかもしれませんが、まずはフローの作り方で対応できないか考えてみます。

メモリを食わないフローの作り方ってありますか?

…考えるといっても、いつも通りスペシャリストに聞いちゃったんですが…(汗)

キクチ「Hさん、大きなサイズのファイルを連携したいんですけど、メモリが足りなくて失敗しちゃうんですよね~。メモリを食わないフローの作り方ってありますか?」
Hさん「ん~…。深いところまで知りたい?浅くてもとりあえず実行できるようにしたい?」
キクチ「今回はぜひ!浅いところでもとりあえずでお願いします!」
Hさん「それならRecordGetコンポーネントを使ってみたらどうだろう?」
キクチ「RecordGet…!それはどんなコンポーネントなんですか?」
Hさん「FileGetコンポーネントはファイルを丸ごとストリームとして取り込んできてたけど、RecordGetコンポーネントは1レコードずつ読み込んでくれるんだよね。」
キクチ「なるほど。ファイル全体分をメモリに読み込んでこないから大量データでもメモリを浪費しないって感じですかね。」
Hさん「そんな感じかな~。まぁとりあえずやってみなよ!」
キクチ「ありがとうございます。やってみます!」

「RecordGet」コンポーネント…!

そんな便利なコンポーネントがあるんですね~と、いうわけで、RecordGetコンポーネントを使ってフローを作り直してみます。

RecordGetコンポーネントを使って作り直したフロー図

見た目はあまり変わりません

FileGetをRecordGetに置き換えただけですね。

ちなみに、FileGet⇒RecordGetの置き換えは、FileGetコンポーネントを右クリックで表示されるメニューの中から「コンポーネントの置き換え」メニューでも行えます。

いちいち、コンポーネント削除⇒新しいコンポーネントの配置⇒線の引き直し、というステップを踏まなくてもいいので、こちらの方が簡単かもしれませんね。

コンテキストメニュー「コンポーネントの置き換え」

RecordGetコンポーネントはプロパティも
FileGetコンポーネントとそんなに違わないみたいです。

RecordGetコンポーネントのプロパティ内容

簡単に作り直せたので早速実行してみます。
でも…メモリ不足は解消されましたが、今度はタイムアウトで失敗してしまいました…

「フローの実行がタイムアウトまでに終了しませんでした。」

今度はタイムアウトで失敗…

キクチ「Hさん…今度はタイムアウト起きちゃったんですが…」
Hさん「あ、やっぱり?メモリ不足になるくらいだから、RecordGetをそのまま使っても正常には終わらないかとは思ってたんだよね~」
キクチ「やっぱり…なんですね(汗)これってRecordGetコンポーネントだと1レコードずつ取得してくるから、時間はかかってしまうってことですかね?」
Hさん「まぁそういうことだね。タイムアウトの設定はフローのプロパティで設定できるから変更してもう一回やってみな。それにRecordGetのプロパティで一度に取得する行数を指定できるから、そこも変更してみると早くなると思うよ」
キクチ「え…1行ずつとってくるだけじゃないんですね!」

どうやら

  • FileGet
    ファイルのデータを全て一度に読み込んで処理する。
    ただし大容量のファイルを読み込む場合はメモリ消費量は高くなる。
  • RecordGet
    CSVや固定長のファイルから指定したレコード件数ずつ読み込んで処理する。
    レコード件数の指定によってメモリ消費量は抑えられる。

というところのようですね。
使い分けとしては環境でのメモリの上限とか、作成したフローの終了期限などの運用要件とのバランスをとる必要がありそうです。
何はともあれ、フローのタイムアウト・取得行数の設定を変更して再挑戦です。

ちなみに、先ほど表示されたメッセージからは「フローはまだ動いている」とのことでしたが、今回のようにデザイナー上でタイムアウトになってもサーバー上では処理は継続されているようです。

※各タイムアウト値の関連性については今回は省略します。

フローのプロパティはツリーペインでプロパティを見たいフローを選択すれば、右上のインスペクタがフローのプロパティが切り替わります。

フローのプロパティ

フローのプロパティではタイムアウトの設定の他にもエラーが発生した際に起動するサブフローやセッションをフロー終了時に閉じるかどうかの設定も出来るみたいです。

180秒でエラーになったので、思い切って5倍の900秒を設定してみます。また、取得行数のプロパティも1000に設定します。

フローとRecordGetのプロパティ

さあ、再チャレンジです!

実行結果

無事に成功しました!

実際は15分もかからず、取得行数のおかげで20秒程度でフローが終了していたことがログから確認できました。

実行ログ「フローの実行が終了しました:26266ms」

ファイルもしっかり作成されています

書き出された3つのファイル

ふぅ、大きなサイズのファイルでもしっかりと連携できました。

FileGetコンポーネントとRecordGet コンポーネントはフローの性能要件によって使いどころは変わってくるかもしれませんが、メモリが豊富ではない環境でもフローを実行できる機能がコンポーネントとして用意されているのはありがたいですね。

最後に

今回はここまでにしたいと思います。

さて、ASTERIA Warpを用いてデータ連携する際にはデータの加工、変換が必要な場面がたくさんあると思います。
ここまでは単純なマッピングを行ってきましたが、MapperはASTERIA Warpにおけるデータ変換を担っています。
次回はそんなMapperでのデータ変換、関数の使い方などを体験してみたいと思います。

それではまた!



クラウド版

手ぶら de ASTERIA Warp
体験 5日間を申し込んで
簡単データ連携を体験してみよう!

サーバー準備の手間なくデータ連携ツール「ASTERIA Warp」の
全ての機能を5日間お試しいただけます。

今すぐ体験してみる 書籍の詳細についてはこちらをご覧ください。
基礎と実践 使い方マニュアル
著者:菊地 雄大

著者:
菊地 雄大

ASTERIA Warpのプリセールスエンジニア&体験セミナー講師。関係各所から舞い込んでくるASTERIA Warpに関するご依頼になんとか応えながら日々鍛えてもらっています!

「ASTERIA Warp、データ分析、クラウド、業務効率化、最新技術」人気!ホワイトペーパーダウンロード受付中!今すぐチェック
ASTERIA Warpと色々つないでみた特集!記事はこちら>

ASTERIA Warp 関連サイトのご紹介

X ASTERIA Warp Developer Network(ADN)サイト

技術情報をお探しの方

ASTERIA Warp Developer Network
(ADN)サイト

ASTERIA Warp製品の技術情報やTips、また情報交換の場として「ADNフォーラム」をご用意しています。

X ASTERIA Warpユーザーグループ(AUG)

ASTERIA Warpデベロッパーの方

ASTERIA Warp オンラインコミュニティ
ADN slack

ASTERIA Warpデベロッパー同士をつなげ、技術情報の共有やちょっとしたASTERIA Warpの疑問解決の場とすることを目的としたコミュニティです。

X ASTERIA Warpユーザーサイト

ASTERIA Warpユーザーの方

ASTERIA Warpユーザーサイト
Login

製品更新版や評価版のダウンロード、各種ドキュメントのご提供、また 技術的なお問合せもこちらで受付ています。

X ASTERIA Warpパートナーサイト

ASTERIA Warpパートナーの方

ASTERIA Warpパートナーサイト
Login

パートナーライセンスの発行や各種ドキュメントのご提供をしています。

ページ先頭へ