JSONコレクション表の使用

JSONコレクション表を使用すると、スキーマレス表の作成が容易になります。主キー・フィールドは、複数のNoSQLデータ型を使用して定義できます(「JSONコレクション表の作成」を参照)。INSERTまたはUPSERT文を使用して、テーブルにデータを追加できます。各行は単一のドキュメントであり、任意の数のJSONフィールドを含めることができます。

オプションのTTL値を使用してJSONコレクション表を作成するか、後で表を変更してTTL値を追加できます。JSONコレクション表に対するその他の変更は許可されません。

JSONコレクション表の重要性

JSONコレクション表は、データをドキュメントとしてのみ格納および取得するアプリケーションに役立ちます。これは、固定スキーマの使用が最適ではないアプリケーションにとって便利な開発パラダイムです。固定スキーマを持つ表では、作成時およびDML操作時に列名を指定する必要があります。固定スキーマ表のフィールドの追加または削除には、スキーマの変更が必要であり、これはコストのかかる操作です。

JSONコレクション表はスキーマレスであるため、表に対してドキュメントを追加または削除するためにスキーマを変更する必要はありません。JSONコレクション表の各行は、JSONフィールドの数が異なる場合があります。JSONフィールドは、JSON列名を事前に宣言することなく格納できます。

JSONコレクション表の作成

JSONコレクション表を作成するには、次の構文を使用できます。

構文

json_collection_definition ::= AS JSON COLLECTION

セマンティクス

JSONコレクション表は、1つ以上の主キー・フィールドを使用して作成します。表にデータを挿入すると、JSON型の列を明示的に宣言することなく単一のドキュメントが作成されます。ドキュメントには、任意の数のJSONフィールドを含めることができます。JSONフィールドは、有効なJSONデータ型である必要があります。データの挿入時にJSON型以外のデータ型を使用すると、例外が発生します。主キー・フィールドには、IDENTITY列およびUUIDを含めることができます。JSONコレクション表は、固定スキーマ表に変更できません。

表を複数リージョン表にする場合は、MR_COUNTERSを使用してJSONコレクション表を作成できます。MR_COUNTERSは、表の作成時に宣言する必要があり、ドキュメントの最上位フィールドのみである必要があります。ドキュメント内の他の場所にMR_COUNTERSを含めることはできません。

表の作成時にオプションのTTL値を指定できます。ALTER TABLE文を使用すると、TTL値のみを変更できます。

JSONコレクション表では、主キー・フィールドに対して次のデータ型がサポートされています。

表5-1 JSONコレクション表の主キー・フィールドのデータ型

フィールド・タイプ サポートされているデータ型
主キー・フィールド
  • integer
  • long
  • double
  • float
  • number
  • string

次の例は、JSONコレクション表の作成を示しています。表へのデータの挿入については、「JSONコレクション表への行の挿入」を参照してください。

サンプル・アプリケーションのJSONコレクション表

例5-11 ショッピング・アプリケーションのJSONコレクション表の作成

CREATE TABLE storeAcct(contactPhone string, primary key(contactPhone)) AS JSON COLLECTION 

説明:前述のDDL文では、ショッピング・アプリケーション用のJSONコレクション表を作成しています。この表には、contactPhoneが主キー・フィールドとして含まれています。DDLコマンドでは、主キー・フィールド以外のフィールドを指定する必要はありません。

表にデータを挿入すると、JSONコレクション表では、主キー・フィールド以外の挿入されたフィールドがJSONフィールドとして自動的に考慮されます。

複数の主キー・フィールドがあるJSONコレクション表

例5-12 IDENTITY列が主キー・フィールドの1つであり、TTL値が90日であるJSONコレクション表の作成

CREATE TABLE storeAcctComposite(contactPhone string, id integer generated by default as
      identity, primary key(contactPhone, id)) AS JSON COLLECTION USING TTL 90 DAYS  

説明:表には2つの主キーフィールドがあり、そのうちの1つはcontactPhoneフィールドで、もう1つはidです。これは、オーダーIDを自動生成するためのIDENTITY列として宣言されています。この例では、TTL値が90日である表を作成します。JSONコレクションのDDLでは、USING TTL句に続けて、TTLで作成する時間/日数を指定します。

MR_COUNTERSを含むJSONコレクション表

例5-13 2つのリージョンにMR_COUNTERSを使用した、ショッピング・アプリケーションのJSONコレクション表の作成

CREATE TABLE storeAcctMR(contactPhone string, primary key(contactPhone), mycounter as integer mr_counter) in regions FRA, LON AS JSON COLLECTION 

説明:前述のDDL文では、FRAとLONの2つのリージョンにMR_COUNTERデータ型を持つJSONコレクション表を作成しています。リージョンを作成するには、「CREATE REGION文」を参照してください。

表の作成時には、表列をMR_COUNTERとして、そのサブタイプとともに定義する必要があります。主キー・フィールドおよびMR_COUNTERSを除くデータをこの表に挿入すると、他のすべての指定されたフィールドがJSONフィールドとして暗黙的に追加されます。

ノート:

  • ドキュメント内のネストされたJSONフィールドでのMR_COUNTERSの宣言はサポートされていません。試行するとエラーが返されます。MR_COUNTERSは、ドキュメントの最上位フィールドである必要があります。

    例1:前述のstoreAcctMR表にデータを挿入した後のドキュメントの最上位フィールドのMR_COUNTER。
    {
      "contactPhone" : "1817113382",
      "address" : {
        "city" : "Houston",
        "number" : 401,
        "state" : "TX",
        "street" : "Tex Ave",
        "zip" : 95085
      },
      "firstName" : "Adam",
      "lastName" : "Smith",
      "mycounter" : 0
    }
    例2:この例では、ドキュメントのaddressフィールドにMR_COUNTER (counter)を宣言しようとしていますが、これはサポートされておらず、次のエラーが返されます。
    create table storeAcctMR(contactPhone  string, primary key(contactPhone), mycounter as integer mr_counter, address.counter as integer mr_counter) in regions FRA, LON as json collection
    
    
    Error handling command create table storeAcctMR(contactPhone string, primary key(contactPhone), mycounter as integer mr_counter, address.counter as integer mr_counter) in regions FRA, LON as json collection: Error: Error found when creating the table: MR Counter in JSON Collection may contain only alphanumeric values plus the character "_": address.counter
  • create table文に指定されているすべてのリージョンが事前定義されていることを確認します。表の作成時に使用できないリージョンを宣言すると、エラーが発生します。
  • スキーマの変更によるJSONコレクション表へのMR_COUNTERSの追加または削除はサポートされていません。