Кассандра импортирует JSON в один столбец - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь импортировать JSON-файл в Cassandra в один столбец.Я использую Python в качестве кода.Идея состоит в том, чтобы один столбец идентификатора и второй столбец были JSON, как есть.

id | JSONDoc
----------------
1  | {'something': 'something', 'something1': '['somethingelse': 
'withsomethin']', ...'

Я получаю эту ошибку, когда пытаюсь запустить следующую команду

code=2200 [Invalid query] message="Invalid map literal for testdoc 
of type list<text>

Код:

session.execute("CREATE KEYSPACE doc WITH replication = 
{'class':'SimpleStrategy', 'replication_factor' : 3};")
session.set_keyspace('doc')
testdoc = str(doc)
session.execute("CREATE TABLE doc4 (nodeid int PRIMARY KEY, testdoc 
list<text>);")
query = "INSERT INTO doc.doc4 (nodeid, testdoc) VALUES ({0}, 
{1})".format(nodeid, testdoc)
session.execute(query)

Я думаю, что мне чего-то не хватает, когда я создаю таблицу или размер столбца, в котором находится json.Но я не знаю другого способа импортировать этот JSON как есть.Любые другие предложения или способы исправить это или импортировать любой вид JSON в одну колонку?

После этого мне нужно использовать этот JSON в ES.Поэтому будет лучше, если я смогу импортировать это как JSON в одном столбце.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Для приведенного ниже формата, как хранить данные JSON в Cassandra DB.

{
  "languages": {                  value as dict
    "python": "Elite", 
    "pascal": "Lame", 
    "perl": "Elite"
  }, 
  "foods": [                       value as list
    "Apple", 
    "Orange", 
    "Strawberry", 
    "Mango"
  ], 
  "name": "Martin D'vloper", 
  "employed": "true", 
  "skill": "Elite", 
  "job": "Developer"
}
0 голосов
/ 26 декабря 2018

Существует способ передачи параметра в CQL, см. Этот документ.https://datastax.github.io/python-driver/getting_started.html#passing-parameters-to-cql-queries

Попробуйте что-то вроде этого:

session.execute("CREATE KEYSPACE doc WITH replication =  {'class':'SimpleStrategy', 'replication_factor' : 1};")

session.set_keyspace('doc')

session.execute("CREATE TABLE doc4 (nodeid int PRIMARY KEY, testdoc text);")

myid = 1

doc = {"id": 101010, "name": "Adriano Bonacin"}

testdoc= str(doc)

session.execute(
"""
INSERT INTO doc.doc4 (nodeid, testdoc)
VALUES (%s, %s)
""",
(myid, testdoc)
)

См .:

cqlsh:doc> select * from doc.doc4;

nodeid | testdoc
--------+-------------------------------------------
  1 | {'id': 101010, 'name': 'Adriano Bonacin'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...