使用元组创建 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>>
)...
这可能真的很愚蠢...但我无法使用新的元组类型创建 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>>
)...