コンソールを使用した表データの挿入
NoSQLコンソールからOracle NoSQL Database Cloud Service表にデータを挿入する方法について学習します。
NoSQLコンソールを使用すると、次のモードでOracle NoSQL Database Cloud Service表に新しい行を挿入できます:
-
シンプル入力モード:このモードを使用して、新しい行の値を宣言的に指定できます。
-
拡張JSON入力モード:このモードを使用して、新しい行の値をJSONフォーマットで指定できます。
-
INSERT文を使用して行を追加できます。「NoSQL表」で、行を追加する表を選択します。「データの検索」で、SQL文に指定されたテキスト・ボックスにINSERT文を追加し、コマンドを実行します。
-
ブラウザを介して、ローカル・ファイルから表にデータを一括アップロードすることもできます。
ノート:表がグローバル・アクティブ表の場合、1つのリージョンにデータを追加するとそのデータがすべてのリージョナル表レプリカに追加されます。
表へのデータの挿入: シンプル入力モード
シンプル入力挿入モードを使用して、Oracle NoSQL Database Cloud Service表にデータを挿入する方法について学習します。
データを表に挿入するには:
-
InfrastructureコンソールからNoNoSQLコンソールにアクセスします。「インフラストラクチャ・コンソールからのサービスへのアクセス」を参照してください。
-
NoSQLコンソールには、テナンシ内のすべての表がリストされます。表の詳細を表示するには、次のいずれかを行います:
-
表名をクリックするか、
-
表名に対応するアクション・メニューをクリックし、「詳細の表示」を選択します。
「表の詳細」ページが開きます。
-
-
「行の挿入」をクリックします。
-
「行の挿入」ウィンドウで、「入力モード」に「シンプル入力」を選択します。
-
表のすべての列がリストされます。表の列のデータを入力します。バイナリなどの一部の列タイプでは、データをアップロードします。
ノート:値の入力は、表のNULLが許可されないすべての列に必須です。
-
「行の挿入」をクリックします。
レコードが表に挿入されます。
現在のページのヘルプを表示するには、ページの上部にあるヘルプ・リンクをクリックします。
表へのデータの挿入: 拡張JSON入力モード
拡張JSON入力モードを使用して、Oracle NoSQL Database Cloud Service表にデータをを挿入する方法について学習します。
データを表に挿入するには:
-
InfrastructureコンソールからNoNoSQLコンソールにアクセスします。「インフラストラクチャ・コンソールからのサービスへのアクセス」を参照してください。
-
NoSQLコンソールには、テナンシ内のすべての表がリストされます。表の詳細を表示するには、次のいずれかを行います:
-
表名をクリックするか、
-
表名に対応するアクション・メニューをクリックし、「詳細の表示」を選択します。
「表の詳細」ページが開きます。
-
-
「行の挿入」をクリックします。
-
「レコードの挿入」ウィンドウで、「入力モード」に「拡張JSON入力」を選択します。
-
レコード定義をJSONフォーマットで貼り付けるかアップロードします。
-
「行の挿入」をクリックします。
レコードが表に挿入されます。
現在のページのヘルプを表示するには、ページの上部にあるヘルプ・リンクをクリックします。
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の1つを使用して独自のプログラムを記述することをお薦めします。ただし、数百または数千行をすばやく挿入する場合、このアップロード方法は迅速なアプローチです。
アップロードするファイルには、一連の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の場合は、対応する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以外のテキスト
入力ファイルで問題が発生しました:
行には、2つの有効なJSONレコード間のmissed a lineなどの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つの行が正常にロードされます。
ケース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番目の行はスキップされます。その他すべての行が正常にアップロードされました。
ケース3: 不正なJSON形式
入力ファイルで問題が発生しました:
入力ファイルに不正なJSON形式の行が含まれています。たとえば、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の行のみが表に正常にロードされました。
ノート:入力ファイルのエラーまたは不整合の最初のインスタンスを検出すると、アップロード操作は停止されます。
ケース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}
エラー処理:
間違った行が検出されると、アップロードは停止されます。主キーに値を指定する必要があることを示すエラー・メッセージが表示されます。
この例では、2番目の行に主キー・フィールドが含まれていないため、エラーが発生しています。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を実行して、表からすべてのレコードを削除することもできます。
アップロード・プロセス中にプロビジョニングされた書込み制限を超えた場合、そのことを示す一時的なメッセージが表示され、再度制限を超えないようにアップロードが遅くなります。