使用主控台插入表格資料

瞭解如何從 NoSQL 主控台將資料插入 Oracle NoSQL Database Cloud Service 表格。

NoSQL 主控台可讓您以下列模式,將新資料列插入 Oracle NoSQL Database Cloud Service 表格:

  1. 簡單輸入模式:您可以使用此模式,以宣告方式提供新資料列的值。

  2. 進階 JSON 輸入模式:您可以使用此模式來提供 JSON 格式的新資料列值。

  3. 您可以使用 INSERT 敘述句新增資料列。在 NoSQL 表格底下,選擇您要新增資料列的表格。在瀏覽資料底下,將 INSERT 敘述句新增至提供給 SQL 敘述句的文字方塊中,然後執行命令。

  4. 您也可以透過瀏覽器,從本機檔案大量上傳資料至表格。

注意:如果表格是「全域作用中」表格,則在一個區域中新增資料也會新增資料至所有區域表格複本。

將資料插入表格:簡單輸入模式

瞭解如何使用「簡單輸入」插入模式將資料插入 Oracle NoSQL Database Cloud Service 表格。

若要將資料插入表格:

  1. 從「基礎架構主控台」存取 NoSQL 主控台。請參閱從基礎架構主控台存取服務

  2. NoSQL 主控台會列出租用戶中的所有表格。若要檢視表格詳細資訊,請執行下列其中一項作業:

    • 按一下表格名稱,或

    • 按一下與表格名稱對應的動作功能表,然後選取檢視詳細資訊

    「表格詳細資訊」頁面便會開啟。

  3. 按一下插入資料列

  4. 在「插入資料列」視窗中,選取輸入模式簡單輸入

  5. 列出了表格中的所有欄。輸入表格之欄的資料。對於某些資料欄類型,例如「二進位」,您可以上傳資料。

    注意:必須輸入表格中所有不可為空值資料欄的值。

  6. 按一下插入資料列

    記錄會插入表格中。

若要檢視目前頁面的說明,請按一下頁面頂端的說明連結。

將資料插入表格:進階 JSON 輸入模式

瞭解如何使用進階 JSON 輸入模式將資料插入 Oracle NoSQL Database Cloud Service 表格。

若要將資料插入表格:

  1. 從「基礎架構主控台」存取 NoSQL 主控台。請參閱從基礎架構主控台存取服務

  2. NoSQL 主控台會列出租用戶中的所有表格。若要檢視表格詳細資訊,請執行下列其中一項作業:

    • 按一下表格名稱,或

    • 按一下與表格名稱對應的動作功能表,然後選取檢視詳細資訊

    「表格詳細資訊」頁面便會開啟。

  3. 按一下插入資料列

  4. 在「插入記錄」視窗中,選取進入模式進階 JSON 輸入

  5. 貼上或上傳 JSON 格式的記錄定義。

  6. 按一下插入資料列

    記錄會插入表格中。

若要檢視目前頁面的說明,請按一下頁面頂端的說明連結。

使用 SQL 命令插入資料

INSERT 敘述句主要用來建構新資料列,並將它新增至指定的表格。

可在表格名稱之後指定選擇性資料欄。此清單包含表格資料欄子集的資料欄名稱。子集必須包含所有主索引鍵資料欄。如果沒有資料欄清單,預設資料欄清單就是包含表格所有資料欄的清單,依順序在 CREATE TABLE 敘述句中指定這些資料欄。

資料欄清單中的資料欄與 VALUES 子句之後列出的表示式 (或 DEFAULT 關鍵字) 對應一對一 (如果表示式數目 /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 語法或綱要不符所造成。服務要求期間也會發生錯誤。這類錯誤也會停止上傳並顯示訊息。

請參考含有下列綱要的範例表格:

CREATE TABLE IF NOT EXISTS NDCStable (id INTEGER, name STRING, email STRING, age INTEGER, income DOUBLE, PRIMARY KEY(SHARD(id)))

下表列出輸入檔案中的一些常見錯誤,以及資料上傳期間的對應錯誤處理。

上傳時處理錯誤

案例 1:其中一個資料列中的非 JSON 文字

輸入檔中的問題:

資料列包含兩個有效 JSON 記錄之間的非 JSON 文字 (例如 missed a line)。

{"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 的第二個資料列。已順利上傳所有其他資料列。

案例 3:不正確的 JSON 格式

輸入檔中的問題:

輸入檔包含 JSON 格式不正確的資料列。例如,資料列可能遺漏右大括號或兩個 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}

處理錯誤:

系統在偵測到錯誤列時停止上傳。會顯示一則錯誤訊息,指出非預期的檔案結尾及其概略行號。

在此範例中,有兩個 JSON 格式錯誤。ID 為 8 的資料列遺漏右大括號,ID 為 9 的兩個 JSON 欄位之間遺漏逗號。這兩個項目都不符合導致上傳失敗的 JSON 資料類型格式。只有 ID 為 7 的資料列已成功載入表格。

注意:偵測輸入檔中第一個錯誤或不一致的執行處理時,便會停止上傳作業。

個案 4:資料列中遺漏主索引鍵

輸入檔中的問題:

輸入檔案中的資料列不包含主索引鍵欄位。

{"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}

處理錯誤:

系統在偵測到錯誤列時停止上傳。系統會顯示錯誤訊息,指出主索引鍵必須具有值。

在此範例中,第二個資料列未包含導致錯誤的主索引鍵欄位。只有 ID 為 2 的資料列已成功載入至表格。

案例 5:結構不符標準品 - 遺漏、不正確或其他欄位

輸入檔中的問題:

輸入檔包含遺漏、名稱不正確或不符合表格綱要的其他欄位。

{"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 值。

如果因為任何原因而中途停止上傳,您可以執行下列其中一項作業:

如果在上傳過程中超過佈建的寫入限制,將會顯示暫時訊息,並減慢上傳速度以避免再次超過限制。