使用元组创建 table 的 Cassandra 2.1 CQL 错误:输入 '>' 处没有可行的替代方案

Cassandra 2.1 CQL error creating table with tuple: no viable alternative at input '>'

这可能真的很愚蠢...但我无法使用新的元组类型创建 table:

cqlsh:ta> CREATE TABLE tuple_test (k int PRIMARY KEY, v frozen <tuple<int, int>> );
Bad Request: line 1:68 no viable alternative at input '>'
cqlsh:ta> 

我几乎从 DataStax 文档中复制了 table 创建语句...我错过了什么?

谢谢!

更新 - 基于 BryceAtNetwork23 和 RossS 的帮助:

是的,你是对的 - 我有带有 Cassandra 2.0 的 DataStax Enterprise。

我已经安装了带有 Cassandra 2.1 的 DataStax Community,一切正常!

请注意:跳过 'frozen' 关键字不适用于 DSC 的 Cassandra 发行版 - 但冻结确实有效。感谢您的帮助!

[cqlsh 4.1.1 | Cassandra 2.1.2 | DSE  | CQL spec 3.1.1 | Thrift protocol 19.39.0]
cqlsh> CREATE TABLE ta.tuple_test (k int, v tuple<int, int>,PRIMARY KEY(k) );
Bad Request: Non-frozen tuples are not supported, please use frozen<>
cqlsh> CREATE TABLE ta.tuple_test (k int, v frozen <tuple<int, int>>,PRIMARY KEY(k) );
cqlsh> 

很奇怪。我犯了同样的错误。我确实设法通过一两次轻微的修改让它工作。然后我做了一个 desc 只是为了确保它创建正常:

aploetz@cqlsh> CREATE TABLE Whosebug.tuple_test (k int, v tuple<int, int>,PRIMARY KEY(k) );

aploetz@cqlsh> use Whosebug ;
aploetz@cqlsh:Whosebug> desc table tuple_test ;

CREATE TABLE Whosebug.tuple_test (
    k int PRIMARY KEY,
    v frozen<tuple<int, int>>
) WITH bloom_filter_fp_chance = 0.01
    AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
    AND comment = ''
    AND compaction = {'min_threshold': '4', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32'}
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99.0PERCENTILE'

最主要的是,我没有在我的CREATE中指定frozen,但是当你desc table时,你可以看到它知道把它放在那里。

编辑 - 这是我的 cqlsh 规范:

[cqlsh 5.0.1 | Cassandra 2.1.0-rc5-SNAPSHOT | CQL spec 3.2.0 | Native protocol v3]

Cassandra 2.0.11.83

嗯...据此,我不知道您实际上使用的是 Cassandra 2.1。而且我很确定 Tuple 类型是 2.1 和更高版本的功能。仔细检查您的 Cassandra 版本一次。此外,如果您使用 DSE(这意味着您有支持),我会向他们开具一张票,描述您看到的错误。

编辑 - 仅供参考,我已将我的 2.1.0-rc5 版本升级到 2.1.2,运行 你原来的 CREATE,它按原样工作:

Connected to PermanentWaves at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
aploetz@cqlsh> use Whosebug ;
aploetz@cqlsh:Whosebug> CREATE TABLE tuple_test (k int PRIMARY KEY, v frozen <tuple<int, int>> );
aploetz@cqlsh:Whosebug> desc table tuple_test ;

CREATE TABLE Whosebug.tuple_test (
    k int PRIMARY KEY,
    v frozen<tuple<int, int>>
)...