JSONコレクション表への行の挿入

JSONコレクション表を使用すると、表の作成時に主キー・フィールドを柔軟に宣言できます。データの挿入時には、主キー・フィールドとドキュメント内の他のフィールドの値を指定する必要があります。

データを挿入すると、各行は任意の数のJSONフィールドを含む単一のドキュメントとして挿入されます。データを挿入するには、JSONオブジェクト({})内のフィールドに値を指定するか、明示的に記述する必要があります。

次のいずれかの方法を使用して、データをJSONコレクション表に挿入します:

  • 明示的に宣言されたフィールド名の使用: INSERT文で主キー・フィールドの後に最上位のJSONフィールド名を明示的に指定する必要があります。values句を使用して、対応する値を含めます。最初の値は、主キー・フィールドに関連付けられている値である必要があります。この後に、JSONドキュメントに指定された対応するフィールド名に関連付けられている値が続く必要があります。

例7-1 フィールド名の明示的な宣言による、ショッピング・アプリケーション用に作成されたJSONコレクション表へのデータの挿入

INSERT into storeAcct(contactPhone, firstName, lastName, address, cart) values("1817113382", "Adam", "Smith", {"street" : "Tex Ave", "number" : 401, "city" : "Houston", "state" : "TX",   "zip" : 95085}, [{"item" : "handbag", "quantity" : 1, "priceperunit" : 350},{"item" : "Lego", "quantity" : 1, "priceperunit" : 5500}])

説明:前述の例では、主キーとしてcontactPhoneを指定し、その後に買物客のその他の詳細をJSONフィールドとして指定して、買物客のデータをショッピング・アプリケーション表に挿入しています。買物客の詳細は、JSONデータとして内部的に格納されます。JSONコレクション表では、ドキュメント自体の列名を指定せず、ドキュメント内のJSONフィールドのみを指定することに注意してください。

同じテーブルに追加のフィールドを持つ別の行を追加できます。

INSERT into  storeAcct(contactPhone, firstName, lastName, gender, address, notify, cart, wishlist) values("1917113999", "Sharon", "Willard", "F", {"street" : "Maine", "number" : 501, "city" : "San Jose", "state" : "San Francisco",   "zip" : 95095},"yes", [{"item" : "wallet", "quantity" : 2, "priceperunit" : 950},{"item" : "wall art", "quantity" : 1, "priceperunit" : 9500}], [{"item" : "Tshirt", "priceperunit" : 500},{"item" : "Jenga", "priceperunit" : 850}])

前述の文では、最初に挿入された行と比較すると、gendernotifywishlistなどのフィールドを追加して買物客のデータを挿入しています。wishlistフィールドは、買物客が欲しい物リストに登録したアイテムの詳細を含むJSON配列です。

  • 位置値の使用: 1つのJSONオブジェクトにカプセル化された名前/値のペアとして、主キー・フィールド値の後にドキュメント・フィールドを指定する必要があります。ドキュメントのフィールドは、JSONデータ型の形式に従う必要があります。適合していない場合は例外が発生し、エラー・メッセージが表示されます。

例7-2 位置値を指定した、ショッピング・アプリケーション用に作成されたJSONコレクション表へのデータの挿入

INSERT into storeAcct values("1817113382", {"firstName" : "Adam", "lastName" : "Smith", "address" : {"street" : "Tex Ave", "number" : 401, "city" : "Houston", "state" : "TX",   "zip" : 95085}, "cart" : [{"item" : "handbag", "quantity" : 1, "priceperunit" : 350},{"item" : "Lego", "quantity" : 1, "priceperunit" : 5500}]})

説明:この挿入文では、要素の位置値を使用して、前述の例7-1と同じデータを挿入しています。values句に続いて主キー・フィールドの値、その後にドキュメントの名前/値のペアの残りを含むJSONオブジェクト{}を使用します。

その他の例:

例7-3 MR_COUNTERを使用した、ショッピング・アプリケーションのJSONコレクション表へのデータの挿入

INSERT into  storeAcctMR(contactPhone, firstName, lastName, address, cart, mycounter) values("1817113382", "Adam", "Smith", {"street" : "Tex Ave", "number" : 401, "city" : "Houston", "state" : "TX",   "zip" : 95085}, [{"item" : "handbag", "quantity" : 1, "priceperunit" : 350},{"item" : "Lego", "quantity" : 1, "priceperunit" : 5500}], 0)
説明: MR_COUNTERを持つJSONコレクションテーブルにデータを挿入するときは、MR_COUNTERに値0を指定する必要があります。

ノート:

  • ゼロ以外の値を指定すると、指定された値は無視され、値0が挿入されます。
  • MR_COUNTER値のINSERT句にキーワードDEFAULTを指定することはできません。
  • MR_COUNTER値がスキップされるか、INSERT文にDEFAULTが指定されると、エラーが返されます。詳細は、「MR_COUNTERデータ型のJSON列への行の挿入」を参照してください。
SELECT contactPhone, firstName, mycounter FROM storeAcctMR where contactPhone = "1817113382"
出力:
{
  "contactPhone" : "1817113382",
  "firstName" : "Adam",
  "mycounter" : 0
}

例7-4 複数の主キー・フィールドを持つJSONコレクション表への買物客のデータの挿入

INSERT into storeAcctComposite(contactPhone, firstName, lastName, address, orders) values("1417114488", "Doris", "Martin", {"Dropbox" : "Presidency College", "city" : "Kansas City", "state" : "Alabama",   "zip" : 95065}) RETURNING *

説明: storeAcctCompositeテーブルには、contactPhoneフィールドとidフィールドという2つの主キー・フィールドが含まれています。表の作成については、JSONコレクションのコンポジット・キーを参照してください。購入したアイテムのオーダーIDがショッピング・アプリケーションで自動生成されるため、表の作成時にidフィールドがIDENTITY列として宣言されます。データの挿入時に、contactPhone主キー値をドキュメント・フィールドとともに指定する必要があります。idフィールド値を指定しないと、IDENTITYフィールド値が自動生成されます。IDENTITY列の詳細は、「IDENTITY列を含む行の挿入」を参照してください。

出力:
{
  "contactPhone" : "1417114488",
  "id" : 1,
  "address" : {
    "Dropbox" : "Presidency College",
    "city" : "Kansas City",
    "state" : "Alabama",
    "zip" : 95065
  },
  "firstName" : "Doris",
  "lastName" : "Martin"
}

APIを使用したJSONコレクション表へのデータの挿入

サポートされている言語ドライバ(SDK)を使用すると、JSONコレクション表を作成して、その表にデータを挿入できます。主キー・フィールドは、NoSQLデータ型の許容されるサブセットを使用して定義できます。詳細は、表5-1を参照してください。

言語SDKは、固定スキーマ表と同様に、JSONコレクション表の作成またはデータの挿入を処理します。APIを使用したJSONコレクション表の作成および表へのデータの挿入の例については、開発者ガイド表の作成に関する項のAPIを使用した表の作成を参照してください。