エラーメッセージ集
  • 18 Dec 2023
  • ダーク
    ライト
  • PDF

エラーメッセージ集

  • ダーク
    ライト
  • PDF

Article Summary

troccoで表示される、エラーメッセージの原因および対処法を説明するページです。

本記事で対応するエラーメッセージ

本ページでは、以下ログ内に表示されるエラーメッセージについて紹介しています。

  • プレビューエラーログ
  • 実行エラーログ
  • 実行ログ

転送先BigQuery

BigQueryとの接続時に発生しうるエラー

org.embulk.exec.PartialExecutionException: java.net.SocketException: Connection or outbound has closed

考えられる原因

troccoが転送先BigQueryへ接続するときにまれに発生する、ネットワーク瞬断によるエラーです。
大半のケースにおいて、ジョブを再実行することでエラーを解消できます。

対処

転送設定もしくはワークフロー定義に、リトライ設定を追加することでエラーを回避できます。

  • 転送設定の場合:
    • 転送設定STEP2のジョブ設定タブにて、最大リトライ回数を1以上に設定します。
  • ワークフロー定義の場合:
    • ジョブ実行設定のリトライ回数を1以上に設定します。

JSONでネストされたカラムをBigQueryへ投入するときのエラー

Field <カラム名> is type RECORD but has no schema.

考えられる原因

troccoにてJSON型として定義しているカラムを、RECORD型として転送しようとした場合に発生するエラーです。
具体的には、下記の状況においてエラーが発生します。

  • 転送設定STEP2のデータ設定タブのカラム定義にて、データ型としてjsonと設定しているカラムを
  • 転送設定STEP2の出力オプションタブのカラム設定にて、データ型としてRECORDと設定して転送しようとする

対処

あらかじめテンプレート扱いとするテーブルをBigQuery上に作成することで対処可能です。

  1. BigQuery側にて、転送先予定のデータセット配下に、今回転送したいテーブルと同一のスキーマを持つテーブルを作成します。
  2. troccoの、転送設定STEP2の出力オプションタブのスキーマ情報をテンプレートとして参照するテーブルにて、前手順で作成したテーブル名を入力します。

転送先kintone

転送先テーブル側で対応していないデータ型のカラムを転送した場合のエラー

Caused by: com.kintone.client.exception.KintoneApiRuntimeException: HTTP error status 400, {"code":"CB_IJ01","id":"<ID>","message":"不正なJSON文字列です。"}

考えられる原因

troccoで定義しているカラムのデータ型を、転送先kintoneのテーブルに定義しているデータ型が対応していない場合などに発生するエラーです。
なお、上記エラーメッセージに含まれる"code":"CB_IJ01"は、転送先テーブルに対して値(troccoで形成されるJSON)が正しくないときに出力されます。

対処

転送設定STEP2の出力オプションタブのカラム設定にて、別のデータ型を設定してください。

転送元BigQuery

Google Spreadsheetsを外部テーブルとして参照しているときのエラー

bigquery job failed: Access Denied: BigQuery BigQuery: Permission denied while getting Drive credential.

考えられる原因

データ取得元のBigQueryテーブルが、外部テーブルとしてGoogle Spreadsheetsを参照しているときに起きるエラーです。
現在、troccoの転送元BigQueryでは、外部テーブルとしてGoogle Spreadsheetsを参照しているテーブルの転送に対応していません。

対処

BigQuery上で、外部テーブルを参照していないテーブルを作成し、そのテーブルをデータ取得元テーブルとして設定してください。

転送元MySQL

MySQLへの接続が確立できないときのエラー

Error: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

考えられる原因

MySQLとの接続が確立できないときに発生するエラーです。
具体的には、下記のようなケースが考えられます。

  • MySQL側のストレージ容量がFULLになっていて、再起動を繰り返している。
  • タイムアウト設定値内の時間でMySQL側からレスポンスがない。
    • 本現象は、MySQLに対してバージョンアップ等の変更が加わった場合に発生することがあります。

