【问题标题】:Cassandra 2.1 CQL error creating table with tuple: no viable alternative at input '>'Cassandra 2.1 CQL 错误使用元组创建表:输入“>”没有可行的替代方案
【发布时间】:2016-03-25 05:13:51
【问题描述】:

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

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 文档中复制了表创建语句...我错过了什么?

谢谢!

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

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

我已经使用 Cassandra 2.1 安装了 DataStax Community,一切正常!

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

[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> 

【问题讨论】:

  • Marina,感谢您提供有关 frozen 关键字的信息。它可能对我有用,因为我的沙箱(在这里工作)仍在 2.1 候选版本上运行。我也会升级并再试一次。
  • 在我的家庭 2.1.2 集群上尝试了你原来的 CREATE,它工作得很好(见编辑)。
  • 太棒了 :) 我还必须将我的 DataStax 驱动程序升级到 2.1.4(我之前有 2.1.2)——以解决 guava lib 版本冲突——但这是一个不同的问题。现在一切正常。谢谢!

标签: cassandra cql cassandra-2.0


【解决方案1】:

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

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

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

CREATE TABLE stackoverflow.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 表时,你可以看到它知道把它放在那里。

编辑-这是我的cqlsh 规范:

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

卡桑德拉 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 stackoverflow ;
aploetz@cqlsh:stackoverflow> CREATE TABLE tuple_test (k int PRIMARY KEY, v frozen <tuple<int, int>> );
aploetz@cqlsh:stackoverflow> desc table tuple_test ;

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

【讨论】:

  • 谢谢你,@BryceAtNetwork23 !!但是,它在我的 cqlsh 中仍然对我不起作用...我采用了您的确切创建 stmt - 并且仍然遇到相同的错误。现在我开始怀疑最新的 DataStax Enterprise 4.6 附带的“cqlsh”版本可能不是正确的版本,并且不理解 Cassandra2.1...这是我的“cqlsh”的规格:[cqlsh 4.1.1 |卡桑德拉 2.0.11.83 | DSE 4.6.0 | CQL 规范 3.1.1 | Thrift 协议 19.39.0] 你能告诉我你的协议是什么吗?谢谢!
  • DSE 4.6 不附带 Cassandra 2.1,只有 2.0.11.83,所以这可能是示例不起作用的原因。
  • 谢谢@RussS,我是这么认为的。
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2013-01-31
  • 2013-01-23
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
相关资源
最近更新 更多