MR_COUNTER列を含む複数リージョン表の作成

MR_COUNTERデータ型の列を含む複数リージョン表を作成できます。MR_COUNTERデータ型は、異なるリージョン間で同じデータが変更された場合に発生する可能性のある競合解消に対処するために使用されます。MR_COUNTERでは、異なるリージョンでデータ変更が同時に発生しますが、データは常に一貫性のある状態にマージできます。このマージは、特別な競合解消コードやユーザーの介入なしに、MR_COUNTERデータ型によって自動的に実行されます。MR_COUNTERデータ型の詳細は、概念ガイドの複数リージョン表でのCRDTデータ型の使用に関する項を参照してください。

次に例を示します。

フランクフルトとロンドンの両リージョンで、MR_COUNTERデータ型を使用してusersというMR表を作成します。

-- Create the users MR Table
sql-> CREATE TABLE users(
   -> id INTEGER,
   -> name STRING,
   -> team STRING,
   -> count INTEGER AS MR_COUNTER,
   -> PRIMARY KEY (id))
   -> IN REGIONS fra,lnd;
Statement completed successfully
# Verify the regions associated with the users MR table
sql-> DESC AS JSON TABLE users
{
   "json_version": 1,
   "type": "table",
   "name": "users",
   "regions": {
      "1": "fra",
      "2": "lnd"
   },
   "fields": [
   {
      "name": "id",
      "type": "INTEGER",
      "nullable": false
   },
   {
      "name": "name",
      "type": "STRING",
      "nullable": true
   },
   {
       "name": "team",
       "type": "STRING",
       "nullable": true
   },
   {
       "name" : "count",
       "type" : "INTEGER",
       "nullable" : false,
       "default" : 0,
       "MRCounter" : true
  }
],
   "primaryKey": [
       "id"
   ],
   "shardKey": [
       "id"
   ]
}
# Connect to the KVStore deployed in the 'lnd' region from the SQL shell
[~]$java -jar $KVHOME/lib/sql.jar \
     -helper-hosts host4:5000,host5:5000,host6:5000 \
     -store mrtstore
-- Create the users MR Table
sql-> CREATE TABLE users(
   -> id INTEGER,
   -> name STRING,
   -> team STRING,
   -> count INTEGER AS MR_COUNTER,
   -> PRIMARY KEY (id))
   -> IN REGIONS lnd,fra;
Statement completed successfully
# Verify the regions associated with the users MR table
sql-> DESC AS JSON TABLE users
{
   "json_version": 1,
   "type": "table",
   "name": "users",
   "regions": {
      "2": "fra",
      "1": "lnd"
   },
   "fields": [
   {
      "name": "id",
      "type": "INTEGER",
      "nullable": false
   },
   {
      "name": "name",
      "type": "STRING",
      "nullable": true
   },
   {
       "name": "team",
       "type": "STRING",
       "nullable": true
   },
   {
        "name" : "count",
        "type" : "INTEGER",
        "nullable" : false,
        "default" : 0,
        "MRCounter" : true
   }
],
   "primaryKey": [
       "id"
   ],
   "shardKey": [
       "id"
   ]
}

MR_COUNTERデータ型の作成および使用方法の詳細は、SQLリファレンス・ガイドのMR_COUNTERデータ型の使用に関する項を参照してください。

スキーマレスJSONフィールドでMR_COUNTERデータ型を使用できます。つまり、複数リージョン表にJSON列がある場合は、JSON列内でMR_COUNTERデータ型を使用できるということです。JSON列の1つ以上のフィールドをMR_COUNTERデータ型にできます。MR_COUNTERデータ型はINTEGER、LONGまたはNUMBERデータ型のサブタイプです。

次に例を示します。
CREATE TABLE demoJSONMR(name STRING,
  jsonWithCounter JSON(counter as INTEGER MR_COUNTER,
                       person.count as LONG MR_COUNTER),
  PRIMARY KEY(name)) IN REGIONS fra,lnd;