繁体   English   中英

Cassandra 选择 CQL:无法在通配符后添加列

[英]Cassandra select CQL: Cannot add column after wildcard

我需要将写入时间戳作为许多表的表导出的一部分输出,尽管我无法找到一种不强制我明确选择语句中所有列的方法。

而不是能够做到这一点:

SELECT *, writetime(data) AS timestamp  FROM dls.licenses;

我必须这样做:

SELECT column1, column2, ... , writetime(data) AS timestamp  FROM dls.licenses;

这非常不方便,因为这意味着每次任何表的架构更改时我都必须更改导出工具。

有没有更好的办法?

编辑:澄清一下,我得到的实际错误如下。 错误中的语法呈现方式可以认为 SQL 应该没问题:

SELECT *, writetime(id) AS timestamp  FROM dls.licenses;
SyntaxException: line 1:8 mismatched input ',' expecting K_FROM (SELECT *[,]...)

编辑 2:这是用于该表的键空间和创建语句:

CREATE KEYSPACE IF NOT EXISTS dls WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': ‚1‘ };
CREATE TABLE IF NOT EXISTS dls.licenses (subscription_id text, id text, key text, data text, PRIMARY KEY (key));
CREATE INDEX IF NOT EXISTS ON dls.licenses (id);

顺便说一句:我正在使用新的 Cassandra 4.0.0 (GA)。

WHERE 子句指定必须查询哪些行。 它由作为 PRIMARY KEY 一部分和/或在其上定义了二级索引的列上的关系组成。

  • 关系的列规范必须是以下之一:
  • 表的分区键的一个或多个成员
  • 聚簇列,仅当该关系之前是指定分区键中所有列的其他关系时
  • 使用 CREATE INDEX 建立索引的列。

在 Cassandra 3.6 及更高版本中,添加 ALLOW FILTERING 以仅过滤非索引集群列。

您可以通过在想要写入时间的列上创建二级索引来解决查询问题。 请记住,二级索引会产生开销,并可能导致意想不到的后果。

如果您要导出为 CSV 或 JSON 文件,您可以考虑使用 DataStax 的 dsbulk。

https://github.com/datastax/dsbulk

最新版 dsbulk 1.8.0 增加了对导出 writetime 和 ttl 的支持。

https://docs.datastax.com/en/dsbulk/doc/dsbulk/reference/schemaOptions.html#schemaOptions__schemaOptionsPreserveTimestamp

dsbulk unload -url myData.csv -k ks1 -t table1 --timestamp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM