我有一个现有的密钥空间'emsSdk'。我需要通过java在所提到的密钥空间中创建一个表。所以我使用spark-cassandra-connector跟随代码。代码如下:
ession.execute("CREATE TABLE emsSdk.activity (project_party_id TEXT, error_count TEXT,"
+ " lock_version TEXT, record_status_id TEXT, error_type TEXT, error_message TEXT, file TEXT, release_stage_id TEXT, "
+ "line_no TEXT, uid TEXT PRIMARY KEY, activity_type_id TEXT, created_at TEXT,"
+ "project_name TEXT, project_api_key TEXT, project_type_name TEXT, stage_name TEXT)");
但它给了我一个错误,
emssdk keyspace does not exists
我该如何解决这个问题?
答案 0 :(得分:4)
我假设您使用CQL3来创建表。 CQL3将键空间,表等的名称视为不区分大小写。 CQL3语句中的名称将转换为小写,除非用双引号将它们括起来。
如果在切换到CQL3之前创建了密钥空间,则密钥空间的名称仍然以大小写混合的形式存储,即" emsSdk",它与emssdk不匹配,CQL3后的名称将其转换为小写
所以修复是在语句中引用名称:CREATE TABLE "emsSdk.activity" ...
当然,您必须转义Java字符串中的引号:
"CREATE TABLE \"emsSdk.activity\" ..."
Soo:http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/ucase-lcase_r.html
答案 1 :(得分:2)
您需要在查询中将emsSdk括在引号中。如果你不这样做,那么它会转换为小写。从CQL查询引用时,任何使用大写字母创建的对象都需要用引号括起来。
Session.execute("CREATE TABLE \"emsSdk\".activity (project_party_id TEXT, error_count TEXT,"
+ " lock_version TEXT, record_status_id TEXT, error_type TEXT, error_message TEXT, file TEXT, release_stage_id TEXT, "
+ "line_no TEXT, uid TEXT PRIMARY KEY, activity_type_id TEXT, created_at TEXT,"
+ "project_name TEXT, project_api_key TEXT, project_type_name TEXT, stage_name TEXT)");