プライマリ・コンテンツに移動
Oracle® Big Data Discovery Cloud Service Studioユーザー・ガイド

E65365-05
目次へ
目次
索引へ移動
索引

前
次
機械翻訳について

例外処理およびスクリプトのトラブルシューティング

「変換」では静的パーサーを使用して、Groovy動的入力動作の一部をオーバーライドし、変換をプレビューまたは保存するときに未定義の変数などの解析エラーを検出します。

重要

静的パーサーは、Groovyが静的型言語のように強制的に動作するため、変換ではGroovy動的入力機能は使用できません。 たとえば、宣言されていない変数は通常Groovyで許可されていますが、「変換」で解析エラーが発生します。

静的パーサーはまた、スクリプトで直接参照される属性が、データ・セット・スキーマで定義された属性と一致するかどうかを検証します。 一致しない属性(スペル・ミスのある属性など)は、エラーを生成します。

重要

静的パーサーは、変換に含まれるパラメータが、エンリッチメント関数などの一部のカスタム関数の行マップで参照される構文と一致するかどうかを検証しません。 関数からパラメータを誤って参照した場合、変換スクリプトは検証されませんが、パーサーはエラーを指定しません。 したがって、Transform APIリファレンス(このドキュメントまたはGroovydocのいずれか)をチェックし、行マップで関数パラメータが正しく参照されていることを確認してください。

属性を変換スクリプトに変数として含める場合、属性に使用するフォーマットは、静的パーサーによる処理方法に影響します。 属性の形式の詳細は、「変数の書式」を参照してください。

変換に解析エラーが含まれている場合、変換をプレビューまたは保存すると、「変換」により生成されるメッセージが「変換エラー」ダイアログ・ボックスに表示されます。 また、「変換エディタ」では、エラーが含まれる明細の横に赤いXアイコンが表示されます。 これらのアイコンの上にカーソルを置くと、エラーに関する詳細な情報が表示されます。

ダイアログ・ボックスを閉じ、エラーを修正してから再度変換をプレビューし、すべてのエラーが修正されたことを確認する必要があります。 変換は、エラーがなくなるまでスクリプトに保存できません。

Set関数の例外のトラブルシューティング

変換APIの次のセット関数は、複数割当属性でのみ実行できます(これらの属性はStudioの複数値属性と呼ばれます):
  • cardinality()
  • isSet()
  • isEmpty()
  • isMemberOf()
  • toSet()
  • toSingle()

これらの関数は、「変換」で実行できるインライン変換に属します。 これらのセット関数は、複数割当の属性の値セットに適用できます。

Studioで「変換」からこれらの関数を実行する場合、これらの関数の実行対象となる属性が単一割当て(単一値)属性の場合、属性のDgraphタイプによっては、変換APIがNULLまたは例外をスローする場合があります。

注意:

「探索」でデータ・セットを参照し、表ビューを選択することによって、属性が複数値かどうかを確認できます。 セル内に複数の値を含む列は、この列が複数値属性を表すことを示します。 また、「プロジェクト設定」 > 「データ・ビュー」でデータ・セットの複数値列の値を確認することもできます。

要約すると、変換を実行するときに例外を受け取った場合、変換を実行する属性が単一値かどうかを確認します。 この場合、セット変換関数は適用されません。

セキュリティ例外

変換スクリプトにサポートされていないGroovy言語機能が含まれている場合、パーサーは「変換エラー」ダイアログ・ボックスに表示されるセキュリティ例外をスローします。 エラーの原因となったコードを削除します。

セキュリティ例外の原因となるGroovy言語機能の詳細は、「Groovyの予約済キーワードおよびサポートされていない機能」を参照してください。

実行時例外のトラブルシューティング

静的パーサーは、すべてのエラー(特にデータの異常が原因の実行時例外)を検出できません。 「変換」では、通常、処理できないデータに対してnull値を戻すことで、このようなエラーを処理します。

変換スクリプトでnull値が生成される理由をより深く把握する必要がある場合は、tryブロックでコードをラップし、その出力をString型の新しい一時属性に設定します(プロジェクト・データ・セット表にString型の属性の新しい列として表示されます):
try {
    <transformation script>  // replace this with your transformation script code
    'OK'
  } catch (Exception ex) {
    ex.getMessage()
  }

変換スクリプトをプレビューすると、生成されるエラー・メッセージは、文字列タイプの一時列に出力されます。 デバッグ後は、tryブロックを削除して、一時属性を削除できます。

dateTime変換のトラブルシューティング

dateTimeオブジェクト(mdex:dateTime属性)を文字列オブジェクトに暗黙的に変換する場合、クラスタSparkジョブが実行される場所に応じて、異なる結果が表示される場合があります。 特に、結果のタイム・ゾーンは予想したものではない場合があります。

たとえば、次の文を考えてみます:
// mydatetime is an mdex:dateTime object
mydatetime = 1/1/1970 03:00:00 PM UTC
// convert to mdex:string-set object
new_set= toSet(mydatetime)

広範囲読取りクラスタがある場合、ジョブの実行場所がわからない場合があります。 ニューヨークのNYタイム・ゾーン用に構成されたマシンでジョブを実行すると、ESTがUTCより5時間進んでいるため、この結果は"Jan 1, 1970 10:00:00 AM"となります。 ただし、ジョブが、San Jose、CAタイム・ゾーンに対して構成されているマシンで実行される場合、結果は"Jan 1, 1970 07:00:00 AM"となります。

文字列としてmydatetimeを使用する場合は、明示的に変換することをお薦めします。 次に例を示します。
new_set = toSet(toString(mydatetime,"MMM d, yyyy HH:mm:ss a","UTC"))
この場合、タイム・ゾーンはSparkノードではなくユーザーによって指定されます。