我可以在 Cassandra 中有一个名称以数字开头的键空间吗?
Can I have a keyspace in Cassandra whose name starts with a number?
所以我读了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};
然后它创建键空间没问题,我可以插入和查询数据没问题。文档是在骗我吗?
不,文档没有骗你。当我尝试创建名称为 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" Whosebug
当我尝试 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)并且应该读作:
...the first of which is an alpha character, unless enclosed in double quotation marks.
所以我读了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};
然后它创建键空间没问题,我可以插入和查询数据没问题。文档是在骗我吗?
不,文档没有骗你。当我尝试创建名称为 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" Whosebug
当我尝试 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)并且应该读作:
...the first of which is an alpha character, unless enclosed in double quotation marks.