在 cassandra 中创建 table 的关键 space 名称问题

Key space name issue with creating table in cassandra

我有一个现有密钥 space 'emsSdk'。我需要在提到的键 space 到 java 中创建一个 table。所以我遵循了使用 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

我该如何解决这个问题?

我假设您使用 CQL3 创建 table。 CQL3 将键空间的名称、tables 等视为不区分大小写。 CQL3 语句中的名称将转换为小写,除非您将它们括在双引号中。

如果你在切换到CQL3之前创建了keyspace,keyspace的名称仍然是大小写混合存储的,即"emsSdk",与emssdk不匹配,CQL3后的名称将其转换为小写。

因此解决方法是在语句中引用名称:CREATE TABLE "emsSdk.activity" ... 当然你必须转义 Java String:

中的引号
"CREATE TABLE \"emsSdk.activity\" ..."

苏也:http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/ucase-lcase_r.html

您需要在查询中用引号将 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)");