【问题标题】:Key space name issue with creating table in cassandra在 cassandra 中创建表的键空间名称问题
【发布时间】:2015-02-11 14:56:29
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 你能告诉我们键空间实际上是创建的吗?
  • 创建密钥空间 emsSdkWITH 复制 = {'class': 'SimpleStrategy', 'replication_factor': 1}

标签: java cassandra apache-spark


【解决方案1】:

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

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

所以解决方法是在语句中引用名称:CREATE TABLE "emsSdk.activity" ... 当然,您必须转义 Java 字符串中的引号:

"CREATE TABLE \"emsSdk.activity\" ..."

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

【讨论】:

    【解决方案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)");
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2013-01-02
      • 2015-08-22
      • 2015-06-16
      • 1970-01-01
      • 2019-06-12
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多