TeradataによるJSONのサポート - Teradata Database - 16.20

Teradata® Database JSONデータ型

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

JSON(Javascript Object Notation)はデータ交換形式になっており、Webアプリケーションでデータ送信のためによく使用されます。JSONはXMLに比べて、人にとって読み書きが容易で、マシンにとって解析と生成が容易なため、Webアプリケーション開発者に幅広く採用されてきました。Teradata Databaseでは、JSON文書を保存し、処理することができます。

Teradata DatabaseはJSONレコードをJSON文書として、またはリレーショナル形式で格納できます。Teradata Databaseでは次のJSONデータをサポートします。
  • テキストとバイナリ (BSON、UBJSON) の JSON データを格納できるストレージ形式。
  • 解析や検証など、JSONデータ型で動作するメソッド、関数、およびストアド プロシージャ。
  • 最大サイズ16MBまでのJSON文書から値を抽出し、その抽出データをリレーショナル形式で保存することができるシュレッディング機能。
  • SQLの問合わせ結果をJSON形式で公開できる公開機能。
  • スキーマを変更せずに新しい属性を追加できるスキーマレスまたは動的スキーマ。新しい属性を持つデータは即座に問合わせで使用できます。新しい列のない行はフィルタで除去できます。
  • JSONデータ型の抽出部分に対して既存の結合インデックス付け構造を使用します。
  • JSONデータへの詳細な分析を適用します。
  • ST_GeometryオブジェクトをGeoJSON値に、GeoJSON値をST_Geometryオブジェクトに変換する機能。
  • さまざまな最大長のJSONデータの内部圧縮を可能にします。
  • JSONデータ型の抽出部分の統計を収集します。
  • 標準的なSQLを使用してJSONデータを問合わせます。
  • JSONPathは、ワイルドカードを使ったシンプルな走査式と正規表現を提供することで、複雑なJSON 文書をフィルタリングしたり、ナビゲートすることを可能にします。

要件

Teradata DatabaseでJSONのサポートを有効にするには、DBS制御フィールドのEnableJSONをTRUEに設定する必要があります。 これはデフォルトの設定です。 詳細は、<ユーティリティ、B035-1102>を参照してください。

JSON のクライアント サポート

次のテーブルでは、Teradata Databaseのクライアント製品によって提供されるJSONデータ型サポートについて説明します。

クライアント製品 JSON のサポート
CLI DBS を全面的にネイティブ サポートしています。
ODBC

ODBCの仕様には、JSONの固有のデータ型コードはありません。したがって、ODBCドライバは、ODBC CLOBデータ型であるSQL_LONGVARCHARまたはSQL_WLONGVARCHARにJSONデータ型をマップします。メタデータは、SQL_LONGVARCHARにマップされるTeradata CLOBデータ型とSQL_LONGVARCHARにマップされるTeradata JSONデータ型とでは明らかに異なります。

ODBCドライバでは、LOB Input、Output、InputOutputのパラメータがサポートされます。したがって、JSONデータをロードできます。また、カタログ(データ ディクショナリ)関数ではJSONがサポートされます。

JDBC
  • Teradata JDBCドライバ15.00.00.11以降は、JSONデータ型をサポートしています。
  • Teradata JDBCドライバは、PreparedStatementまたはCallableStatement setObjectメソッドを使用して構造体の値をJSONデータ型として疑問符パラメータ マーカーにバインドするための、アプリケーションのTeradata固有の機能を提供します。アプリケーションではVARCHARまたはCLOBの値をJSON挿入先列に挿入することもできます。
  • JSON値を構造体の値として指定するTeradata固有の機能をアプリケーションが使用する場合、構造体の値にはString、Reader、Clob、またはnullのいずれかの属性が含まれる必要があります。構造体にReader属性が含まれる場合、構造体にはストリーム内の文字数を指定する整数型である第2の属性も含まれている必要があります。
  • JSON値は、Teradata DatabaseからCLOB値として取得されます。アプリケーションは、結果セット メタデータまたはパラメータ メタデータを使用して、CLOB値をJSON値から区別できます。
.NET データ プロバイダー
  • JSONデータ型は、CLOBとして外部化されています。アプリケーションは、TdClob、TdDataReader.GetChars、またはTdDataReader.GetStringを使用して、JSON値を取得できます。
  • アプリケーションは、Teradata DatabaseにStringまたはTextReaderとしてJSON値を送信できます。
  • スキーマ コレクション(データ ディクショナリ)も、JSONデータ型をサポートしています。
Teradata Parallel Transporter (TPT) JSON列は、CLOB列とまったく同じように扱われるので、同じ制限の対象です。JSON列は、16 MB(16,776,192のLATIN文字または8,388,096のUNICODE文字)を超えることはできません。TPTは、オブジェクト スキーマのJSONキーワードに対応しますが、CLOBに内部的に変換されます。インポートとエクスポートの両方が完全にサポートされています。
BTEQ

USINGデータ文でJSONキーワードを使用することはできません。したがって、CLOBまたはVARCHARとしてJSON値を参照する必要があります。VARCHARの場合、JSON値は64KB(64,000文字のLATIN文字または32,000文字のUNICODE文字)を超えることはできません。

現在、BTEQでは、サーバーからクライアントへの遅延モードLOB転送はサポートされていません。サーバーからクライアントへの非遅延モードのJSON転送のみがサポートされます。出力行の最大サイズは64KBに制限されています。

スタンドアロン ユーティリティ サポートしません。

Teradata Databaseのクライアント製品の詳細については、次のマニュアルを参照してください。

  • Teradata Call-Level Interface Version 2 Reference for Mainframe-Attached Systems、B035-2417
  • Teradata CLI V2リファレンス-ワークステーション接続システム、B035-2418
  • ODBC Driver for Teradataユーザー ガイド、B035-2509
  • Teradata JDBC Driverの参考文献(https://developer.teradata.com/connectivity/reference/jdbc-driverから入手可能)
  • Teradata Parallel Transporterリファレンス、B035-2436
  • Teradata Parallel Transporterユーザー ガイド、B035-2445
  • Basic Teradata Query Reference、B035-2414

用語

JSON文書またはJSONメッセージは、JSON形式に準拠した文字列です。SQLの関係でJSON値について説明するときには、JSON文書はJSONデータ型のインスタンス、または単にJSONインスタンスと呼ばれます。

オブジェクトとして構成されたJSON文書は、{}で囲まれています。配列として構成されたJSON文書は、[]で囲まれています。SQLの関係では、これらは両方ともJSONデータ型インスタンスになります。詳細は、JSON文字列の構文を参照してください。

次の例のように、シリアル化形式について説明する場合はそのままJSON文書と呼びます。JSON文書の構造について説明するときは、「配列またはオブジェクトとして構成されたJSON文書」または単に、JSON配列またはJSONオブジェクトと呼びます。以下は、JSON文書の例です。
{
    "name": "Product",
    "properties": {
        "id": {
            "type": "number",
            "description": "Product identifier",
            "required": true
        },
        "name": {
            "type": "string",
            "description": "Name of the product",
            "required": true
        },
        "price": {
            "type": "number",
            "minimum": 0,
            "required": true
        },
        "tags": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "stock": {
            "type": "object",
            "properties": {
                "warehouse": {
                    "type": "number"
                },
                "retail": {
                    "type": "number"
                }
            }
        }
    }
}