HOW TO TD(User Engagement)Treasure Data User Engagement

Data ConnectorのJobでskipped lineがでる理由

ホーム » Data ConnectorのJobでskipped lineがでる理由

こんにちは、テクニカルサポートエンジニアリングチームの橘 樹男です。

よくお問い合わせを受ける想定よりも件数が少ない、または1件もデータがインポートされていないという事象についてお話をしたいと思います。なお本記事に出てくるData ConnectorとはSourceの裏で動いているシステムの事を指します。

tl;dr

どういったJobか:

  • Successなのにインポート件数が少ない、または0件となっているJob

skipped lineが起きる理由:

  • 事前のデータ定義と不整合が起きるとData Connectorはインポートをスキップする
    • longと定義されているのに実際のデータにstringやnullが含まれていた
    • カラム数が多いまたは少ない
    • 等々

解消方法:

  • 事前定義の情報との不整合をなくす
    • 一旦全部stringで取り込んでしまう
    • カラム数の数をあわせる
    • 等々

何が起きているのか

文字だけですと実際のJobのイメージがつきにくいかと思いますので、実際の画面を確認してみましょう。 以下は実際のJobの画像です。

(StatusがSuccessなのに0件インポート)

トラブルシューティングの基本であるログを確認しましょう。

Skipped line gcs://hogehoge/flights/flights_raw_201501.csv:2 (Too few columns): 2015-01-01,"AA",19805,"AA","363",12953,1295302,31703,"LGA",13930,1393003,30977,"ORD","1950","1944",-6.00,11.00,"1955","2058",10.00,"2130","2108",-22.00,0.00,"",0.00,733.00

どうやらToo few columnsという理由にて、flights_raw_201501.csvの2行目の取り込みがSkipされてしまっています。 カラム数が少ないと指摘されています。

skipped lineがでる理由

カラム数が少ないという理由で取り込みがSkipされた事はわかりましたが、何に対して少ないかという事はまだ分かっていません。とりあえず、Sourceの設定を確認することにします。

Souceの設定では28カラムあることを想定しているようです。一方、元データのカラム数は27カラムです。

$ head -n 1 flights_raw_201501.csv | awk -F ',' '{print NF}' 27

Too few columnsというのはData Settingsで設定されたカラム数に対して実際のカラム数が少ないという事を意味しているという事がわかりました。 原因がようやくわかりました。あとは修正するだけです。

Data ConnectorはSourceの設定情報を正として動作します。そのため、その設定に合わないデータの取り込みは行いません。今回はカラム数の不一致でしたが、Data Typeの不一致も同様です。試しにStringのData Typeをlongに変更して取り込みを行ってみましょう。

そうすると以下のようにNumberFormatExceptionという例外がでて、skipされてしまいました。

2020-05-20 02:21:09.689 +0000 [WARN] (0036:task-0001): Skipped line gcs://hogehoge/flights/flights_raw_201501.csv:3 (java.lang.NumberFormatException: For input string: "AA"): 2015-01-01,"AA",19805,"AA","364",13930,1393003,30977,"ORD",12953,1295302,31703,"LGA","1500","1456",-4.00,11.00,"1507","1743",6.00,"1800","1749",-11.00,0.00,"",0.00,733.00

Treasure Data CDP自体はスキーマレスなのですが、Data Connectorはスキーマをきっちり管理しているのです。

Skipped lineの解消方法

Skipped lineをさせないためにはData Settingsと実際のデータを一致させることが必要です。今回の件で言えば、元データに存在しないtestというカラムをData Settingsから削除したり、typeをstringに戻したりといった事が当てはまります。

不要なテストカラムをData Settingsから削除すると以下のように無事全件取り込む事ができました。

Skipped lineがあったら通知をしてほしい

Skipped lineがあったときに通知をしてほしいと思うかと思います。デフォルトの設定だとSkipped lineが発生してもData ConnectorのJobはエラーとならずSuccessとなります。これではSkipped lineが発生しても気づかず、気づいたら全然データが入っていなかったという事になりかねません。 そういうときは以下のオプションを有効にしましょう。

Stop on invalid record?:

この項目にチェックをいれるとSkipped lineが発生するような場合にはJobがErrorになります。Treasure Workflowの_errorやmailオペレーターと組み合わせて頂くことで柔軟に通知を送信することが可能となります。

まとめ

インポートされた件数が想定より少ないときは、Data ConnectorがSkipしてしまっていることが殆どです。 ログをみてどこがおかしかったのかを確認しながら、Data Settingsを修正することで解消することができます。もし詰まってしまう事があればその際はトレジャーデータのサポートまでお問い合わせ下さい。

橘 樹男

Technical Support Engineeringチーム

新卒でSIerに入社し、金融系システムプロジェクトに携わる。複数プロジェクトを経験しながらプロジェクトマネジメントの基礎から、OSの設定や監視設定や運用など一般的なシステム構築についても学ぶ。次のゲーム会社ではインフラの知識を活かしながらオンラインゲームの運用・構築、ゲーム開発者向けの環境準備に従事。2019年にクラウドサービスの中を知りたいと思いトレジャーデータに入社。これまでと異なる分野が多く、慣れないことが多い中、より快適にTreasure Data CDPを快適に使ってもらえるように奮闘中。

得意領域 : クラウド含めたインフラ周辺領域、トラブルシューティング

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Back to top button