JSONデータの検証

Teradata® Database JSONデータ型

brand
Software
prodname
Teradata Database
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1150-162K-JPN

JSONデータはデフォルトで自動的に検証されます。データのソースが信頼できる場合や正確な場合は、DBS制御のDisableJSONValidationフィールドまたはSET SESSION JSON IGNORE ERRORS属性を使用して妥当性検査を無効にできます。妥当性検査を無効にすると、パフォーマンスが向上することがあります。

DBS制御のDisableJSONValidationフィールドは、システム全体で妥当性検査を有効にするか、または無効にするかを制御します。 詳細は、<ユーティリティ、B035-1102>を参照してください。

現在のセッションの検証を無効にするには、次のステートメントを使用します。

SET SESSION JSON IGNORE ERRORS ON;

現在のセッションの検証を再度有効にするには、次ステートメントを使用します。

SET SESSION JSON IGNORE ERRORS OFF;
セッションまたはシステム レベルでJSON妥当性検査を無効にすると、次の問題が発生します。
  • 妥当性検査が無効でも、データベースにインポートされ、JSONテキストとして格納されたJSONテキストに、JSON文書の開始括弧および終了括弧の組み合わせが正しく一致することを確認する最小限の検証が行なわれます。例えば、'{'は、'}'と'一致し、'['は']'と一致します。この最小限の妥当性検査に失敗すると、エラーになります。
  • データベースにインポートされ、バイナリ ストレージ形式のいずれかで格納されたJSONテキストが検証されます。Teradataは、不適切なJSON文書をいずれかのバイナリ ストレージ形式に変換することを許可しません。この場合、JSON IGNORE ERRORSセッションの属性やDBS制御のDisableJSONValidationフィールドの設定値には影響を与えません。
  • バイナリ ストレージ形式を使用するJSON列に指定する最大長は、バイナリ形式でデータが収まる長さである必要があります。妥当性検査が無効な場合に、挿入されたバイナリ データが定義されている列の長さを超えるとエラーが報告されます。

    挿入されたバイナリ データが定義されている列の長さに収まり、シリアル化された(テキスト)形式がその長さを超える場合は、テキストとしてデータにアクセスしようとするとエラーが報告されます。

  • BSON形式でデータベースにインポートされ、BSON 形式で格納されたJSONデータは、検証せずに受け入れられます。妥当性検査が完全に無効になっているので、問題が発生してもエラーは報告されません。
  • JSONデータをUBJSON形式でデータベースにインポートすることはできません。Teradataは無効なデータを変換できないので、UBJSONデータはインポート元の形式から変換するときに常に検証されます。
BSONは、MongoDBのデフォルトの文書格納スキーマです。BSONデータがMongoDBで有効かどうかを示す追加の制限が記載されています。その制限は、次のとおりです。
  • ユーザーのドキュメント要素名は、'$' 文字で始めることはできません。
  • ユーザー ドキュメントの要素名は、'.'を含めることはできません。
  • 要素name _idは、プライマリ キーのIDとして使用するために予約されていますが、そのフィールドで固有なデータを格納できます。

妥当性検査が有効になっていても、BSONとしてデータを格納しているJSON列にデータを挿入するときにMongoDBで必要なレベルの妥当性検査は実行されません。ただし、AsBSONメソッドには、この厳密な妥当性検査を実行できるオプションのパラメータが用意されています。

BSON_CHECK関数を使用して、BSON形式のJSONデータがBSON構文に準拠していることを検証できます。データが有効な場合、BSON_CHECK関数はOKを返します。BSON_CHECK関数には、BSON構文がMongoDBで有効なことを検証する厳密な妥当性検査を実行するかどうかを指定できるオプションのパラメータもあります。

また、JSON_CHECK関数を使用して、JSON文字列がJSON構文に準拠していることを検証できます。JSON文字列が有効な場合、JSON_CHECK関数はOKを返します。