コンソールを使用した表データの挿入

NoSQLコンソールからOracle NoSQL Database Cloud Service表へのデータの挿入方法について学習します。

NoSQLコンソールを使用すると、次のモードでOracle NoSQL Database Cloud Service表に新しい行を挿入できます:
  1. シンプル入力モード:このモードを使用して、新しい行の値を宣言的に指定できます。
  2. 拡張JSON入力モード:このモードを使用して、新しい行の値をJSONフォーマットで指定できます。
  3. INSERT文を使用して行を追加できます。NoSQL>>Tablesで、行を追加する表を選択します。「データの参照」で、SQL文に指定されたテキスト・ボックスにINSERT文を追加し、コマンドを実行します。
  4. ブラウザを介して、ローカル・ファイルから表にデータを一括アップロードすることもできます。

ノート: 表がグローバル・アクティブ表の場合、1つのリージョンにデータを追加すると、そのデータがすべてのリージョナル表レプリカに追加されます。

「Inserting Data Into Tables」: 「Simple Input Mode」

シンプル入力挿入モードを使用して、Oracle NoSQL Database Cloud Service表にデータを挿入する方法について学習します。

データを表に挿入するには:
  1. インフラストラクチャ・コンソールからNoSQLコンソールにアクセスします。インフラストラクチャ・コンソールからのサービスへのアクセスを参照してください。
  2. NoSQLコンソールには、テナント内のすべての表がリストされます。表の詳細を表示するには、次のいずれかを行います:
    • 表名をクリックするか、
    • 表名に対応するアクション・メニューをクリックし、「詳細の表示」を選択します。
    「表の詳細」ページが開きます。
  3. 「行の挿入」をクリックします。
  4. 「行の挿入」ウィンドウで、「エントリ・モード」「シンプル入力」を選択します。
  5. 表のすべての列がリストされます。表の列のデータを入力します。バイナリなどの一部は、データをアップロードします。

    ノート:

    値の入力は、表のnullが許可されないすべての列に必須です。
  6. 「行の挿入」をクリックします。
    レコードが表に挿入されます。
現在のページのヘルプを表示するには、ページの上部にあるヘルプ・リンクをクリックします。

表へのデータの挿入: 拡張JSON入力モード

拡張JSON入力モードを使用して、Oracle NoSQL Database Cloud Service表へのデータの挿入方法について学習します。

データを表に挿入するには:
  1. インフラストラクチャ・コンソールからNoSQLコンソールにアクセスします。インフラストラクチャ・コンソールからのサービスへのアクセスを参照してください。
  2. NoSQLコンソールには、テナント内のすべての表がリストされます。表の詳細を表示するには、次のいずれかを行います:
    • 表名をクリックするか、
    • 表名に対応するアクション・メニューをクリックし、「詳細の表示」を選択します。
    「表の詳細」ページが開きます。
  3. 「行の挿入」をクリックします。
  4. 「レコードの挿入」ウィンドウで、「エントリ・モード」「拡張JSON入力」を選択します。
  5. レコード定義をJSONフォーマットでペーストまたはアップロードします。
  6. 「行の挿入」をクリックします。
    レコードが表に挿入されます。
現在のページのヘルプを表示するには、ページの上部にあるヘルプ・リンクをクリックします。

SQLコマンドを使用したデータの挿入

INSERT文は、新しい行を作成して指定した表に追加するために使用します。

表名の後にオプションの列を指定できます。このリストには、表の列のサブセットの列名が含まれます。このサブセットには、すべての主キー列が含まれている必要があります。カラムリストが存在しない場合、デフォルトのカラムリストは、テーブルのすべてのカラムがCREATE TABLEステートメントで指定された順序で含まれるカラムリストです。

カラムリストのカラムは、VALUES句のあとにリストされた式(またはDEFAULTキーワード)に1対1で対応します(式/DEFAULTの数がカラム数と一致しない場合はエラーが発生します)。これらの式/DEFAULTによって、新しい行の関連する列の値が計算されます。式が複数の項目を返す場合は、エラーが発生します。式で結果が返されない場合は、NULLがその式の結果として使用されます。式ではなくDEFAULTキーワードがVALUESリストに表示される場合は、関連付けられたカラムのデフォルト値が、新しい行のそのカラムの値として使用されます。デフォルト値は、カラムリストのカラムの数がテーブルのカラムの合計数未満の場合、欠落しているカラムにも使用されます。

