Cassandra 脚本将日期更改为即时类型

标签 cassandra

是否可以更改cassandra中的所有数据值 来自:2020-05-18T14:18:45.878Z1593402243336 (如 Instant Java 类型)

此列中的所有数据均为文本类型

我想知道如何编写一个脚本来将日期从 2020-05-18T14:18:45.878Z 更改为 1593402243336

最佳答案

在 Cassandra 中,有一个单独的 timestamp 类型来保存此类信息。在内部,它将数据存储为 8 字节长的值,表示时间(以毫秒为单位)。该值通过驱动程序访问,并且可以转换为特定于所使用的编程语言的类型的值。如果您通过 cqlsh 访问这些值,则需要将它们打印为 2020-05-18T14:18:45.878Z,但实际上它仍然是 long 在引擎盖下输入。

要执行此类转换,您需要做两件事:

  1. 您需要添加另一列 timestamp 类型 - 您无法更改现有列的类型
  2. 您需要使用一些工具来执行此类转换,但这实际上取决于您的要求。您可以这样做,例如:
val data = { spark.read.format("org.apache.spark.sql.cassandra")
    .options(Map( "table" -> "", "keyspace" -> ""))
    .load().withColumnRenamed("text_column", "date_column")}
data.write.format("org.apache.spark.sql.cassandra")
   .options(Map("table" -> "", "keyspace" -> "")).mode("append").save()
  • DSBulk 。您可以将数据从数据库卸载到磁盘,然后加载回来,但通过使用 -m 选项提供自定义映射,使用时间戳列而不是文本列。有一系列关于 DSBulk 的博客文章,可以提供更多信息和示例:1 , 2 , 3 , 4 , 5 , 6

关于Cassandra 脚本将日期更改为即时类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62711959/

相关文章:

cassandra - 如何配置 cassandra 以监听真实 IP 地址而不是 0.0.0.0 上的 jmx 端口?

java - Cassandra 中的静态列族与动态列族?

database - 时间序列的 Cassandra 数据模型

cassandra - 如何找到cassandra的用户名​​密码

cassandra - Cassandra 表中的多列

csv - 有没有一种简单的方法可以将 Parquet 文件直接加载到 Cassandra 中?

hadoop - Cassandras Map Reduce 支持

java - Cassandra 2.0 及更高版本需要 Java 7u25 或更高版本,但我使用的是 8u60

Cassandra 占用了所有磁盘空间

python - 在python脚本中调用cqlsh来执行cassandra中-f选项中指定的文件