対処

  • まず、MySQL側の起動状況を確認してください。
  • MySQLの起動状況に問題がない場合、以下のいずれかを行ってください。
    • troccoの転送設定STEP2の入力オプションタブにて、ソケットタイムアウトの値を伸ばす。
    • MySQLのnet_read_timeoutの値を伸ばす。

SSH/SSM接続を確立できないときのエラー

SSH接続時にエラーが発生しました。設定をご確認ください。Net::SSH::Proxy::ConnectError: Failed to connect to your bastion host. Please check your SSM configuration.

考えられる原因

MySQLやSSH接続・SSM接続の環境に起因して発生するエラーです。

対処

以下のいずれかの対処を行ってください。

  • sshdの同時接続数や、ログ(/var/log/secure)などを確認すると、問題となった箇所が見つかる可能性があります。
    sshdの同時接続数上限を引き上げた上で、ジョブを再実行してください。
  • 一時的な環境の問題に起因している可能性もあるため、時間をおいて再実行してください。
    それでも頻発する場合は、troccoの転送設定STEP2の「ジョブ設定」にてリトライ設定を追加してください。

転送元Redshift

転送元データが1000行を超えるときのエラー

Fetch size 10000 exceeds the limit of 1000 for a single node configuration. Reduce the client fetch/cache size or upgrade to a multi node installation

考えられる原因

Redshiftにおける、fetchサイズが1000行より多いと取得できないという制約によって、troccoでの取得データが1000行を超えるとエラーが発生します。
fetchサイズを1000行以下に設定する必要があります。

対処

troccoの転送設定STEP2の入力オプションタブにて、カーソルが一度に処理するレコード数1000以下に変更してください。

転送元ファイルストレージ系(S3、GCS等)

本エラーメッセージが表示されうるコネクタについて、ファイル・ストレージ系コネクタを参照ください。

数値型・日時型のカラムに対応しない文字が入っているときのエラー

org.embulk.spi.DataException: Invalid record at <行数>
Caused by: org.embulk.standards.CsvParserPlugin$CsvRecordValidateException: java.lang.NumberFormatException: For input string: ""

考えられる原因

数値型・日時型として推論されたカラム内に、対応外の文字(Nullや空文字など)が含まれている場合に発生するエラーです。
troccoではEmbulkの仕様により、数値型および日時型のカラムに対応外の文字が含まれると、エラーが発生します。

より具体的には、下記のケースにおいて発生します。

  • troccoの転送設定STEP2遷移時に実行される自動データ設定において、カラムのデータ型が数値型または日時型として推論される
  • データ型が数値型・日時型として推論されたカラムに、対応外の文字が含まれる

対処

2通りの対処が考えられます。

文字列型に変換して転送

  1. 転送設定STEP2のデータ設定タブのカラム定義にて、該当のカラムのデータ型をstringに設定します。
  2. 変更をプレビューをクリックします。

対応外の文字を任意の数字に置換して転送

※転送先によっては、出力オプションタブのカラム設定ができないため、以下の対処は取れないことがあります。

  1. 転送設定STEP2のデータ設定タブの文字列 正規表現置換にて、前述の対象外の文字を任意の数字に変換します。
  2. 転送設定STEP2の出力オプションタブのカラム設定にて、該当カラムのデータ型を数値型(INTEGER型など)に設定します。

転送元Salesforce

Salesforce側の設定不足によるエラー

Setup::Error::ConfigError: (INVALID_LOGIN) INVALID_LOGIN: Invalid username, password, security token; or user locked out.

考えられる原因

troccoからSalesforceにログインできないときに発生するエラーです。
具体的には、下記のようなケースが考えられます。

  • Salesforce側でIP制限をかけており、troccoのIPアドレスが許可されていない
  • SalesforceのログインURLに制限をかけている
  • 接続情報に紐づけたSalesforceアカウントに対し、APIを利用する権限が付与されていない

対処

数値型カラムに数値以外が入っているときのエラー

