我正在将数据库从SQL Server迁移到MariaDB,但是遇到了MariaDB的时间戳范围限制的问题。
我有一个填充数据库的PySpark项目,在覆盖模式下使用DataFrameWriter.jdbc()创建表。WHen与SQL Server一起工作时,Spark将自己的时间戳数据类型转换为SQL Server的DATETIME2数据类型,这种数据类型工作得很好。但是,当使用MariaDB时,它会将其转换为MariaDB自己的时间戳,时间戳的范围是2038年。这会给所有包含大于该值的表带来麻烦。
我知道MariaDB有一个DATETIME类型,它与SQL Server的DATETIME具有相同的范围,但我找不到一种方法在创建表时强制Spark使用该数据类型。
我也不能手动创建表,因为每次脚本运行时都会重新创建它。
发布于 2019-07-17 23:26:26
我也面临着同样的问题,当tr没有直接使用spark.read/write和jdbc建立连接时,我使用了mysql.connection包。下面是一个例子:
!pip install mysql.connector
import mysql.connector
conn = mysql.connector.connect(host="localhost",port=3306, user="root", password="yourpassword", database="xyz")
cursor = conn.cursor()
Qry = "create table TempTableMaria (colA VARCHAR(50), startdate datetime(6), enddate datetime(6), colB VARCHAR(50));"
cursor.execute(Qry)
conn.commit()
conn.close()您可以传递一个定制的create table查询,您可以根据需要指定列及其数据类型,并使用所需的模式创建一个空表。
一旦你完成了你的工作,如果你需要,你可以随时删除这个表。
对于其他操作,比如追加/覆盖这个表,您总是可以返回到df.write.format("jdbc")...现在写入此表时,dataframe的时间戳数据类型将存储为日期时间,如果列包含的日期为9999-12-31 00:00:00.000000,则不会出现任何问题
希望这能有所帮助!
https://stackoverflow.com/questions/54806011
复制相似问题