clojure - Invalid serialised value error when reading a map of stringified json objects from Cassandra 1.2 using DataStax 1.0.5 java driver and Cassaforte -


i'm using cassaforte 1.3.0-beta9, cassandra 1.2 (datastax), , com.datastax.cassandra/cassandra-driver-core 1.0.5 (since 2.0 not work cassandra 1.2). have table following schema:

  create table entities (   id text,   address_country text,   address_county text,   address_region text,   address_street_two text,   csv_uploads list<text>,   documents list<text>,   name text,   notes list<text>,   photos list<text>,   project_id text,   property_code text,   property_data text,   retrofit_completion_date text,   metering_point_ids text,   devices map<text,text>,   user_id text,   primary key (id) ) 

this example of what's stored in row:

7b237da126d39ccf98f80d78b6145a10828970f8 | {'b9d88015c84312bf24cef0e7f1a0baf98dbc8d8d':   '{"metadata":{"passivrole":"zone 1 temperature,zone 1 temperature"},     "readings":       [{"type":"temperature","resolution":"120","accuracy":"0.1","period":"instant"},        {"type":"interpolatedtemperatureair","resolution":100,"accuracy":"0.1","period":"instant"}],    "description":"external air temperature sensor",    "entity-id":"3e0730d4672538307056a30615aaaa333107d94e"}',  'd2fe3dca47b760dd67759a56ee0ebbc2cb3395f4':    '{"metadata":{"passivrole":"zone 1 humidity"},     "readings":[{"type":"blah","resolution":"120","accuracy":"0.1","period":"instant"}],   "description":" air humidity sensor",   "entity-id":"3e0730d4672538307056a30615aaaa333107d94e"}'} | alice 

when try read devices column following error:

com.datastax.driver.core.exceptions.invalidtypeexception: invalid serialized value type map<text, text> (string didn't validate.)     @ com.datastax.driver.core.datatype.deserialize(datatype.java:503) 

i can read devices column no problems using cqlsh (which shown above). values stored in map stringified json objects.

here's sample workflow:

(require '[clojurewerkz.cassaforte.client :as cassaclient]          ' [clojurewerkz.cassaforte.query :as cassaquery]          ' [clojurewerkz.cassaforte.cql :as cql])  ;; select on empty devices: (binding [cassaclient/*default-session* session]       (let [entity (cql/select :entities (cassaquery/where :id "3e0730d4672538307056a30615aaaa333107d94e"))]         (prn "retrieved entity: " entity)))  ;; returns vector of results, no errors: "retrieved entity: " [{:retrofit_completion_date nil, :notes nil, :property_code "3e49de0-12af-012e-4f3a-12313b0348f8", :devices nil, :name nil, :user_id "alice", :csv_uploads nil, :project_id "0b4f512fb7834a0878252ab144a525d424445ba2", :photos nil, :property_data nil, :metering_point_ids "[\"1\" \"2\"]", :address_street_two nil, :documents nil, :address_region nil, :address_country nil, :address_county nil, :id "3e0730d4672538307056a30615aaaa333107d94e"}]  ;; update using cassaforte: (binding [cassaclient/*default-session* session]   (cql/update :entities {:devices  {"0edf9e09bce895caf0342ac6ae12511555930362" "{:metadata {\"passivrole\" \"zone 1 humidity\"}, :readings [{\"type\" \"tba\", \"resolution\" \"90\", \"accuracy\" \"0.2\", \"period\" \"instant\"}], :description \"lalalala\", :entity-id \"3e0730d4672538307056a30615aaaa333107d94e\"}"}} (cassaquery/where :id "3e0730d4672538307056a30615aaaa333107d94e")))  ;; update worked ok, cqlsh (select devices entities id = '3e0730d4672538307056a30615aaaa333107d94e';) ;; returns correct map:  ;; {'0edf9e09bce895caf0342ac6ae12511555930362': '{:metadata {"passivrole" "zone 1 humidity"}, :readings [{"type" "tba", "resolution" "90", "accuracy" "0.2", "period" "instant"}], :description "lalalala", :entity-id "3e0730d4672538307056a30615aaaa333107d94e"}'}  ;; select using cassaforte (binding [cassaclient/*default-session* session]       (let [entity (cql/select :entities (cassaquery/where :id "3e0730d4672538307056a30615aaaa333107d94e"))]         (prn "retrieved entity: " entity)))  ;; returns error: ;; invalidtypeexception invalid serialized value type map<text, text> (string didn't validate.)  com.datastax.driver.core.datatype.deserialize (datatype.java:503) 

i've tried same workflow using raw cql , cassaforte, , results same:

(require '[clojurewerkz.cassaforte.client :as cassaclient])  ;; select on empty devices: (cassaclient/execute session "select * entities id = '3e0730d4672538307056a30615aaaa333107d94e';")  ;; returns vector of results, no errors: [{:retrofit_completion_date nil, :notes nil, :property_code "3e49de0-12af-012e-4f3a-12313b0348f8", :devices nil, :name nil, :user_id "alice", :csv_uploads nil, :project_id "0b4f512fb7834a0878252ab144a525d424445ba2", :photos nil, :property_data nil, :metering_point_ids "[\"1\" \"2\"]", :address_street_two nil, :documents nil, :address_region nil, :address_country nil, :address_county nil, :id "3e0730d4672538307056a30615aaaa333107d94e"}]  ;; update using cassaforte: (cassaclient/execute session "update entities set devices = {'0edf9e09bce895caf0342ac6ae12511555930362' : '{:metadata {\"passivrole\" \"zone 1 humidity\"}, :readings [{\"type\" \"tba\", \"resolution\" \"90\", \"accuracy\" \"0.2\", \"period\" \"instant\"}], :description \"lalalala\", :entity-id \"3e0730d4672538307056a30615aaaa333107d94e\"}'} id = '3e0730d4672538307056a30615aaaa333107d94e';")  ;; update worked ok, cqlsh (select devices entities id = '3e0730d4672538307056a30615aaaa333107d94e';) ;; returns correct map:  ;; {'0edf9e09bce895caf0342ac6ae12511555930362': '{:metadata {"passivrole" "zone 1 humidity"}, :readings [{"type" "tba", "resolution" "90", "accuracy" "0.2", "period" "instant"}], :description "lalalala", :entity-id "3e0730d4672538307056a30615aaaa333107d94e"}'}  ;; select using cassaforte (cassaclient/execute session "select * entities id = '3e0730d4672538307056a30615aaaa333107d94e';")  ;; returns error: ;; invalidtypeexception invalid serialized value type map<text, text> (string didn't validate.)  com.datastax.driver.core.datatype.deserialize (datatype.java:503) 

any and/or suggestions on how json objects should stored in cassandra's map collection appreciated.

(cassaforte maintainer here)

haven't seen question until now,

this issue 1.0.5 version of datastax driver. cassaforte @ 2.0.0, issue closed wit version above beta12. more info here: https://github.com/clojurewerkz/cassaforte/issues/41

use latest version of cassaforte , try sticking version of java driver comes bundled cassaforte , it'll great.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -