MR_COUNTER列を含む行の更新
ノート:
- 表のMR_COUNTERに値を明示的に指定するSET句またはPUT句。
- 表からMR_COUNTER列を削除するREMOVE句。
表からMR_COUNTER列を削除するには、ALTER文を使用できます。詳細は、「MR_COUNTER列の追加または削除」を参照してください。
MR_COUNTER列の値の増分。
簡単な例として、ユーザーがソーシャル・メディアWebサイトで取得する「いいね」を増分します。
例7-26 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"
MR_COUNTER列の値の減分。
次の例では、MR_COUNTERの値を小さくします。
例7-27 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"
JSON MR_COUNTER値の更新
複数リージョン表内のJSON MR_COUNTER列を更新できます(MR_COUNTER列と同じ方法)。
例7-28 JSON 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フィールドは個別に更新できます。ユーザーによる操作は必要なく、システムによって、これらの同時変更の際に自動的にマージが実行されます。
例7-29 リモート・リージョンとローカル・リージョンにある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
フィールドは、その表へのデータ挿入時に値がゼロに設定されるMR_COUNTERです。
例7-30 JSONコレクション表内の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}