我正在尝试从 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/