【问题标题】:Cassandra script to change date to Instant typeCassandra 脚本将日期更改为即时类型
【发布时间】:2020-07-03 17:59:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    在 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 的博客文章,可以提供更多信息和示例:123456

    【讨论】:

    • 我可以在我的 Spring Boot 应用程序中使用 Spark Cassandra 来运行我的应用程序以将日期格式从 2020-05-18T14:18:45.878Z 更新为 1593402243336(即时 epochMilli)吗?
    • 不是最简单的方法...据我了解,您需要进行一次转换吗?
    • 是的,一次转换以更改旧数据的格式..我想知道如何以及在哪里做最简单的方法
    • 只需在任何应用程序之外运行它...我认为与 Spring Boot 的集成可能比它更复杂
    • 我不了解 Intellij,你可以下载 Spark 并运行该命令
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2020-04-26
    相关资源
    最近更新 更多