ワイルドカード・データ型

Oracle NoSQL Databaseデータ・モデルには、次のワイルドカード・データ型が含まれています。

表2-4 ワイルドカード・データ型

データ型 説明
ANY 任意のNoSQL型のインスタンスは、ANY型のインスタンスでもあります。

{ "city" : "Santa Cruz", "zip" : 95008, "phones" : [ { "area" : 408, "number" : 4538955, "kind" : "work" }, { "area" : 831, "number" : 7533341, "kind" : "home" } ] }

"Santa Cruz"

95008

TRUE

'0x34 0xF5'

'2020-01-20T12:15:054'

[ 12, "foo", { "city":"Santa Cruz"}, [2, 3]]

ANYATOMIC 他の任意のアトミック型のインスタンスは、ANYATOMIC型のインスタンスでもあります。JSON NULL値もANYATOMICのインスタンスです。

"Santa Cruz"

95008

TRUE

'0x34 0xF5'

'2020-01-20T12:15:054'

ANYJSONATOMIC 数値型、文字列型およびブール型のインスタンスは、ANYJSONATOMIC型のインスタンスでもあります。JSON NULL値もANYJSONATOMICのインスタンスです。

"Santa Cruz"

95008

true

JSON JSON型は、すべての有効なJSON値を表します。具体的には、JSONのインスタンスは次のいずれかになります
  1. ANYJSONATOMICのインスタンス
  2. 要素がすべてJSONのインスタンスである配列
  3. フィールド値がすべてJSONのインスタンスであるマップ。

{ "city" : "Santa Cruz", "zip" : 95008, "phones" : [ { "area" : 408, "number" : 4538955, "kind" : "work" }, { "area" : 831, "number" : 7533341, "kind" : "home" } ] }

"Santa Cruz"

95008

true

[ 12, "foo", { "city":"Santa Cruz"}, [2, 3]]

ANYRECORD その他のRECORD型のインスタンスは、ANYRECORD型のインスタンスでもあります。 { "city" : "Santa Cruz", "zip" : 95008 }

データ型は、ワイルドカード型のいずれでもないない場合は正確と呼ばれ、複合型の場合は、その構成要素であるすべての型も正確になります。正確な型を持つ項目は、厳密に型指定されます。

ワイルドカード型は抽象であり、型としてワイルドカード型を持つことができる項目はありません。ただし、項目が正確ではない型を持つ場合があります。たとえば、項目の型がMAP (JSON)の場合があります。これは、その値が、異なる型のフィールド値を格納できるマップであることを示します(そのすべての値がJSON型に属している場合)。実際、MAP (JSON)は、すべてのjsonオブジェクト(jsonドキュメント)を表す型であり、ARRAY (JSON)はすべてのjson配列を表す型です。

JSONデータを表にロードするため、Oracle NoSQL Databaseは、入力JSONをJSONテキストを含む文字列またはストリームとして受け入れるプログラムAPIを提供しています。Oracle NoSQL Databaseは、入力テキストを内部的に解析し、その構成要素をここに示すデータ・モデルの値および型にマップします。具体的には、入力テキスト内に配列が検出されると、型がARRAY (JSON)である配列項目が作成されます。入力テキスト内にJSONオブジェクトが検出されると、型がMAP (JSON)であるマップ項目が作成されます。数字が検出されると、数値の実際の値に応じて、integer、long、doubleまたはnumber項目に変換されます。最後に、入力テキストの文字列は文字列項目にマップされ、ブール値はブール項目にマップされ、JSON NULLはJSON NULL項目にマップされます。一般に、この解析の最終結果はマップ、配列およびアトミック値のツリーです。永続記憶域の場合、ツリーはバイナリ形式にシリアライズされます。

JSON型のフィールドでは、表の行ごとにまったく異なる種類の値を持つことができるという意味で、JSONデータはスキーマレスです。たとえば、infoがJSON型のトップレベルの表列である場合、ある行ではinfoの値が整数、別の行ではdoubleとstringが混在した配列、3行目では他のマップ、配列およびアトミック値が混在したマップである可能性があります。さらに、JSON列またはフィールドに格納されたデータは、現在も有効なJSONインスタンスを生成する任意の方法で更新できます。そのため、各JSONツリー(メイン・メモリー内のツリー、またはディスク上のシリアライズされたバイト配列としてのツリー)は、その内容に関して自己記述的です。