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つは、個人ごとに異なるカテゴリを使用することが容易になることです。表のスキーマを変更せずに、カテゴリを動的に追加または削除する必要が後から生じた場合、マップで対応できます。このマップに関する注意点は、これは整数マップであり、常にキーと値のペアが含まれ、キーは常に文字列であるということです。