MR_COUNTER列を含む行の更新
標準の算術計算を使用して値を増分または減分することで、複数リージョン表のMR_COUNTER列を更新できます。MR_COUNTER列を含む表の作成については、「MR_COUNTERデータ型を使用した表の作成」を参照してください
例1: MR_COUNTER列の値の増分。
CREATE Table myTable( name STRING,
count INTEGER AS MR_COUNTER,
PRIMARY KEY(name)) IN REGIONS DEN,LON
INSERT INTO myTable(name) VALUES ("Chris')
UPDATE myTable SET count = count + 10 WHERE name = "Chris"
例2: MR_COUNTER列の値の減分。
CREATE Table myTable( name STRING,
count INTEGER AS MR_COUNTER,
PRIMARY KEY(name)) IN REGIONS DEN,LON
INSERT INTO myTable VALUES ("Chris',10)
UPDATE myTable SET count = count - 4 WHERE name = "Chris"
ノート:
- 表のMR_COUNTERに値を明示的に指定するSET句またはPUT句。
- 表からMR_COUNTER列を削除するREMOVE句。
表からMR_COUNTER列を削除するには、ALTER文を使用できます。詳細は、「MR_COUNTER列の追加または削除」を参照してください。
JSON MR_COUNTER値の更新:
複数リージョン表内のJSON MR_COUNTER列を更新できます(MR_COUNTER列と同じ方法)。
UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna"
UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter - 1
WHERE name = "Anna"
両方のリージョン内のカウンタ値の更新とマージの実行:
MR_COUNTERフィールドがリモートJSONフィールドとローカルJSONフィールドの両方に存在する場合、それらはMR_COUNTERデータ型としてマージされます。リモート・リージョン内とローカル・リージョン内のMR_COUNTERフィールドは個別に更新できます。ユーザーによる操作は必要なく、システムによって、これらの同時変更時に自動的にマージが実行されます。
demoJSONMR
という表が、下記と同じ定義で、FRA
およびLON
というリージョン内に作成されているとします。CREATE TABLE demoJSONMR(name STRING,
jsonWithCounter JSON(counter as INTEGER MR_COUNTER,
person.count as LONG MR_COUNTER),
PRIMARY KEY(name)) IN REGIONS FRA,LON
FRA
内のdemoJSONMR
表に1行挿入します。INSERT INTO demoJSONMR VALUES (
Anna,
{
"id" : 1,
"counter" : NULL,
"person" : {
"age" : 10,
"number" : 100
}
}
}
counter
を増分します。UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna"
LON
で、主キー(Anna)は同じだが他のフィールドの値は異なる表に、1行挿入します。INSERT INTO exampleTable VALUES (
Anna,
{
"id" : 2,
"counter" : NULL,
"person" : {
"age" : 10,
"number" : 101
}
}
}
LON
で、そのレコードを更新し、JSON MR_COUNTERフィールドcounter
を増分します。UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna"
counter
とマージされます。
SELECT * FROM demoJSONMR WHERE name = "Anna"
出力:
{"name":"Anna",
"jsonWithCounter":{"counter":2,"id":2,"person":
{"age":10,"count":0,"number":101}}
}
MR_COUNTERのリモートJSONおよびローカルJSONの定義が一致しない場合、一致していないスキーマに対してはINSERT操作またはUPDATE操作が実行されません。これらの行は、矛盾した行としてログに記録されます。
JSONコレクション表のMR_COUNTER値の更新:
MR_COUNTERを使用したショッピング・アプリケーション用に作成されたJSONコレクション表について考えてみます。表のmycounter
フィールドは、表へのデータの挿入時に値が0に設定されるMR_COUNTERです。ショッピング・アプリケーション表の行の例を次に示します。
{"contactPhone":"1817113382","address":{"city":"Houston","number":401,"state":"TX","street":"Tex Ave","zip":95085},"cart":[{"item":"handbag","priceperunit":350,"quantity":1},{"item":"Lego","priceperunit":5500,"quantity":1}],"firstName":"Adam","lastName":"Smith","mycounter":0}
MR_COUNTER値を更新するには、次の問合せに示すように、SET句にMR_COUNTERの名前を指定する必要があります。
UPDATE storeAcctMR s SET s.mycounter = s.mycounter + 5 WHERE s.contactPhone="1817113382"
この例では、連絡先電話番号が"1817113382"
の買物客のMR_COUNTERの値を5だけ増やしています。この買物客のレコードをフェッチすると、次の出力が表示されます:
{"contactPhone":"1817113382","address":{"city":"Houston","number":401,"state":"TX","street":"Tex Ave","zip":95085},"cart":[{"item":"handbag","priceperunit":350,"quantity":1},{"item":"Lego","priceperunit":5500,"quantity":1}],"firstName":"Adam","lastName":"Smith","mycounter":5}