这是我的表格结构:
CREATE TABLE test.messages_by_channel (
channel_id int,
message_id timeuuid,
message text,
user_id int,
PRIMARY KEY (channel_id, message_id)
) WITH CLUSTERING ORDER BY (message_id DESC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
AND comment = ''
AND compaction = {'class': 'SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.0
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';
当我运行这个时:
insert into messages_by_channel(1, now(), "test", 2);
我收到此错误:
SyntaxException: line 1:32 no viable alternative at input '1'
如何运行此插入查询并生成唯一的 timeuuid ?
如错误
SyntaxException
所示,您的 INSERT
失败,因为语法不正确。
您需要在 CQL 语句中枚举要更新的列。简化的语法格式为:
INSERT INTO table_name (column_list)
VALUES (values_to_insert)
在您的情况下,正确的语法是:
INSERT INTO messages_by_channel (channel_id, message_id, message, user_id)
VALUES (1, NOW(), 'test', 2)
请注意,消息文本用单引号 (
'
) 括起来,而不是双引号 ("
)。
您需要枚举正在插入的列,因为 Cassandra 具有稀疏存储——未分配值的列不会存储在磁盘上。干杯!