Cassandra:使用cql函数在列上复制数据

时间:2019-02-03 12:05:10

标签: cassandra

我正在尝试从cassandra表导出和导入数据,以将timestamp列更改为unixepoch列(即,将timestamp键入为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;

但收到错误消息:Improper COPY command.

如何解决此问题,或者有更好的方法来解决此问题?

来自

 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

1 个答案:

答案 0 :(得分:1)

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万的数据集。