[英]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 一部分和/或在其上定义了二级索引的列上的关系组成。
在 Cassandra 3.6 及更高版本中,添加 ALLOW FILTERING 以仅过滤非索引集群列。
您可以通过在想要写入时间的列上创建二级索引来解决查询问题。 请记住,二级索引会产生开销,并可能导致意想不到的后果。
如果您要导出为 CSV 或 JSON 文件,您可以考虑使用 DataStax 的 dsbulk。
https://github.com/datastax/dsbulk
最新版 dsbulk 1.8.0 增加了对导出 writetime 和 ttl 的支持。
dsbulk unload -url myData.csv -k ks1 -t table1 --timestamp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.