Teradata VantageによるJSONのサポート - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - JSONデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年9月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/gzn1554761068186.ditamap
dita:ditavalPath
ja-JP/gzn1554761068186.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

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

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

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

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

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

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

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

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

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

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

Standalone Utilities サポートしません。
Teradataのクライアント製品の詳細については、次のドキュメントを参照してください。
  • Teradata® CLI V2メインフレーム接続システム、B035-2417
  • Teradata® CLI V2ワークステーション接続システム、B035-2418
  • ODBC Driver for Teradata®ユーザー ガイド、B035-2509
  • Teradata JDBC Driverの参考文献(https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/frameset.htmlから入手可能)
  • Teradata® Parallel Transporterリファレンス、B035-2436
  • Teradata® Parallel Transporterユーザー ガイド、B035-2445
  • Basic Teradata®Queryリファレンス、B035-2414

用語

  • JSONドキュメントは、JSON形式に準拠する任意の文字列です。JSON文字列の構文を参照してください。
  • JSONドキュメントは、オブジェクトまたは配列として構造化できます。
  • JSONオブジェクトは、中括弧({ })で区切られるゼロ個以上の名前:値のペアで構成されます。
  • JSONオブジェクトの値部分には、単一の文字列、数値、ブール値(trueまたはfalse)、null、配列、またはオブジェクトを使用できます。
  • JSON配列は、角括弧([ ])で区切られたゼロ個以上の値の順序付けされたリストです。これらの値には、単一の文字列、数値、ブール値(trueまたはfalse)、null、配列、またはオブジェクトを使用できます。
  • VantageJSONデータ型として保存、使用される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"
                }
            }
        }
    }
}