使用主控台插入表格資料
瞭解如何從 NoSQL 主控台將資料插入 Oracle NoSQL Database Cloud Service 表格。
NoSQL 主控台可讓您以下列模式,將新資料列插入 Oracle NoSQL Database Cloud Service 表格:
-
簡單輸入模式:您可以使用此模式,以宣告方式提供新資料列的值。
-
進階 JSON 輸入模式:您可以使用此模式來提供 JSON 格式的新資料列值。
-
您可以使用 INSERT 敘述句新增資料列。在 NoSQL 表格底下,選擇您要新增資料列的表格。在瀏覽資料底下,將 INSERT 敘述句新增至提供給 SQL 敘述句的文字方塊中,然後執行命令。
-
您也可以透過瀏覽器,從本機檔案大量上傳資料至表格。
注意:如果表格是「全域作用中」表格,則在一個區域中新增資料也會新增資料至所有區域表格複本。
將資料插入表格:簡單輸入模式
瞭解如何使用「簡單輸入」插入模式將資料插入 Oracle NoSQL Database Cloud Service 表格。
若要將資料插入表格:
-
從「基礎架構主控台」存取 NoSQL 主控台。請參閱從基礎架構主控台存取服務。
-
NoSQL 主控台會列出租用戶中的所有表格。若要檢視表格詳細資訊,請執行下列其中一項作業:
-
按一下表格名稱,或
-
按一下與表格名稱對應的動作功能表,然後選取檢視詳細資訊。
「表格詳細資訊」頁面便會開啟。
-
-
按一下插入資料列。
-
在「插入資料列」視窗中,選取輸入模式的簡單輸入。
-
列出了表格中的所有欄。輸入表格之欄的資料。對於某些資料欄類型,例如「二進位」,您可以上傳資料。
注意:必須輸入表格中所有不可為空值資料欄的值。
-
按一下插入資料列。
記錄會插入表格中。
若要檢視目前頁面的說明,請按一下頁面頂端的說明連結。
將資料插入表格:進階 JSON 輸入模式
瞭解如何使用進階 JSON 輸入模式將資料插入 Oracle NoSQL Database Cloud Service 表格。
若要將資料插入表格:
-
從「基礎架構主控台」存取 NoSQL 主控台。請參閱從基礎架構主控台存取服務。
-
NoSQL 主控台會列出租用戶中的所有表格。若要檢視表格詳細資訊,請執行下列其中一項作業:
-
按一下表格名稱,或
-
按一下與表格名稱對應的動作功能表,然後選取檢視詳細資訊。
「表格詳細資訊」頁面便會開啟。
-
-
按一下插入資料列。
-
在「插入記錄」視窗中,選取進入模式的進階 JSON 輸入。
-
貼上或上傳 JSON 格式的記錄定義。
-
按一下插入資料列。
記錄會插入表格中。
若要檢視目前頁面的說明,請按一下頁面頂端的說明連結。
使用 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)))
下表列出輸入檔案中的一些常見錯誤,以及資料上傳期間的對應錯誤處理。
上傳時處理錯誤
案例 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 值。
如果因為任何原因而中途停止上傳,您可以執行下列其中一項作業:
-
如果沒有含有產生索引鍵值的資料欄 (亦即,如果索引鍵完全由 JSON 檔案指定),則只需以相同檔案重新開始。將會再次寫入已寫入的資料列。
-
如果有產生的索引鍵值,則開始覆寫會寫入新記錄,而不是覆寫現有的記錄。最簡單的路徑是刪除表格,然後重新建立表格。
-
或者,您可以在瀏覽資料表單中執行陳述式
DELETE FROM tablename,將所有記錄從表格中移除。
如果在上傳過程中超過佈建的寫入限制,將會顯示暫時訊息,並減慢上傳速度以避免再次超過限制。