【发布时间】:2019-02-21 11:28:07
【问题描述】:
我正在将我的数据库从 SQL Server 迁移到 MariaDB,但我遇到了 MariaDB 的 TIMESTAMP 范围限制的问题。
我有一个填充数据库的 PySpark 项目,在覆盖模式下使用 DataFrameWriter.jdbc() 创建表。在使用 SQL Server 时,Spark 将自己的 Timestamp 数据类型转换为 SQL Server 的 DATETIME2 数据类型,这样就可以正常工作了。但是,在使用 MariaDB 时,它会将其转换为 MariaDB 自己的 TIMESTAMP,其范围以 2038 年结束。这会给所有包含大于该值的表带来麻烦。
我知道 MariaDB 有一个 DATETIME 类型,它与 SQL Server 的 DATETIME 共享相同的范围,但我找不到强制 Spark 在创建表时使用该数据类型的方法。
我也无法手动创建表,因为它应该在每次我的脚本运行时重新创建。
【问题讨论】:
-
有时间范围限制的数据库?你确定吗?
-
也许尝试在火花端转换为字符串并在数据库端转换为日期时间
-
@sramalingam24:是的,您也可以查看 MariaDB 知识库:mariadb.com/kb/en/library/timestamp。将数据存储为字符串可以避免脚本崩溃,但我宁愿使用 datetime 数据类型。我想如果没有更好的方法来强制这样做,我可以这样做......
-
@sramalingam24 - 您是否建议每个数据库都应该能够处理 10000 年?我怀疑大多数都停在 9999。那么大爆炸时期的大负数呢?
标签: python mysql apache-spark pyspark mariadb