cannot cast String to long: "-"NumberFormatException: For input string: "-"

考えられる原因

数値型カラムに数字以外の文字が含まれているときに発生するエラーです。
上記のエラーメッセージでは、記号(ハイフン)が数値型のカラムに入っていることによってエラーが発生しています。

対処

2通りの対処が考えられます。

文字列型に変換して転送

  1. 転送設定STEP2のデータ設定タブのカラム定義にて、該当のカラムのデータ型をstringに設定します。
  2. 変更をプレビューをクリックします。

対応外の文字を任意の数字に置換して転送

※転送先によっては、出力オプションタブのカラム設定ができないため、以下の対処は取れないことがあります。

  1. 転送設定STEP2のデータ設定タブの文字列 正規表現置換にて、前述の対象外の文字を任意の数字に変換します。
  2. 転送設定STEP2の出力オプションタブのカラム設定にて、該当カラムのデータ型を数値型(INTEGER型など)に設定します。

転送元kintone

トークンに権限が付与されていないときのエラー

アプリID取得エラー
予期せぬエラーが発生しました。troccoのサポートチームまでお問い合わせください。

考えられる原因

転送設定STEP1でアプリIDを取得できないときに表示されます。
接続情報に使用しているトークンに「レコード閲覧権限」「レコード追加権限」のいずれもが付与されていないときに発生するエラーです。

対処

接続情報に使用しているトークンに、kintone側で「レコード閲覧権限」「レコード追加権限」を付与してください。
権限の詳細については公式ドキュメントを確認してください。

転送元Google Spreadsheets

スプレッドシートに存在しないシート名を指定したときのエラー

Error: (ClientError) badRequest: Unable to parse range: <sheet name>

考えられる原因

転送設定STEP1で設定したシート名と、シートのURLに指定したスプレッドシート上のシート名が違っている場合に発生するエラーです。

対処

シートのURLに指定したファイルを開き、以下を確認してください。

  • シート名が存在しているか
  • シート名に意図しないスペースなど誤字がないか
    image.png

転送元Facebook Ads Insights

Facebook APIでの処理打ち切りによるエラー

async was aborted because the number of retries exceeded the limit

考えられる原因

Facebook APIに対するリクエストに時間がかかりすぎた場合(約15分以上)に、Facebook API側で自動的に処理を打ち切ることによって発生するエラーです。
本エラーは取得データが多すぎることによって発生する場合があります。

対処

troccoの転送設定STEP1にて、データ取得期間の範囲を狭めてください。

転送元X Ads (旧Twitter Ads)

トークンにAPI利用権限が付与されていないときのエラー

{"errors":[{"code":"UNAUTHORIZED_CLIENT_APPLICATION","message":"The client application making this request does not have access to Twitter Ads API"}],"request":{"params":{}}}

考えられる原因

以下の原因が考えられます。

  • Twitter Ads API利用申請が承認されていない
  • API利用申請が承認される前に生成したトークンを接続情報に登録している

対処

Twitter Ads APIの利用申請が承認されているか確認してください。
承認される前にトークンを生成した場合は、以下の順でTwitter Ads API利用申請を行い、トークンを生成してください。

  1. API利用を申請する
  2. Ads API利用を申請する
  3. トークンを生成する

転送元LINE広告

データ取得期間の日付フォーマットに誤りがあるときのエラー

code: 400. {"errors":[{"reason":"INVALID_VALUE","message":"the value is invalid","property":"since"}]}

考えられる原因

転送設定STEP1のダウンロード種別パフォーマンスレポートを選択したときに指定する、データ取得期間の日付フォーマットが誤っているときに発生するエラーです。

対処

データ取得期間の日付フォーマットを%Y-%m-%d(YYYY-MM-DD)の形式で指定してください。(例:2023-02-01)
カスタム変数を使用している場合は、カスタム変数の日付フォーマットも%Y-%m-%dの形式で指定してください。

転送元App Store Connect API

接続情報の秘密鍵に誤りがあるときのエラー

