2017-11-30 15 views
1

카산드라에지도 목록을 저장해야합니다. 그게 가능하니?카산드라 저장소 객체 목록

{ 
    "deviceId" : "261e92b8-91af-40da-8ba4-c39d821472ec", 
    "sensors": [ 
    { 
     "fieldSensorId": "sensorID", 
     "name": "sensorName", 
     "location": "sensor location", 
     "unit": "value units", 
     "notes": "notes" 
    }, 
    { 
     "fieldSensorId": "sensorID 2", 
     "name": "sensorName 2", 
     "location": "sensor location 2", 
     "unit": "value units", 
     "notes": "notes" 
    } 
    ] 
} 

CQL :

CREATE TABLE device_sensors (
    device_id text, 
    sensors list<frozen <map<text,text>>>, 
    time timeuuid, 
    PRIMARY KEY (device_id) 
) 

아직도 데이터를 삽입 할 수 없습니다 메신저 이 내 데이터의 JSON 표현이다. 그러한 데이터를 카산드라에 저장하는 올바른 방법은 무엇입니까? 나중에 내가 센서 목록을 쿼리해야합니다 센서 테이블을 만들고 센서를 사용하여 센서를 참조하는 것이 현명합니까?

+0

데이터를 삽입하는 데 무엇을 사용하고 있습니까? CQLSH에서 잘 작동합니다 :'device_sensors (device_id, sensors)에 삽입 VALUES ('121342', [{ '1': '2', '3': '4'}]), ' –

+0

spring-boot -data-cassandra. 내 엔터티 : @Column ("device_id") @PrimaryKeyColumn (name = "device_id", 서수 = 0, type = PrimaryKeyType.PARTITIONED) 개인 UUID deviceId; 비공개 UUID 시간. 개인 목록 > sensors; 그리고 오류 : "com.datastax.driver.core.exceptions.InvalidQueryException : 문자열을 확인하지 못했습니다." –

답변

1

나는 문제가 당신이 CQL에서 text으로 devide_id를 선언한다는 것입니다 생각,하지만 당신은 그것을 소스 코드에서 UUID를 선언하고, 데이터를 삽입 할 때 봄은 해당 유형으로 매핑합니다. deviceId 선언에 @CassandraType(type = Name.TEXT)을 추가 할 수 있습니까? 으로 충분하면 @Column 선언을 삭제할 수도 있습니다.

device_idUUID으로 선언하도록 테이블 정의를 변경할 수 있습니다.

+0

지금 당장. device_id의 유형이 잘못되었습니다. uuid로 조정되어 이제 작동합니다. 감사! –