SQLAdvancedExamplesスクリプト
SQLAdvancedExamples
スクリプトにより、次の表が作成されます。
CREATE TABLE Persons (
id integer,
firstname string,
lastname string,
age integer,
income integer,
lastLogin timestamp(4),
address record(street string,
city string,
state string,
phones array(record(type enum(work, home),
areacode integer,
number integer
)
)
),
connections array(integer),
expenses map(integer),
primary key (id)
);
このスクリプトでは、次の表の行もインポートされます。
{
"id":1,
"firstname":"David",
"lastname":"Morrison",
"age":25,
"income":100000,
"lastLogin" : "2016-10-29T18:43:59.8319",
"address":{"street":"150 Route 2",
"city":"Antioch",
"state":"TN",
"zipcode" : 37013,
"phones":[{"type":"home", "areacode":423,
"number":8634379}]
},
"connections":[2, 3],
"expenses":{"food":1000, "gas":180}
}
{
"id":2,
"firstname":"John",
"lastname":"Anderson",
"age":35,
"income":100000,
"lastLogin" : "2016-11-28T13:01:11.2088",
"address":{"street":"187 Hill Street",
"city":"Beloit",
"state":"WI",
"zipcode" : 53511,
"phones":[{"type":"home", "areacode":339,
"number":1684972}]
},
"connections":[1, 3],
"expenses":{"books":100, "food":1700, "travel":2100}
}
{
"id":3,
"firstname":"John",
"lastname":"Morgan",
"age":38,
"income":100000000,
"lastLogin" : "2016-11-29T08:21:35.4971",
"address":{"street":"187 Aspen Drive",
"city":"Middleburg",
"state":"FL",
"phones":[{"type":"work", "areacode":305,
"number":1234079},
{"type":"home", "areacode":305,
"number":2066401}
]
},
"connections":[1, 4, 2],
"expenses":{"food":2000, "travel":700, "gas":10}
}
{
"id":4,
"firstname":"Peter",
"lastname":"Smith",
"age":38,
"income":80000,
"lastLogin" : "2016-10-19T09:18:05.5555",
"address":{"street":"364 Mulberry Street",
"city":"Leominster",
"state":"MA",
"phones":[{"type":"work", "areacode":339,
"number":4120211},
{"type":"work", "areacode":339,
"number":8694021},
{"type":"home", "areacode":339,
"number":1205678},
{"type":"home", "areacode":305,
"number":8064321}
]
},
"connections":[3, 5, 1, 2],
"expenses":{"food":6000, "books":240, "clothes":2000, "shoes":1200}
}
{
"id":5,
"firstname":"Dana",
"lastname":"Scully",
"age":47,
"income":400000,
"lastLogin" : "2016-11-08T09:16:46.3929",
"address":{"street":"427 Linden Avenue",
"city":"Monroe Township",
"state":"NJ",
"phones":[{"type":"work", "areacode":201,
"number":3213267},
{"type":"work", "areacode":201,
"number":8765421},
{"type":"home", "areacode":339,
"number":3414578}
]
},
"connections":[2, 4, 1, 3],
"expenses":{"food":900, "shoes":1000, "clothes":1500}
}
loadコマンドを使用して、SQLAdvancedExamplesスクリプトを実行します。
> cd <installdir>/examples/sql
> java -jar <KVHOME>/lib/sql.jar -helper-hosts <host>:<port> \
-store <storename> load \
-file <KVHOME>/examples/sql/SQLAdvancedExamples.cli
ノート:
Persons表のスキーマは、表内の他の個人に関連付けることができる個人をモデル化します。すべての関連付けは、整数の配列で構成されるconnections列に格納されます。各整数は、その個人が関連付けられる個人のIDです。connections配列内のエントリは降順でソートされ、関連付けの強さを示します。たとえば、個人3のレコードを見ると、John Morganに関連付け[1, 4, 2]があることがわかります。配列要素の順序は、Johnとの関連付けが最も強いのが個人1、次に関連付けが強いのが個人4、最も関連付けが弱いのが個人2であることを示しています。
Persons表のレコードには、整数マップとして宣言されるexpenses列も含まれています。このマップには、各個人について、文字列項目タイプとその項目に対する支出金額を表す整数のキーと値のペアが格納されています。たとえば、あるレコードには支出として{"food":900, "shoes":1000, "clothes":1500}が含まれ、別のレコードには異なる項目が含まれています。支出をマップ・タイプとしてモデル化する利点の1つは、個人ごとに異なるカテゴリを使用することが容易になることです。表のスキーマを変更せずに、カテゴリを動的に追加または削除する必要が後から生じた場合、マップで対応できます。このマップに関する注意点は、これは整数マップであり、常にキーと値のペアが含まれ、キーは常に文字列であるということです。