Error: org.embulk.util.retryhelper.RetryGiveupException: org.apache.http.HttpException: Request is not successful, code=401, body={[0x2b][0x2c]"errors": [{[0x39][0x3a][0x3b]"status": "401",[0x4c][0x4d][0x4e]"code": "NOT_AUTHORIZED",[0x68][0x69][0x6a]"title": "Authentication credentials are missing or invalid.

考えられる原因

転送設定に使用している接続情報に登録した秘密鍵の入力時に、---BEGIN *------END *---の箇所を削除しているなど、秘密鍵の文字列をすべて入力していないときに発生するエラーです。

対処

発行した秘密鍵の文字列をすべてコピーし、接続情報の秘密鍵の欄にペーストして保存してください。

接続情報のIssuer IDに必要な権限が付与されていないときのエラー

Error: org.embulk.util.retryhelper.RetryGiveupException: org.apache.http.HttpException: Request is not successful, code=403, body={[0x2b]  "errors" : [ {[0x3c]    "id" : "xxxxxx",[0x6f]    "status" : "403",[0x85]    "code" : "FORBIDDEN_ERROR",[0xa5]    "title" : "This request is forbidden for security reasons",[0xe5]    "detail" : "The API key in use does not allow this request"[0x125]  } ][0x12b]}

考えられる原因

転送設定に使用している接続情報に登録したIssuer IDに、以下の必要な権限が付与されていないときに発生するエラーです。

対処

接続情報に登録したIssuer IDに対し、App Store Connect API側で「Reporting and Analytics」のFinanceの権限を付与してください。

転送設定

プレビュー時・ジョブ実行時に取得データが存在しないときのエラー

Error: No input records to preview

考えられる原因

エラーが表示されるタイミングで原因が異なります。

転送設定STEP2のプレビュー時にエラーが表示される場合

転送設定STEP1で設定した転送元から1件もデータが取得できなかった場合に、プレビュー表示がエラーになります。

転送ジョブを実行したときに該当エラーが表示される場合

スキーマ変更検知をオンにしている状態で転送ジョブを実行し、転送元から1件もデータが取得できなかった場合に、ジョブがエラーになります。
具体的には、以下のケースが考えられます。

  • 転送方法に差分転送を選択しており、前回のジョブ実行後に増分レコードが生成されなかった。
  • 指定したデータ取得期間に内にレコードが生成されなかった。

対処

転送設定STEP2のプレビュー時にエラーが表示される場合

  • データ取得期間が設定できる転送元の場合
    1. データ取得期間の範囲をデータが存在する期間まで広げてください。
    2. 自動データ設定を実行もしくはSTEP2で変更をプレビューをクリックし、プレビューが表示されるか確認してください。
  • レコードの絞り込みを設定できる転送元の場合
    1. クエリなどでレコードを絞り込んでいる場合、絞り込みを解除してください。
    2. 自動データ設定を実行もしくはSTEP2で変更をプレビューをクリックし、プレビューが表示されるか確認してください。
  • ファイル・ストレージ系の転送元の場合
    1. 指定したパスにファイルが存在することを確認してください。
    2. パスの指定方法が間違っていないことを確認してください。

転送ジョブを実行したときに該当エラーが表示される場合

前述の原因によってエラーが表示されている場合、それは想定通りの挙動です。
レコードが生成されてから、あらためてジョブを実行してください。

転送データが膨大なためメモリリークが起きたときのエラー

OutOfMemoryError: GC overhead limit exceeded

考えられる原因

一度のジョブで転送するデータ量がtroccoの処理能力を上回ってしまい、
troccoのジョブ実行コンテナのメモリを使い切っている場合に発生するエラーです。
より具体的には、下記のケースにおいて発生します。

  • データの取得時:troccoの転送設定の内容によって、取得対象のデータ量が膨大になる
  • データの投入時:転送先コネクタ側の同時接続数などの設定内容によって、処理量が膨大になる

対処

2通りの対処が考えられます。

転送データを分割する

転送元の設定により、取得したデータ量が膨大である場合、一度に取得するデータ量を減らす必要があります。
たとえば、転送元の設定の以下の部分を、取得データ量が少なくなるよう調整してください。

  • 転送元ファイル・ストレージ系:パスプレフィックス
    • 一度に取得するファイル数を減らせるよう、階層を深く指定してください。
    • カスタム変数を埋め込むことで1ファイルずつ取得することもできます。
  • 転送元データベース系:クエリ
    • WHERE句を記述することによって、一度に取得するレコード数を減らしてください。
    • WHERE句にカスタム変数を埋め込むことによって、実行のたびに取得するレコードを動的に指定できます。
  • 転送元クラウドアプリケーション・広告系:データ取得期間
    • 期間を絞り込むことによって、一度に取得するレコード数を減らしてください。
    • データ取得の開始日・終了日にそれぞれカスタム変数を埋め込むことができます。

カスタム変数ループ実行を利用することで、一度に取得するデータを絞り込みつつ、膨大なデータを転送することも可能です。

転送先をチューニングする

転送先サービスの同時接続数の上限を引き上げてください。troccoの転送時に、転送先サービスに複数の処理をリクエストすることがあるためです。
たとえば、転送先Snowflakeであれば、同時実行クエリの制限を参照してください。
また、troccoで同時に複数ジョブを実行すると、転送先サービスに対して多くの処理をリクエストすることになります。
同時刻に実行するジョブが多くなりすぎないよう、スケジュール設定やワークフローの並列実行数を調整してください。

新規追加カラムにデフォルト値がない場合のエラー

columns: Column src '<new_column>' is not found in inputschema. Column '<new_column>' does not have "type" and "default" Suppressed: NullPointerException

考えられる原因

転送設定STEP2のカラム定義でカラムを追加し、変更をプレビューした際に、以下の条件に合致したときに発生するエラーです。

  • 元カラムが「新規追加」であること
  • デフォルト値が未入力(空欄)であること

カラム定義にてカラムを手動追加した場合は、デフォルト値の欄に任意の値を入力する必要があります。

対処

新規追加カラムにデフォルト値を入力し、変更をプレビューをクリックして変更を反映することで、エラーは解消します。
転送先にデフォルト値を格納したくない場合、以下の方法で空文字を格納することが可能です。

  • カラム定義で、デフォルト値に、任意の値を入力する
    • 例:999
  • 文字列 正規表現置換で、デフォルト値に入力した値を空文字に置換する
    • 例:
      • 正規表現パターン:999
      • 置換させる文字列:何も入力しない(空欄)

上記方法の結果、空文字が格納されます。
NULLを格納したい場合は、プログラミングETLのご利用を検討ください。

プログラミングETLに問題があるときのエラー

Error: org.embulk.exec.ExecutionInterruptedException: java.lang.Exception: Internal API Error

考えられる原因

プログラミングETLに記述しているコードに誤りがあったり、処理データ量が多すぎてプログラミングETLに割り当てられているメモリを使い切っているときなどに発生するエラーです。

対処

コードを確認のうえ、処理データ量が少なくなるようにコードを修正してください。

転送元・転送先Googleが提供するサービス

Googleが提供するサービスの接続情報に誤りがあるときのエラー

org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: java.lang.IllegalArgumentException:
Caused by: java.lang.IllegalArgumentException: expected primitive class, but got: class com.google.api.client.json.GenericJson

考えられる原因

Googleが提供するサービス(BigQuery、Google Spreadsheets、Google Driveなど)の接続情報を、JSONキーを使用して作成したとき、JSONキーの内容に誤りがある場合に起きるエラーです。
本エラーは、接続情報の作成時に、JSONキーを不完全な形で入力することで発生することが多いです。

対処

  1. 作成したJSONキーの値を任意のテキストエディタで開き、テキストを全選択した上でコピーします。
  2. 接続情報編集画面のJSONキー入力項目にペーストして、接続情報を保存します。

この記事は役に立ちましたか?