@db2021 db2021 / test_table.cql
Created at Fri Oct 29 16:09:09 JST 2021
JSON形式でINSERT (expのCassandraデータ型をmapにした場合)
test_table.cql
Raw
CREATE TABLE odordb.test_table (
    id int PRIMARY KEY,
    exp map<text,double>
);
 
INSERT INTO odordb.test_table JSON '{"id":1,
  "exp": {
    "EDIBLE": 10.5,
    "BAKERY": 0.0,
    "SWEET": 0.0,
    "FRUIT": 0.0,
    "FISH": 0.0,
    "GARLIC": 0.0,
    "SPICES": 0.0,
    "COLD": 0.0,
    "SOUR": 50.0,
    "BURNT": 0.0,
    "ACID" : 0.0,
    "WARM": 0.0,
    "MUSKY": 0.0,
    "SWEATY" : 0.0,
    "AMMONIA/URINOUS": 30.0,
    "DECAYED": 0.0,
    "WOOD": 0.0,
    "GRASS": 0.0,
    "FLOWER": 0.0,
    "CHEMICAL": 0.0
  }
}';
@takane takane commented on 29 Oct 2021

key文字列には / が使えないため、"AMMONIA/URINOUS" → "AMMONIA_URINOUS" に変更。
→ 再度確認するとこの場合は / も使えました。私の勘違いでした。上のスクリプトは変更しました。(2021.10.30)

上のスクリプトファイルをcqlshに読み込ませるには、test_table.cqlのあるディレクトリに移動して、以下のどちらかの方法で行う。

  1. シェルプロンプトから
     $ cqlsh -f test_table.cql
  2. cqlsh内
     cqlsh> source 'test_table.cql';

なお、すでにキースペース odordbが作成されているとする。

確認

cqlsh> select * from odordb.test_table ;

 id | exp
----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 | {'ACID': 0, 'AMMONIA/URINOUS': 30, 'BAKERY': 0, 'BURNT': 0, 'CHEMICAL': 0, 'COLD': 0, 'DECAYED': 0, 'EDIBLE': 10.5, 'FISH': 0, 'FLOWER': 0, 'FRUIT': 0, 'GARLIC': 0, 'GRASS': 0, 'MUSKY': 0, 'SOUR': 50, 'SPICES': 0, 'SWEATY': 0, 'SWEET': 0, 'WARM': 0, 'WOOD': 0}

(1 rows)

この形式だと

cqlsh> UPDATE odordb.test_table SET exp['ACID']=90.0 where id=1;

てなこともできる

上のUPDATE 実行後

cqlsh> select * from odordb.test_table;

 id | exp
----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 | {'ACID': 90, 'AMMONIA/URINOUS': 30, 'BAKERY': 0, 'BURNT': 0, 'CHEMICAL': 0, 'COLD': 0, 'DECAYED': 0, 'EDIBLE': 10.5, 'FISH': 0, 'FLOWER': 0, 'FRUIT': 0, 'GARLIC': 0, 'GRASS': 0, 'MUSKY': 0, 'SOUR': 50, 'SPICES': 0, 'SWEATY': 0, 'SWEET': 0, 'WARM': 0, 'WOOD': 0}

(1 rows)

JSON形式でselectを表示させると

cqlsh> select JSON * from odordb.test_table ;

 [json]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"id": 1, "exp": {"ACID": 90.0, "AMMONIA/URINOUS": 30.0, "BAKERY": 0.0, "BURNT": 0.0, "CHEMICAL": 0.0, "COLD": 0.0, "DECAYED": 0.0, "EDIBLE": 10.5, "FISH": 0.0, "FLOWER": 0.0, "FRUIT": 0.0, "GARLIC": 0.0, "GRASS": 0.0, "MUSKY": 0.0, "SOUR": 50.0, "SPICES": 0.0, "SWEATY": 0.0, "SWEET": 0.0, "WARM": 0.0, "WOOD": 0.0}}

(1 rows)

expだけJSON形式で表示

cqlsh> select JSON exp from odordb.test_table ;

 [json]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"exp": {"ACID": 90.0, "AMMONIA/URINOUS": 30.0, "BAKERY": 0.0, "BURNT": 0.0, "CHEMICAL": 0.0, "COLD": 0.0, "DECAYED": 0.0, "EDIBLE": 10.5, "FISH": 0.0, "FLOWER": 0.0, "FRUIT": 0.0, "GARLIC": 0.0, "GRASS": 0.0, "MUSKY": 0.0, "SOUR": 50.0, "SPICES": 0.0, "SWEATY": 0.0, "SWEET": 0.0, "WARM": 0.0, "WOOD": 0.0}}

(1 rows)

expの特定のkeyの値表示

cqlsh> select exp['AMMONIA/URINOUS'] from odordb.test_table;

 exp['AMMONIA/URINOUS']
------------------------
                     30

(1 rows)