使用主控台插入表格資料

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

NoSQL 主控台可讓您以下列模式將新資料列插入 Oracle NoSQL Database Cloud Service 表格中:
  1. 簡單輸入模式:您可以使用此模式,以宣告方式提供新資料列的值。
  2. 進階 JSON 輸入模式:您可以使用此模式提供 JSON 格式的新資料列值。
  3. 您可以使用 INSERT 陳述式來新增列。在 NoSQL>>Tables 下,選擇要新增資料列的表格。在探索資料底下,在為 SQL 敘述句提供的文字方塊中新增 INSERT 敘述句,然後執行命令。
  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 特性可能會被離開。
  • 如果資料欄值為 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 的兩個資料列。

重複的主索引鍵項目
{"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 的第二個資料列。已順利上傳所有其他資料列。

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 的資料列才能順利載入表格。

附註:

上傳作業會在偵測輸入檔中的第一個錯誤或不一致時停止。
資料列中遺漏主索引鍵
{"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 的資料列成功載入表格中。

綱要不符標準品 - 遺漏、不正確或其他欄位
{"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}

如果輸入檔案中遺漏主索引鍵以外的欄位,則資料會順利上傳。此時會顯示成功訊息。遺漏的欄位會填入空值值。

在此範例中,ID 為 7 的資料列中欄位名稱拼法不正確,而 ID 為 8 的資料列中遺漏欄位 name。在這兩種情況下,所有資料列都會順利載入表格。name 欄位會更新為空值值。

如果因為任何原因而中途停止上傳,您可以執行下列其中一項作業:
  • 如果沒有產生索引鍵值的資料欄 (亦即,如果索引鍵完全由 JSON 檔案指定),則只需以相同檔案重新開始即可。將會再次寫入已經寫入的資料列。
  • 如果有產生的索引鍵值,開始覆寫將會寫入新記錄,而不是覆寫現有的記錄。最簡單的路徑是刪除表格並重新建立表格。
  • 或者,您可以執行探索資料表單中的敘述句 DELETE FROM tablename,將所有記錄從表格中移除。

如果上傳處理作業期間超出佈建的寫入限制,將會顯示一則暫時訊息,且上傳會減緩速度,以避免再次超出限制。