APIを使用した表データの追加
表に行を追加します。表の行にデータを格納すると、アプリケーションでは、表からの情報の取得、追加または削除を簡単に行えます。
PutRequestクラス/putメソッドを使用すると、次のような無条件および条件付きputを実行できます:
-
既存の行をすべて上書きします。「上書き」がデフォルトの機能です。
-
行が存在しない場合にのみ成功します。この場合は
IfAbsentメソッドを使用します。 -
行が存在する場合にのみ成功します。この場合は
IfPresentメソッドを使用します。 -
行が存在し、バージョンが特定のバージョンと一致する場合にのみ成功します。この場合は
IfVersionメソッドを使用し、照合するバージョンを指定するにはsetMatchVersionメソッドを使用します。
PutRequestクラスでは、setValueFromJsonメソッドが提供されます。これは、JSON文字列を取り、それを使用して、表に挿入する行に値を移入します。JSON文字列では、表のフィールド名に対応するフィールド名を指定する必要があります。
こちらにあるサンプル中からフル・コードAddData.javaをダウンロードします。
private static void writeRows(NoSQLHandle handle, MapValue value)
throws Exception {
PutRequest putRequest =
new PutRequest().setValue(value).setTableName(tableName);
PutResult putResult = handle.put(putRequest);
if (putResult.getVersion() != null) {
System.out.println("Added a row to the stream_acct table");
} else {
System.out.println("Put failed");
}
}
JSONコレクション表へのデータの挿入:
一連のPutRequest操作を使用して、最上位レベルのドキュメント・フィールドをJSONコレクション表に挿入できます。ネストされたJSONフィールドの場合、JSONデータをputFromJson操作の文字列として指定できます。
次のコード・サンプルは、JSONコレクション表として作成された場合にstream_acct表にデータを挿入する方法を示しています。
String tableName = "stream_acct";
MapValue value = new MapValue()
.put("acct_Id", 1)
.put("profile_name", "AP")
.put("account_expiry", "2023-10-18")
.putFromJson(
"acct_data",
"{\"firstName\":\"Adam\","
+ "\"lastName\":\"Philip\","
+ "\"country\":\"Germany\"}",
null);
PutRequest putRequest = new PutRequest()
.setValue(value)
.setTableName(tableName);
PutResult putRes = handle.put(putRequest);
System.out.println("Put row: " + value + " result=" + putRes);
borneo.PutRequestクラスは、単一行の挿入に使用されるborneo.NoSQLHandle.put()メソッドへの入力を表します。
また、JSONデータを表に追加することもできます。固定スキーマ表の場合、JSONはターゲット・スキーマに変換されます。JSONデータは、JSON型の列に直接挿入できます。JSONデータ型を使用すると、固定スキーマなしで表データを作成できるため、データの柔軟な使用が可能になります。
こちらにあるサンプルの中にフル・コードAddData.pyをダウンロードします。
def insert_record(handle,table_name,acct_data):
request = PutRequest().set_table_name(table_name)
.set_value_from_json(acct_data)
handle.put(request)
print('Added a row to the stream_acct table')
JSONコレクション表へのデータの挿入:
JSON文字列としてJSONコレクション表に行を直接追加できます。
次のコード・サンプルは、JSONコレクション表として作成されたデータをstream_acct表に挿入する方法を示しています。
import json
from borneo import PutRequest
table_name = "stream_acct"
row = {
"acct_Id": 1,
"profile_name": "AP",
"account_expiry": "2023-10-18",
"acct_data": {
"firstName": "Adam",
"lastName": "Philip",
"country": "Germany"
}
}
request = (
PutRequest()
.set_table_name(table_name)
.set_value_from_json(json.dumps(row))
)
result = handle.put(request)
print("Put row:", row, "result:", result)
nosqldb.PutRequestは、nosqldb.Put()関数への入力を表し、単一行の挿入に使用されます。
行に指定されているデータ値(PutRequest内)は、*types.MapValueです。MapValue内の各エントリのkey部分はターゲット表の列名と一致する必要があり、value部分はその列に対する有効な値である必要があります。JSONデータは、JSON型の列に直接挿入することもできます。JSONデータ型を使用すると、固定スキーマなしで表データを作成できるため、データの柔軟な使用が可能になります。
こちらにあるサンプル中からフル・コードAddData.goをダウンロードします。
func insertData(client *nosqldb.Client, err error,
tableName string,value1 *types.MapValue )(){
putReq := &nosqldb.PutRequest{
TableName: tableName,
Value: value1,
}
putRes, err := client.Put(putReq)
if err != nil {
fmt.Printf("failed to put single row: %v\n", err)
return
}
fmt.Printf("Added a row to the stream_acct table\n")
}
JSONコレクション表へのデータの挿入:
JSONデータからマップ値を作成し、その行をJSONコレクション表に追加できます。
次のコード・サンプルは、JSONコレクション表として作成されたデータをstream_acct表に挿入する方法を示しています。
tableName := "stream_acct"
rowJSON := `{
"acct_Id": 1,
"profile_name": "AP",
"account_expiry": "2023-10-18",
"acct_data": {
"firstName": "Adam",
"lastName": "Philip",
"country": "Germany"
}
}`
value, err := types.NewMapValueFromJSON(rowJSON)
if err != nil {
return fmt.Errorf("invalid row JSON: %w", err)
}
request := &nosqldb.PutRequest{
TableName: tableName,
Value: value,
}
result, err := client.Put(request)
putメソッドを使用して単一行を表に挿入します。メソッドの詳細は、NoSQLClientクラスを参照してください。
JavaScript: AddData.jsのサンプルの中からフル・コードここをダウンロードします。
/* Adding 3 records in acct_stream table */
let putResult = await handle.put(TABLE_NAME, JSON.parse(acct1));
let putResult1 = await handle.put(TABLE_NAME, JSON.parse(acct2));
let putResult2 = await handle.put(TABLE_NAME, JSON.parse(acct3));
console.log("Added rows to the stream_acct table");
TypeScript: こちらにあるサンプルの中央からフル・コードAddData.tsをダウンロードします。
interface StreamInt {
acct_Id: Integer;
profile_name: String;
account_expiry: TIMESTAMP;
acct_data: JSON;
}
/* Adding 3 records in acct_stream table */
let putResult = await handle.put<StreamInt>(TABLE_NAME, JSON.parse(acct1));
let putResult1 = await handle.put<StreamInt>(TABLE_NAME, JSON.parse(acct2));
let putResult2 = await handle.put<StreamInt>(TABLE_NAME, JSON.parse(acct3));
console.log("Added rows to the stream_acct table");
JSONコレクション表へのデータの挿入:
サポートされているJSON型のプレーンJavaScriptオブジェクトを指定することで、JSONコレクション表に行を追加できます。
次のコード・サンプルは、JSONコレクション表として作成されたデータをstream_acct表に挿入する方法を示しています。
import { NoSQLClient } from 'oracle-nosqldb';
const client = new NoSQLClient('config.json');
const TABLE_NAME = 'stream_acct';
const record = {
acct_Id: 1,
profile_name: 'AP',
account_expiry: '2023-10-18',
acct_data: {
firstName: 'Adam',
lastName: 'Philip',
country: 'Germany'
}
};
async function writeARecord(client, record) {
await client.put(TABLE_NAME, record);
console.log('Added a row to the stream_acct table');
}
await writeARecord(client, record);
メソッドPutAsyncおよび関連メソッドPutIfAbsentAsync、PutIfPresentAsyncおよびPutIfVersionAsyncを使用して、表に単一行を挿入したり、単一行を更新します。
前述の各Putメソッドでは、Task<PutResult<RecordValue>>が返されます。PutResultインスタンスには、完了したPut操作に関する、成功ステータス(条件付きput操作は対応する条件が満たされないと失敗する場合がある)や結果のRowVersionなどの情報が含まれています。結果のSuccessプロパティは、条件付きPUT操作に関連する正常な完了のみを示し、無条件のPutsに対して常にtrueであることに注意してください。その他の理由でPut操作が失敗した場合、例外がスローされます。JSONデータ型のフィールドを使用すると、JSONフィールドのデータに事前定義されたスキーマがないため、データの使用の柔軟性が向上します。値をJSONフィールドに入力するには、MapValueインスタンスを行値の一部としてそのフィールド値に指定します。また、FieldValue.FromJsonStringを使用してJSON文字列からその値を作成することもできます。
こちらにあるサンプル中からフル・コードAddData.csをダウンロードします。
private static async Task insertData(NoSQLClient client, String acctdet){
var putResult = await client.PutAsync(TableName,
FieldValue.FromJsonString(acctdet).AsMapValue);
if (putResult.ConsumedCapacity != null)
{
Console.WriteLine(" Added a row to the stream_acct table");
}
}
JSONコレクション表へのデータの挿入:
JSONコレクション表に行を追加するには、FromJsonStringメソッドで作成されたJSON文字列から値を指定します。
次のコード・サンプルは、JSONコレクション表として作成されたデータをstream_acct表に挿入する方法を示しています。
var tableName = "stream_acct";
const string data = @"{
""acct_Id"": 1,
""profile_name"": ""AP"",
""account_expiry"": ""2023-10-18"",
""acct_data"": {
""firstName"": ""Adam"",
""lastName"": ""Philip"",
""country"": ""Germany""
}
}";
var result = await client.PutAsync(
tableName,
FieldValue.FromJsonString(data).AsMapValue
);
Console.WriteLine("Added a row to the stream_acct table");
MultiWrite APIを使用して、1つのデータベース操作で複数のデータ行を追加できます。
WriteMultipleRequestクラスを使用して、表に関連付けられた一連のPutRequest操作を実行できます。それでは、それらの主キーの同じシャード・キー部分が、単一のアトミック書込み操作として共有されます。WriteMultipleRequestクラスを使用して、データを親表と子表に同時に追加することもできます。これは、関連する複数の行をアトミックに変更する効率的な方法です。操作が正常に完了すると、WriteMultipleResult.getSuccess()メソッドでtrueが返されます。
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Java SDK APIリファレンスを参照してください。
こちらにあるサンプル中からフル・コードMultiWrite.javaをダウンロードします。
private static void writeMul(NoSQLHandle handle,String parent_tblname,
String parent_data, String child_tblname, String child_data){
WriteMultipleRequest umRequest = new WriteMultipleRequest();
PutRequest putRequest =
new PutRequest().setValueFromJson(parent_data,null).setTableName(parent_tblname);
umRequest.add(putRequest, false);
putRequest =
new PutRequest().setValueFromJson(child_data,null).setTableName(child_tblname);
umRequest.add(putRequest, false);
WriteMultipleResult umResult = handle.writeMultiple(umRequest);
}
borneo.WriteMultipleRequestクラスを使用して、表に関連付けられた一連のPutRequest操作を実行できます。それでは、それらの主キーの同じシャード・キー部分が、単一のアトミック書込み操作として共有されます。borneo.WriteMultipleRequestクラスを使用して、データを親表と子表に同時に追加することもできます。これは、関連する複数の行をアトミックに変更する効率的な方法です。
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Python SDK APIリファレンスを参照してください。
こちらにあるサンプル中からフル・コードMultiWrite.pyをダウンロードします。
def mul_write(handle,parent_tblname,parent_data,
child_tblname, child_data):
request = PutRequest()
request.set_value_from_json(parent_data)
request.set_table_name('ticket')
wm_req.add(request, True)
request1 = PutRequest()
request1.set_table_name(child_tblname)
request1.set_value_from_json(child_data)
wm_req.add(request1, True)
result = handle.write_multiple(wm_req)
WriteMultipleRequestクラスを使用して、表に関連付けられた一連のPutRequest操作を実行できます。それでは、それらの主キーの同じシャード・キー部分が、単一のアトミック書込み操作として共有されます。WriteMultipleRequestクラスを使用して、データを親表と子表に同時に追加することもできます。これは、関連する複数の行をアトミックに変更する効率的な方法です。
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Go SDK APIリファレンスを参照してください。
こちらにあるサンプル中からフル・コードMultiWrite.goをダウンロードします。
//multiple write from the table
func mul_write(client *nosqldb.Client, err error, parenttbl_name string,
parent_data string, childtbl_name string, child_data string)(){
value, err := types.NewMapValueFromJSON(parent_data)
putReq := &nosqldb.PutRequest{
TableName: parenttbl_name,
Value: value,
}
wmReq := &nosqldb.WriteMultipleRequest{
TableName: "",
Timeout: 10 * time.Second,
}
wmReq.AddPutRequest(putReq, true)
value1, err := types.NewMapValueFromJSON(child_data)
putReq1 := &nosqldb.PutRequest{
TableName: childtbl_name,
Value: value1,
}
wmReq.AddPutRequest(putReq1, true)
wmRes, err := client.WriteMultiple(wmReq)
if err != nil {
fmt.Printf("WriteMultiple() failed: %v\n", err)
return
}
if wmRes.IsSuccess() {
fmt.Printf("WriteMultiple() succeeded\n")
} else {
fmt.Printf("WriteMultiple() failed\n")
}
}
writeManyメソッドを使用すると、主キーの同じシャード・キー部分が、単一のアトミック書込み操作として共有される表に関連付けられた一連のput操作を実行できます。writeManyメソッドを使用して、データを親表と子表に同時に追加することもできます。これは、関連する複数の行をアトミックに変更する効率的な方法です。
メソッドの詳細は、NoSQLClientクラスを参照してください。
JavaScript: こちらのサンプルの中からフル・コードMultiWrite.jsをダウンロードします。
const ops = [
{
tableName: 'ticket',
put: {
"ticketNo": "1762344493810",
"confNo" : "LE6J4Z"
},
abortOnFail: true
},
{
tableName: 'ticket.bagInfo',
put: {
"ticketNo":"1762344493810",
"id":"79039899165297",
"tagNum":"17657806255240",
"routing":"MIA/LAX/MEL",
"lastActionCode":"OFFLOAD",
"lastActionDesc":"OFFLOAD",
"lastSeenStation":"MEL",
"lastSeenTimeGmt":"2019-02-01T16:13:00Z",
"bagArrivalDate":"2019-02-01T16:13:00Z"
},
abortOnFail: true
}
];
const res = await handle.writeMany(ops, null);
TypeScript: こちらのサンプルの中からフル・コードMultiWrite.tsをダウンロードします。
const ops = [
{
tableName: 'ticket',
put: {
"ticketNo": "1762344493810",
"confNo" : "LE6J4Z"
},
abortOnFail: true
},
{
tableName: 'ticket.bagInfo',
put: {
"ticketNo":"1762344493810",
"id":"79039899165297",
"tagNum":"17657806255240",
"routing":"MIA/LAX/MEL",
"lastActionCode":"OFFLOAD",
"lastActionDesc":"OFFLOAD",
"lastSeenStation":"MEL",
"lastSeenTimeGmt":"2019-02-01T16:13:00Z",
"bagArrivalDate":"2019-02-01T16:13:00Z"
},
abortOnFail: true
}
];
const res = await handle.writeMany(ops, null);
PutManyAsyncメソッドを使用すると、主キーの同じシャード・キー部分が、単一のアトミック書込み操作として共有される表に関連付けられた一連のput操作を実行できます。PutManyAsyncメソッドを使用して、データを親表と子表に同時に追加することもできます。これは、関連する複数の行をアトミックに変更する効率的な方法です。
すべてのクラスおよびメソッドの詳細は、Oracle NoSQL Dotnet SDK APIリファレンスを参照してください。
こちらにあるサンプル中からフル・コードMultiWrite.csをダウンロードします。
private static async Task mul_write(NoSQLClient client,string parentbl_name,
string data1, string childtbl_name, string data2){
var result = await client.WriteManyAsync(
new WriteOperationCollection()
.AddPut(parentbl_name, FieldValue.FromJsonString(data1).AsMapValue)
.AddPut(childtbl_name, FieldValue.FromJsonString(data2).AsMapValue)
);
}