我是新的 cassandra 和刚刚安装,并希望尝试它。所以我尝试了以下代码:
import cassandra from 'cassandra-driver';
const client = new cassandra.Client({
contactPoints: ['localhost'],
localDataCenter: 'datacenter1',
keyspace: 'ks1'
});
const query1 = "CREATE TABLE users(name text , emailtext, PRIMARY_KEY(email, name)) VALUES('someone' , 's@s.com')";
const query2 = 'SELECT name, email FROM users WHERE name = ?';
await client.execute(query1);
await client.execute(query2)
.then(result => console.log('User with email %s', result.rows[0].email));
但我得到的结果是:
> cassandra_test@1.0.0 start
> ts-node-esm src/index.ts
/home/a/bars/cassandra_test/node_modules/cassandra-driver/lib/readers.js:389
const err = new errors.ResponseError(code, message);
^
ResponseError: Keyspace 'ks1' does not exist
at FrameReader.readError (/home/a/bars/cassandra_test/node_modules/cassandra-driver/lib/readers.js:389:17)
at Parser.parseBody (/home/a/bars/cassandra_test/node_modules/cassandra-driver/lib/streams.js:209:66)
at Parser._transform (/home/a/bars/cassandra_test/node_modules/cassandra-driver/lib/streams.js:152:10)
at Parser.Transform._write (node:internal/streams/transform:175:8)
at writeOrBuffer (node:internal/streams/writable:392:12)
at _write (node:internal/streams/writable:333:10)
at Parser.Writable.write (node:internal/streams/writable:337:10)
at Protocol.ondata (node:internal/streams/readable:766:22)
at Protocol.emit (node:events:513:28)
at Protocol.emit (node:domain:489:12) {
info: 'Represents an error message from the server',
code: 8704
}
问题是什么?我如何解决它?
PS:我使用的是Ubuntu 22. 04和NodeJS版本9。
1条答案
按热度按时间bhmjp9jg1#
因此
ks1
密钥空间不存在,您需要创建它。你可以使用
cqlsh
工具(可以在Cassandra的bin/
目录中找到),因为你的集群看起来像是一个本地节点,并且没有激活安全性,你应该可以简单地通过以下操作进入它:进入后,可以使用以下命令创建密钥空间:
这是最快的解决办法。
在查看了CQL查询之后,也发现了一些错误。
CREATE TABLE
语句不允许在创建时插入值。因此,需要两个独立的查询:注意,在
CREATE TABLE
语句中,我还更正了email text
和PRIMARY KEY
之间的间距。另外,
query2
看起来像是在使用问号?
来绑定一个预准备语句中的变量,但我不知道这是在哪里发生的,当你了解这一点时,请查看Parameterized Queries上Node.js驱动程序的DataStax文档。还要注意,按照这个表的PRIMARY KEY的结构,它只能通过
email
或email
和name
查询,但不能单独通过name
查询。