-
👀 Cassandra Keyspace, Table 스키마 생성(feat. Collection type, User-Defined type 생성)DataBase/Cassandra 2021. 7. 31. 23:53728x90
1. KEYSPACE 생성 및 사용
cqlsh> CREATE KEYSPACE test with replication = {'class': 'SimpleStrategy', 'replication_factor':1};
cqlsh> use test;
2. Table 스키마 생성
cqlsh> CREATE TABLE stat (id text primary key, seedGoodsCode text, w2v_view list<text>, w2v_purchase list<text>, cf_item_to_item list<text>, ml_item_to_item list<text>, regDtm text);
3. 스키마 구조에 맞춰 데이터 삽입
> INSERT INTO stat JSON '{ "id" : "60c93", "seedGoodsCode" : "196", "w2v_view" : [ { "candGoodsCode" : "1961", "goodsNm" : "레이저 수평기", "goodsCate" : "048", "goodsCateNm" : "자동차/공구", "value" : 0.5859805955152076 }, { "candGoodsCode" : "1962", "goodsNm" : "캔스톤 스피커", "goodsCate" : "045", "goodsCateNm" : "디지털/가전", "value" : 0.628591838922856 } ], "w2v_purchase" : [ { "candGoodsCode" : "1963", "goodsNm" : "타이스노우체인", "goodsCate" : "048", "goodsCateNm" : "자동차/공구", "value" : 0.5901372861625159 } ], "cf_item_to_item" : [ { "candGoodsCode" : "1964", "goodsNm" : "재사용 에너로이드", "goodsCate" : "045", "goodsCateNm" : "디지털/가전", "value" : 0.6102703937448448 } ], "ml_item_to_item" : [ { "candGoodsCode" : "1965", "goodsNm" : "접이식욕조", "goodsCate" : "041", "goodsCateNm" : "생활/욕실", "value" : 0.6108573066498462 } ], "regDtm" : "2021-06-15T23:30:30.407+0000" }';
💩 InvalidRequest: Error from server: code=2200 [Invalid query] message="Error decoding JSON value for cf_item_t o_item: Expected a UTF-8 string, but got a LinkedHashMap: {candGoodsCode=196, goodsNm=재사용 에너로이드, goodsCate=045, goodsCateNm=디지털/가전, value=0.6102703937448448}"
몇 개의 필드들이 리스트 안에 딕셔너리 데이터를 갖는 nested 구조 이기 때문에,
그냥 기본 JSON 형태로 insert를 시도했을 때 에러가 났다.
👉 따라서 List Type JSON형태로의 삽입을 시도해봤다.
3-1) List Type JSON으로 삽입하기
*Map: key-value pairs 저장하기위한 Type
https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/collection_type_r.html
> CREATE TABLE stat (id text PRIMARY KEY, seedGoodsCode text, w2v_view list<frozen<map<text,text>>>, regDtm text);
> INSERT INTO stat JSON '{ "id" : "60c9382464f6fa1c7730e9ec", "seedGoodsCode" : "196", "w2v_view" : [ { "candGoodsCode" : "1961", "goodsNm" : "레이저 수평기", "goodsCate" : "048", "goodsCateNm" : "자동차/공구", "value" : 0.5859805955152076 }, { "candGoodsCode" : "1962", "goodsNm" : "캔스톤 스피커", "goodsCate" : "045", "goodsCateNm" : "디지털/가전", "value" : 0.628591838922856 } ], "regDtm" : "2021-06-15T23:30:30.407+0000" }';
💩 InvalidRequest: Error from server: code=2200 [Invalid query] message="Error decoding JSON value for w2v_view: Expected a UTF-8 string, but got a Double: 0.5859805955152076"
위와 같은 방법은, nested 구조 딕셔너리 내부 값의 type을 하나로 통일해줘야 하는 문제가 있었으므로,
value값을 string이 아닌, int/float 등의 다른 형태로 지정하려면 다른 방법을 적용해야 했다.
따라서, 여러 방안을 검색해본 결과 User-Defined Type을 생성하여 다시 시도를 해보았다.
1. User-Defined-Type 생성하기
cqlsh:test> CREATE TYPE test.rrf_type ( candGoodsCode text, goodsNm text, goodsCate text, goodsCateNm text, value double );
# TYPE 삭제(TABLE 삭제 후 TYPE 삭제할 것!) cqlsh:test> DROP TABLE stats; cqlsh:test> DROP TYPE test.rrf_type;
생각해볼 방안:
- 현재 리스트 내부 datatype을 유지하며 추가적인 데이터 삽입은 없음
- 현재 리스트 내부 datatype 형태로 추가적인 데이터 삽입 필요
2. Table 스키마 생성
cqlsh:test> CREATE TABLE stat (id text PRIMARY KEY, seedGoodsCode text, w2v_view list<frozen<rrf_type>>, w2v_purchase list<frozen<rrf_type>>, cf_item_to_item list<frozen<rrf_type>>, ml_item_to_item list<frozen<rrf_type>>, regDtm text);
cqlsh:test> INSERT INTO stat JSON '{ "id" : "60d11ec2e15e7216557ff208", "seedGoodsCode" : "196", "w2v_view" : [ { "candGoodsCode" : "1961", "goodsNm" : "레이저 수평기", "goodsCate" : "048", "goodsCateNm" : "자동차/공구", "value" : 0.5859805955152076 }, { "candGoodsCode" : "1962", "goodsNm" : "캔스톤 스피커", "goodsCate" : "045", "goodsCateNm" : "디지털/가전", "value" : 0.628591838922856 } ], "w2v_purchase" : [ { "candGoodsCode" : "1963", "goodsNm" : "타이스노우체인", "goodsCate" : "048", "goodsCateNm" : "자동차/공구", "value" : 0.5901372861625159 } ], "cf_item_to_item" : [ { "candGoodsCode" : "1964", "goodsNm" : "재사용 에너로이드", "goodsCate" : "045", "goodsCateNm" : "디지털/가전", "value" : 0.6102703937448448 } ], "ml_item_to_item" : [ { "candGoodsCode" : "1965", "goodsNm" : "접이식욕조", "goodsCate" : "041", "goodsCateNm" : "생활/욕실", "value" : 0.6108573066498462 } ], "regDtm" : "2021-06-21T23:20:06.420+0000" }';
- 이상 오늘의 삽질일기 끝:)
여기저기 삽질도 해보고
날려도 먹으면서
배우는 게
결국 남는거다
- Z.Sabziller
'DataBase > Cassandra' 카테고리의 다른 글
Docker Hub Cassandra 공식 도커 이미지로 컨테이너 띄우기(feat. cqlsh 실행) (0) 2021.08.05 Cassandra 3.11.3 버전 설치 Dockerfile 작성 및 컨테이너 실행(feat. sudo 명령어 X) (0) 2021.08.02 [Cassandra 설치 #3] Cassandra 3.11 설치 및 Cqlsh 실행 오류 해결(feat. Cassandra-driver) (0) 2021.07.26 [Cassandra 설치 #2] Python2.7 파이썬 2점대 버전 설치 및 실행 (0) 2021.07.23 [Cassandra 설치 #1] 리눅스 JAVA 설치 (feat. Java SDK Java 8 버전) (0) 2021.07.21