例: 階層表

この項では、階層表を作成し、サンプルの手荷物追跡アプリケーションのデータをロードします。

階層表を使用した航空会社の手荷物追跡アプリケーション

KVSTOREまたはKVLiteを起動し、SQLシェルを開きます。
java -jar lib/kvstore.jar kvlite -secure-config disable
java -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.sql
parentchildtbls_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 ###