在cassandra中创建表的密钥空间名称问题

时间:2015-02-11 05:23:24

标签: java cassandra apache-spark

我有一个现有的密钥空间'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

我该如何解决这个问题?

2 个答案:

答案 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)");