例1: BaggageInfo表へのすべての列値を提供する行の挿入:
INSERT INTO BaggageInfo VALUES(
1762392196147,
"Birgit Naquin",
"M",
"165-742-5715",
"QD1L0T",
[ {
    "id" : "7903989918469",
    "tagNum" : "17657806240229",
    "routing" : "JFK/MAD",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MAD",
    "flightLegs" : [ {
      "flightNo" : "BM495",
      "flightDate" : "2019-03-07T07:00:00Z",
      "fltRouteSrc" : "JFK",
      "fltRouteDest" : "MAD",
      "estimatedArrival" : "2019-03-07T14:00:00Z",
      "actions" : [ {
        "actionAt" : "MAD",
        "actionCode" : "Offload to Carousel at MAD",
        "actionTime" : "2019-03-07T13:54:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "ONLOAD to MAD",
        "actionTime" : "2019-03-07T07:00:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "BagTag Scan at JFK",
        "actionTime" : "2019-03-07T06:53:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "Checkin at JFK",
        "actionTime" : "2019-03-07T05:03:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-07T13:51:00Z",
    "bagArrivalDate" : "2019-03-07T13:51:00Z"
  } ]
)

例2: DEFAULT句を指定して、INSERT文の実行時に一部のデータをスキップします。

DEFAULTを指定すると、一部の列のデータをスキップできます。
INSERT INTO BaggageInfo VALUES(
1762397286805,
"Bonnie Williams",
DEFAULT,
DEFAULT,
"CZ1O5I",
[ {
    "id" : "79039899129693",
    "tagNum" : "17657806216554",
    "routing" : "SFO/ORD/FRA",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "FRA",
    "flightLegs" : [ {
      "flightNo" : "BM572",
      "flightDate" : "2019-03-02T05:00:00Z",
      "fltRouteSrc" : "SFO",
      "fltRouteDest" : "ORD",
      "estimatedArrival" : "2019-03-02T09:00:00Z",
      "actions" : [ {
        "actionAt" : "SFO",
        "actionCode" : "ONLOAD to ORD",
        "actionTime" : "2019-03-02T05:24:00Z"
      }, {
        "actionAt" : "SFO",
        "actionCode" : "BagTag Scan at SFO",
        "actionTime" : "2019-03-02T04:52:00Z"
      }, {
        "actionAt" : "SFO",
        "actionCode" : "Checkin at SFO",
        "actionTime" : "2019-03-02T03:28:00Z"
      } ]
    }, {
      "flightNo" : "BM582",
      "flightDate" : "2019-03-02T05:24:00Z",
      "fltRouteSrc" : "ORD",
      "fltRouteDest" : "FRA",
      "estimatedArrival" : "2019-03-02T13:24:00Z",
      "actions" : [ {
        "actionAt" : "FRA",
        "actionCode" : "Offload to Carousel at FRA",
        "actionTime" : "2019-03-02T13:20:00Z"
      }, {
        "actionAt" : "ORD",
        "actionCode" : "ONLOAD to FRA",
        "actionTime" : "2019-03-02T12:54:00Z"
      }, {
        "actionAt" : "ORD",
        "actionCode" : "OFFLOAD from ORD",
        "actionTime" : "2019-03-02T12:30:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-02T13:18:00Z",
    "bagArrivalDate" : "2019-03-02T13:18:00Z"
  } ]
)

例3: INSERT文で列名を指定し、列をスキップします。

テーブルの一部のカラムのみのデータがある場合は、INSERT句でカラムの名前を指定し、VALUES句で対応する値を指定できます。
INSERT INTO BaggageInfo(ticketNo, fullName,confNo,bagInfo) VALUES(
1762355349471,
"Bryant Weber",
"LI7N1W",
[ {
    "id" : "79039899149056",
    "tagNum" : "17657806234185",
    "routing" : "MEL/LAX/MIA",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MIA",
    "flightLegs" : [ {
      "flightNo" : "BM114",
      "flightDate" : "2019-03-01T12:00:00Z",
      "fltRouteSrc" : "MEL",
      "fltRouteDest" : "LAX",
      "estimatedArrival" : "2019-03-02T02:00:00Z",
      "actions" : [ {
        "actionAt" : "MEL",
        "actionCode" : "ONLOAD to LAX",
        "actionTime" : "2019-03-01T12:20:00Z"
      }, {
        "actionAt" : "MEL",
        "actionCode" : "BagTag Scan at MEL",
        "actionTime" : "2019-03-01T11:52:00Z"
      }, {
        "actionAt" : "MEL",
        "actionCode" : "Checkin at MEL",
        "actionTime" : "2019-03-01T11:43:00Z"
      } ]
    }, {
      "flightNo" : "BM866",
      "flightDate" : "2019-03-01T12:20:00Z",
      "fltRouteSrc" : "LAX",
      "fltRouteDest" : "MIA",
      "estimatedArrival" : "2019-03-02T16:21:00Z",
      "actions" : [ {
        "actionAt" : "MIA",
        "actionCode" : "Offload to Carousel at MIA",
        "actionTime" : "2019-03-02T16:18:00Z"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "ONLOAD to MIA",
        "actionTime" : "2019-03-02T16:12:00Z"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "OFFLOAD from LAX",
        "actionTime" : "2019-03-02T16:02:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-02T16:09:00Z",
    "bagArrivalDate" : "2019-03-02T16:09:00Z"
  } ]
)
例4: すべての列値を指定して行をstream_acct表に挿入します。
INSERT INTO stream_acct VALUES(
1,
"AP",
"2023-10-18",
{
   "firstName": "Adam",
   "lastName": "Phillips",
   "country": "Germany",
   "contentStreamed": [{
      "showName": "At the Ranch",
      "showId": 26,
      "showtype": "tvseries",
      "genres": ["action", "crime", "spanish"],
      "numSeasons": 4,
      "seriesInfo": [{
         "seasonNum": 1,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 20,
            "episodeName": "Season 1 episode 1",
            "lengthMin": 85,
            "minWatched": 85,
            "date": "2022-04-18"
         },
         {
            "episodeID": 30,
            "lengthMin": 60,
            "episodeName": "Season 1 episode 2",
            "minWatched": 60,
            "date": "2022 - 04 - 18 "
         }]
      },
      {
         "seasonNum": 2,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 40,
            "episodeName": "Season 2 episode 1",
            "lengthMin": 50,
            "minWatched": 50,
            "date": "2022-04-25"
         },
         {
            "episodeID": 50,
            "episodeName": "Season 2 episode 2",
            "lengthMin": 45,
            "minWatched": 30,
            "date": "2022-04-27"
         }]
      },
      {
         "seasonNum": 3,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 60,
            "episodeName": "Season 3 episode 1",
            "lengthMin": 50,
            "minWatched": 50,
            "date": "2022-04-25"
         },
         {
            "episodeID": 70,
            "episodeName": "Season 3 episode 2",
            "lengthMin": 45,
            "minWatched": 30,
            "date": "2022 - 04 - 27 "
         }]
      }]
   },
   {
      "showName": "Bienvenu",
      "showId": 15,
      "showtype": "tvseries",
      "genres": ["comedy", "french"],
      "numSeasons": 2,
      "seriesInfo": [{
         "seasonNum": 1,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 20,
            "episodeName": "Bonjour",
            "lengthMin": 45,
            "minWatched": 45,
            "date": "2022-03-07"
         },
         {
            "episodeID": 30,
            "episodeName": "Merci",
            "lengthMin": 42,
            "minWatched": 42,
            "date": "2022-03-08"
         }]
      }]
   }]
});

表の行のアップロード

表の詳細ページの「データのアップロード」ボタンを使用すると、ブラウザを介してローカル・ファイルから表にデータを一括アップロードできます。

アップロード機能は、数千行未満のロードを対象としています。この機能は、概念実証(POC)の実行や、サービスの基本的なテストの実行に最適です。小さいテーブルにデータをロードする便利な方法です。数万行を記述する場合は、パフォーマンス上の理由から、Oracle NoSQL Database Migratorを使用するか、NoSQL SDKのいずれかを使用して独自のプログラムを記述することをお薦めします。ただし、数百行または数千行をすばやく挿入する場合、このアップロード方法は便利な方法です。

アップロードするファイルには、一連のJSONオブジェクトが含まれている必要があります。オブジェクトは、単一の配列のカンマ区切り項目として、または中カッコで囲まれた単純なオブジェクトのシーケンスとして表現でき、それらの間に構文区切り文字はありません。各オブジェクトの内容は、正しくフォーマットされたJSONである必要があり、アップロード先の表のスキーマに準拠している必要があります。

例: 次のDDL文を使用して表が作成されます。
CREATE TABLE Simple ( id integer, val string, PRIMARY KEY ( id ) )
次の例は、ファイルの内容に対する配列形式の使用方法を示しています。

[
  {
    "id": 0,
    "val": "0"
  },
  {
    "id": 1,
    "val": "2"
  }, ...
]
次の例は、ファイル・コンテンツに対する単純なオブジェクトの使用を示しています。

{
  "id": 0,
  "val": "0"
}
{
  "id": 1,
  "val": "2"
}, ...
  • 表のスキーマで列値が不要な場合は、対応するJSONプロパティが省略されることがあります。
  • 列値がGENERATED ALWAYSの場合、対応するJSONプロパティは省略する必要があります。
  • JSONオブジェクトに列名と一致しない名前のプロパティが含まれている場合、それらのプロパティは無視されます。

アップロード機能を使用するには、「データをアップロード」ボタンをクリックして、アップロードするファイルを選択します。アップロードはすぐに開始され、進行状況がページに表示されます。正常に完了すると、挿入された行の合計数が表示されます。「アップロードの停止」ボタンをクリックして、アップロードを中断できます。データベースに正常にコミットされた行数が表示されます。

入力ファイルのエラーが検出されると、アップロードは停止し、近似行番号のエラー・メッセージが表示されます。入力エラーは、不適切なJSON構文またはスキーマ不適合が原因である可能性があります。サービスのリクエスト中にもエラーが発生することがあります。このようなエラーによってアップロードが停止され、メッセージが表示されます。

次のスキーマを持つサンプル表について考えてみます。
CREATE TABLE IF NOT EXISTS NDCStable (id INTEGER, name STRING, email STRING, age INTEGER, income DOUBLE, PRIMARY KEY(SHARD(id)))
次の表に、入力ファイルのいくつかの一般的なエラーと、データ・アップロード時の対応するエラー処理を示します。

表- アップロード中のエラー処理

入力ファイルの問題 エラー処理
いずれかの行の非JSONテキスト
{"id":1,"name":"Jane Smith","email":"iamjane@somemail.co.us","age":30,"income":30000.0}
missed a line
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}

テキストは無視され、アップロードが続行されます。すべての行が表に正常にロードされた後に、成功メッセージが表示されます。

この例では、「missed a line」というテキストがスキップされ、ID 1と2の2つの行が正常にロードされます。

主キー・エントリの複製
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
{"id":2,"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
{"id":5,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0}

重複した行エントリはスキップされ、アップロードが続行されます。すべての行を正常にロードすると、成功メッセージが表示されます。

この例では、ID 2の最初の行が表にロードされます。重複したID値2を含む2番目の行はスキップされます。他のすべての行が正常にアップロードされました。

不正なJSON形式
{"id":7,"name":"Tom Smith","email":"reachtom12@mymail.com","age":65,"income":65000.0}
{"id":8,"name":"Jack Smith","email":"iamjacksmi@somemail.co.us","age":60,"income":30000.0
{"id":9,"fame":"Jane Smith""email":"iamjanesmi@somemail.co.us","age":56,"income":35000.0}

間違った行が検出されると、アップロードは停止します。予期しないファイルの終わりとその近似行番号を示すエラーメッセージが表示されます。

この例では、2つのJSON形式のエラーがあります。ID 8の行に閉じカッコがなく、ID 9に2つのJSONフィールド間のカンマがありません。これらのエントリはどちらもJSONデータ型形式に準拠していないため、アップロードに失敗しました。ID 7の行のみが正常に表にロードされます。

ノート:

入力ファイル内のエラーまたは不整合の最初のインスタンスを検出すると、アップロード操作は停止します。
行に主キーがありません
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
{"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
{"id":5,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0}

間違った行が検出されると、アップロードは停止します。主キーに値が必要であることを示すエラー・メッセージが表示されます。

この例では、2番目の行に主キー・フィールドが含まれていないため、エラーが発生します。ID 2の行のみが正常に表にロードされました。

スキーマ不適合- 欠落、不正確または追加フィールド
{"id":6,"name":"Yera Smith","email":"ys1982@mymail.com","age":55,"income":55000.0}
{"id":7,"fname":"Tom Smith","email":"reachtom12@mymail.com","age":65,"income":65000.0}
{"id":8,"email":"iamjacksmi@somemail.co.us","age":60,"income":30000.0}

入力ファイルに主キー以外のフィールドがない場合、データは正常にアップロードされます。成功メッセージが表示されます。欠落しているフィールドには、null値が移入されます。

この例では、ID 7の行でフィールド名のスペルが間違っており、ID 8の行でフィールドnameが欠落しています。どちらの場合も、すべての行が正常に表にロードされます。nameフィールドは、null値で更新されます。

何らかの理由でアップロードが途中で停止した場合は、次のいずれかを実行できます。
  • 生成されたキー値を持つ列がない場合(つまり、キーが完全にJSONファイルで指定されている場合)、同じファイルからやり直すことができます。すでに書き込まれた行が再度書き込まれます。
  • 生成されたキー値がある場合、上書きを開始すると、既存のレコードを上書きするのではなく、新しいレコードが書き込まれます。最も簡単なパスは、表を削除して再度作成することです。
  • または、「データの検索」フォームで文DELETE FROM tablenameを実行して、表からすべてのレコードを削除することもできます。

アップロード・プロセス中にプロビジョニングされた書込み制限を超えた場合、そのことを示す一時的なメッセージが表示され、制限を再度超えないようにアップロードが遅くなります。