cassandra在一列中导入json

r8xiu3jd  于 2021-06-14  发布在  Cassandra
关注(0)|答案(2)|浏览(308)

我试图在一列中导入cassandra中的json文件。我使用python作为代码。这个想法是让一个id列和第二个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?
之后我需要在es中使用这个json。因此,如果我能将它作为json导入到一列中,这将是最好的。

7rtdyuoh

7rtdyuoh1#

有一种方法可以将参数传递给cql,请参阅此文档。https://datastax.github.io/python-driver/getting_started.html#passing-cql查询的参数
尝试以下操作:

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'}
nx7onnlm

nx7onnlm2#

下面的格式是如何将json数据存储到cassandra数据库中。

{
  "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"
}

相关问题