MR_COUNTER列を含む行の更新
複数リージョン表のMR_COUNTER列を更新できます。
例1: MR_COUNTER列の値の増分。
MR_COUNTER列を更新するには、その値を増分します。簡単な例として、ユーザーがソーシャル・メディアWebサイトで取得する「いいね」を増分します。
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列の値の減分。
値を減分することで、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列を更新できます(MR_COUNTER列と同じ方法)。
例: JSON MR_COUNTER列の値の増分: 値を増分することでJSON MR_COUNTER列を更新できます。
UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna";
値の減分によってJSON MR_COUNTER列を更新することもできます。
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;
ステップ1: リージョン
FRA
内のdemoJSONMR
表に1行挿入します。INSERT INTO demoJSONMR VALUES (
Anna,
{
"id" : 1,
"counter" : NULL,
"person" : {
"age" : 10,
"number" : 100
}
}
}
ステップ2: 上で挿入した行を更新し、JSON MR_COUNTERフィールド
counter
を増分します。UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna"
ステップ3: リモート・リージョン
LON
で、主キー(Anna)は同じだが他のフィールドの値は異なる表に、1行挿入します。INSERT INTO exampleTable VALUES (
Anna,
{
"id" : 2,
"counter" : NULL,
"person" : {
"age" : 10,
"number" : 101
}
}
}
ステップ4: リモート・リージョン
LON
で、そのレコードを更新し、JSON MR_COUNTERフィールドcounter
を増分します。UPDATE demoJSONMR a SET a.jsonWithCounter.counter = a.jsonWithCounter.counter + 1
WHERE name = "Anna";
ステップ5: 上の文で、リモート行が更新されます。この更新は、次に示すように、ローカル行およびフィールド
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操作が実行されません。これらの行は、矛盾した行としてログに記録されます。