【问题标题】:Cassandra "no viable alternative at input"Cassandra“在输入方面没有可行的替代方案”
【发布时间】:2015-11-14 00:46:15
【问题描述】:

我正在尝试在表格中插入一个简单的行。有人能指出这里发生了什么吗?

CREATE TABLE recommendation_engine_poc.user_by_category (
        game_category text,
        customer_id text,
        amount double,
        game_date timestamp,
        PRIMARY KEY (game_category, customer_id)
    ) WITH CLUSTERING ORDER BY (customer_id ASC)
        AND bloom_filter_fp_chance = 0.01
        AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
        AND comment = ''
        AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
        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';

    cqlsh:recommendation_engine_poc> insert into user_by_category  ('game_category','customer_id') VALUES ('Goku','12') ;
    SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:31 no viable alternative at input 'game_category' (insert into user_by_category  (['game_categor]...)">

【问题讨论】:

  • 每个开发人员在重新检查单引号或双引号时可能会忽略一个错误!!!!!!
  • @SuhailMumtazAwan 你救了我!

标签: cassandra cassandra-2.0


【解决方案1】:

语法错误。你在这里:

插入 user_by_category (game_category,customer_id) VALUES ('悟空','12');

或:

插入 user_by_category ("game_category","customer_id") VALUES ('卡卡罗特','12');

第二个通常用于区分大小写的列名。

【讨论】:

【解决方案2】:

这个问题有两个原因,

  1. 双引号(“)而不是单引号(')
  2. 在 IN 命令中的值之后输入键
  3. 字符编码

所以在使用 IN 命令等过滤器时
从数据库中选择列,其中 column_name IN('xyz','yzx')
单行中的 IN 命令

它应该是单行而不是
Select column from database where column_name IN('xyz',
'yzx')
多行 IN 命令

【讨论】:

    【解决方案3】:

    使用占位符时(无论是用于准备语句,还是仅使用 dict 来填充值),可能会出现另一个问题:您放入 dict 的任何内容都可能无法计算为 int、str 等简单类型. 对我来说,这发生在IntEnum 上,它显示为&lt;MyIntEnum.CONSTANT: 4&gt; 而不是4,但它可能发生在任何复杂的对象上,然后显示为&lt;object object at 0x7fbf08a0bdf0&gt;

    所以如果你使用表格:

    session.execute(
            INSERT INTO table (id, name)
            VALUES (%(id)s, %(name)s),
            {"id": 123456, "name": "example"}
    )
    

    确保 dict 中的所有内容实际上都是字符串、int、float 等。

    这不是这个问题的问题,但因为它是另一个错误的编码,这是谷歌第一次命中这个问题,我希望这对某人有帮助:)

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多