SELECT常数值是Cassandra

SELECT contant value is Cassandra

我正在尝试在 Cassandra CQL3 中做一个简单的 select,在常量列名称下包含一个硬编码值(常量),但我无法让它工作

这是查询

SELECT 1 as "id"

在我使用的所有类型的 DBMS 中工作正常,但在此处抛出此错误:

Error: ResponseError: line 1:7 no viable alternative at input '1' (SELECT [1]...)

正确的语法是什么?

不幸的是,CQL 不是 SQL,并且像这样的查询在 cqlsh 中不能像在关系对应项中那样工作。 DataStax SELECT documentation 表示选择器必须是以下之一:

  1. 栏目名称
  2. WRITETIME(列名)
  3. TTL(列名)
  4. 函数

虽然 SELECT 1 as id 查询可能不起作用,但还有其他稍微有用的东西可以用。例如,如果我需要快速生成一个 UUID,我可以使用以下查询来实现:

aploetz@cqlsh:Whosebug> SELECT uuid() FROM system.local;

 system.uuid()
--------------------------------------
 a55c17f7-d19d-4531-85be-75551e3fd546

(1 rows)

这样做有两个原因:

  1. SELECT 子句调用 uuid() 函数。

  2. system.local table 只包含一行。如果你 运行 这个 SELECT 反对另一个 table,它会 return 与 CQL 行一样多的 UUID。

我发现了一种非常棘手的方法。

SELECT blobAsBigInt(bigintAsBlob(1)) AS c FROM table;

将为您提供值为 1 的常量列。如果您想自己尝试这一切,请确保

SELECT blobAsBigInt(bigintAsBlob(1)) AS c FROM table LIMIT 1;

否则你永远听不到它的结尾。