首页 文章

我可以在Cassandra中有一个以数字开头的键空间吗?

提问于
浏览
1

所以我读了https://www.datastax.com/documentation/cql/3.0/cql/cql_reference/create_keyspace_r.html,它在哪里说"Keyspace names are 32 or fewer alpha-numeric characters and underscores, the first of which is an alpha character." . 然而,如果我用Cassandra 2.1.2打开cqlsh并执行此操作:

cqlsh> create keyspace "123abc" with replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

那么它创建键空间没问题,我可以插入和查询数据没问题 . 文档对我说谎吗?

1 回答

  • 1

    不,文档不是骗你的 . 当我尝试创建名为 123abc 的键空间时,出现错误:

    create keyspace 123abc with replication = 
    {'class': 'NetworkTopologyStrategy', 'PloetzLabs': '1'};
    
    SyntaxException: ErrorMessage code=2000 [Syntax error in CQL query] 
        message="line 1:28 missing K_WITH at 'replication' 
        (create keyspace 123abc with [replication] =...)"
    

    另一方面,当我将键空间名称封装在双引号中时(就像你所做的那样),它可以工作 . 但是当我描述我的键空间时,这就是我现在看到的:

    aploetz@cqlsh> desc keyspaces;
    
    system_traces  system  "123abc"  stackoverflow
    

    当我尝试 use 键空间时,事情变得有趣:

    aploetz@cqlsh> use 123abc;
    
    Improper use command.
    
    aploetz@cqlsh> use "123abc" ;
    aploetz@cqlsh:123abc> SELECT * FROM 123abc.test1 ;
    
    SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] 
        message="line 1:20 mismatched character '.' expecting set null">
    
    aploetz@cqlsh:123abc> SELECT * FROM "123abc".test1 ;
    
     id  | value
    -----+-------
     id1 |  val1
    
    (1 rows)
    

    引号不会显示在cqlsh提示符中,但现在只要您与该键空间进行交互,就会需要它们 .

    所以从技术上讲,键空间名称中的第一个字符不是数字,而是双引号 . 所以也许文档在某些方面(LOL)存在,应该读作:

    ...第一个是字母字符,除非用双引号括起来 .

相关问题