例: 階層表
この項では、階層表を作成し、サンプルの手荷物追跡アプリケーションのデータをロードします。
階層表を使用した航空会社の手荷物追跡アプリケーション
KVSTOREまたはKVLiteを起動し、SQLシェルを開きます。
java -jar lib/kvstore.jar kvlite -secure-config disablejava -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore 一般的な使用方法およびコマンド・オプションについては、「SQLシェルの実行」を参照してください。
例5-2に示した手荷物追跡アプリケーションは、親子スキーマを使用して実現することもできます。航空券番号ごとに、乗客とその手荷物が関連付けられています。ルート表は
ticketで、2つの子表passengerInfoおよびbaggageInfoがあります。passengerInfo表には乗客の詳細が含まれ、baggageInfoには乗客がチェックインした手荷物の詳細が含まれています。これらの手荷物は、複数の中間ステーションを介して輸送中に追跡されます。この追跡情報は、baggageInfo表の子であるflightlegsという表に取得されます。作成される表は次のとおりです:### CREATE table ticket if not present ###
CREATE TABLE IF NOT EXISTS ticket(
ticketNo LONG,
confNo STRING,
PRIMARY KEY(ticketNo))
### CREATE table ticket.baginfo if not present ###
CREATE TABLE IF NOT EXISTS ticket.bagInfo(
id LONG,
tagNum LONG,
routing STRING,
lastActionCode STRING,
lastActionDesc STRING,
lastSeenStation STRING,
lastSeenTimeGmt TIMESTAMP(4),
bagArrivalDate TIMESTAMP(4),
PRIMARY KEY(id))
### CREATE table ticket.bagInfo.flightLegs if not present ###
CREATE TABLE IF NOT EXISTS ticket.bagInfo.flightLegs(
flightNo STRING,
flightDate TIMESTAMP(4),
fltRouteSrc STRING,
fltRouteDest STRING,
estimatedArrival TIMESTAMP(4),
actions JSON, PRIMARY KEY(flightNo))
### CREATE table ticket.passengerInfo if not present ###
CREATE TABLE IF NOT EXISTS ticket.passengerInfo(
contactPhone STRING,
fullName STRING,
gender STRING,
PRIMARY KEY(contactPhone))各表のサンプル行を見てみましょう:
Ticket:
{
"ticketNo": 1762344493810,
"id": 79039899165297,
"tagNum": 17657806255240,
"routing": "MIA/LAX/MEL",
"lastActionCode": "OFFLOAD",
"lastActionDesc": "OFFLOAD",
"lastSeenStation": "MEL",
"lastSeenTimeGmt": "2019-02-01T16:13:00Z",
"bagArrivalDate": "2019-02-01T16:13:00Z",
"actions": null
}
Passenger Info:
{
"ticketNo": 1762344493810,
"contactPhone": "893-324-1064",
"fullName": "Adam Phillips",
"gender": "M"
},
Baggage Info:
{
"ticketNo": 1762344493810,
"id": 79039899165297,
"tagNum": 17657806255240,
"routing": "MIA/LAX/MEL",
"lastActionCode": "OFFLOAD",
"lastActionDesc": "OFFLOAD",
"lastSeenStation": "MEL",
"lastSeenTimeGmt": "2019-02-01T16:13:00Z",
"bagArrivalDate": "2019-02-01T16:13:00Z",
"actions": null
},
Flight Legs:
{
"ticketNo": 1762344493810,
"id": 79039899165297,
"flightNo": "BM604",
"flightDate": "2019-02-01T06:00:00Z",
"fltRouteSrc": "MIA",
"fltRouteDest": "LAX",
"estimatedArrival": "2019-02-01T11:00:00Z",
"actions": [
{
"actionAt": "MIA",
"actionCode": "ONLOAD to LAX",
"actionTime": "2019-02-01T06:13:00Z"
},
{
"actionAt": "MIA",
"actionCode": "BagTag Scan at MIA",
"actionTime": "2019-02-01T05:47:00Z"
},
{
"actionAt": "MIA",
"actionCode": "Checkin at MIA",
"actionTime": "2019-02-01T04:38:00Z"
}
]
}
スクリプトparentchildtbls_loaddata.sqlをダウンロードします。loadコマンドを使用して、スクリプトを実行します。表が作成され、JSONファイルのデータが表にロードされます。
load -file parentchildtbls_loaddata.sqlparentchildtbls_loaddata.sqlには、次の内容が含まれています:### Begin Script ###
load -file parentchild.ddl
import -table ticket -file ticket.json
import -table ticket.bagInfo -file bagInfo.json
import -table ticket.passengerInfo -file passengerInfo.json
import -table ticket.bagInfo.flightLegs -file flightLegs.json
### End Script ###