Cassandra : COPY data with cql function on column

标签 cassandra

我正在尝试从 cassandra 表导出和导入数据,以将时间戳列更改为 unixepoch 列(即将时间戳类型更改为 bigint)

我尝试使用以下命令将数据导出到 csv

COPY raw_data(raw_data_field_id, toUnixTimestamp(dt_timestamp), value) TO 'raw_data_3_feb_19.csv' WITH PAGETIMEOUT=40 AND PAGESIZE=20;

但出现错误:不正确的 COPY 命令。

如何解决此问题或者是否有更好的方法来实现此目的?

来自

 raw_data_field_id | dt_timestamp                    | value
-------------------+---------------------------------+-------
                23 | 2018-06-12 07:15:00.656000+0000 | 131.3

 raw_data_field_id | dt_unix_timestamp_epoch         | value
-------------------+---------------------------------+-------
                23 | 1528787700656                   | 131.3

最佳答案

COPY 命令不支持添加额外的函数来处理输出。

我想说你有几种解决方案:

  • 使用 COPY 导出 csv 中的数据,转换时间戳值(使用 sh 命令或高级语言)并将其导入到新表中
  • 使用echo“select raw_data_field_id, toUnixTimestamp(dt_timestamp), value from raw.raw_data;”导出| ccm node1 cqlsh > output.csv,更改 csv 使其具有正确的格式并将其导入到新表中(此解决方案来自 here )
  • 使用 Cassandra 驱动程序之一(Python、Java 等)编写您自己的转换工具。
  • 也许您可以尝试使用 UDF,但我尚未对此进行测试。

您应该知道,COPY FROM 支持行数少于 200 万行的数据集。

关于 Cassandra : COPY data with cql function on column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502656/

相关文章:

apache-spark - Apache Spark 如何在内存中工作?

python - 在python中使用dsbulk加载

Cassandra CQL 选择查询不返回以时间戳作为 clusterkey 的记录

java - cassandra 中是否有任何机制可以在通过 INSERT 或 UPDATE 查询更改表时发送通知?

java - 关于 lambda 的 Cassandra 编译问题

cassandra - 如何在 Cassandra 中将 Unix 10 位纪元时间存储和查询为人类可读的内容?

cassandra - 如何将数据从大小为 N 的 Cassandra 集群迁移到大小为 N+/-M 的不同集群

mongodb - 如何使用 NoSQL (Cassandra) 实现客户端身份验证解决方案?

cassandra - 在时间间隔内查找 Cassandra 列族中插入的键

cassandra - Cassandra可调一致性的正确理解是什么?