我有一个Cassandra SQL语句在javascript文件中执行,其中包含几个参数,包括networkInterfaces TEXT:
client.execute("CREATE TABLE IF NOT EXISTS testdb.networkData (latitude DOUBLE, longitude DOUBLE, allowsVoIP BOOLEAN, speed DOUBLE, uuid TEXT, timestamp TIMESTAMP PRIMARY KEY, networkType TEXT, carrierName TEXT, altitude DOUBLE, macAddress TEXT, publicIP TEXT, ssidLabel TEXT, networkInterfaces TEXT)", function (err, result) {
if (!err){
if ( result.rowLength > 0 ) {
var data = result.rows[0];
console.log("Total rows : "+ data.count);
} else {
console.log("No rows");
}
}else{
console.log("count results err : "+err);
}
});
相同的案例" networkInterfaces"用于出现networkInterfaces的所有其他实例。这包括将数据插入表中的代码:
// TODO: Save LAN interfaces as well
const recordCommand = 'INSERT INTO testdb.networkData (latitude, longitude, allowsVoIP, speed, uuid, timestamp, networkType, carrierName, altitude, macAddress, publicIP, ssidLabel, networkInterfaces) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
const params = [
request.body.latitude,
request.body.longitude,
request.body.allowsVoIP,
request.body.speed,
request.body.uuid,
request.body.timestamp,
request.body.networkType,
request.body.carrierName,
request.body.altitude,
request.body.macAddress,
request.body.publicIP,
request.body.ssidLabel,
request.body.networkInterfaces
];
client.execute(recordCommand, params, { prepare: true }, function (error) {
assert.ifError(error);
//Inserted in the cluster
});
然而,当命令执行时,它表示存在以下未处理的错误:
错误:未定义的列名网络接口
未定义的列名称似乎不匹配,但networkInterfaces的所有实例都具有相同的大小写。还有其他一些问题吗?
答案 0 :(得分:0)
Cassandra默认会以小写形式转换所有表/列名称。
如果需要区分大小写的表/列名称,请将其用双引号括起来。
使用desc table_name
检查表格详细信息。
Eg:
Create table test(Column1 text primary key,"Column2" text);
will result in cassandra table with 2 columns (column1 [Note all are lower case] and Column2 [C is uppercase])
答案 1 :(得分:0)
以下是更正脚本的示例。这里我的键空间名称是yupoint。
CREATE TABLE IF NOT EXISTS yupoint.user (
id text,
login text,
password text,
firstname text,
lastname text,
email text,
activated boolean,
lang_key text,
activation_key text,
reset_key text,
reset_date timestamp,
authorities set<text>,;
PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS yupoint.user_by_login (
login text,
id text,
PRIMARY KEY(login, id)
);
现在更改使用您的键空间并创建一些记录。
使用yupoint;
yupoint>INSERT INTO user (id, login, password , firstname, lastname ,email ,activated ,lang_key, activation_key, authorities)
VALUES('3','admin','$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC','','Administrator','admin@localhost',true,'en','', {'ROLE_USER', 'ROLE_ADMIN'});
yupoint>INSERT INTO user_by_login (login, id)
VALUES('admin','3');
答案 2 :(得分:0)
Cassandra中的所有标识符(表名,列名等)都不区分大小写,除非每次引用它们时将它们用括起来。 DataStax documentation on this
因为这往往很乏味,所以大多数人使用snake_case命名表{和1}和network_data
等列表。如果您用引号括起来,这些标识符将继续显示在所有network_type
输出中的引号中:
DESCRIBE
我已将您的查询调整为使用大写,并在本地测试了此成功:
cqlsh:testdb> DESCRIBE TABLES;
table1 table2 network_data "networkData" table5