随着互联网、信息产业的大发展、以及地缘政治的变化,网络安全风险日益增长,网络安全关乎国家安全。因此很多的企业,开始了国产替代的脚步,从服务器芯片,操作系统,到数据库,中间件,逐步实现信息技术自主可控,规避外部技术制裁和风险。
就数据库而言,目前很多的国产数据库,比如瀚高、人大金仓、崖山、南大通用、虚谷等,都可以逐步的取代Oracle、MySQL、PostgreSQL等。在大数据时代,我们通常通过Spark对数据进行计算,并直接输出到数据库中。但是不同的数据库中,数据类型的定义存在着一定的差异,如果直接使用Spark jdbc导入,可能会发生异常。
1.1 Spark导入数据库常见的导入方式如下:
# Saving data to a JDBC source
jdbcDF.write \.format("jdbc") \.option("url", "jdbc:postgresql:dbserver") \.option("dbtable", "schema.tablename") \.option("user", "username") \.option("password", "password") \.save()
1.2 部分数据类型不匹配或数据库不支持
- 数据库特性:
······崖山数据库中,对于变长字符串,没有TEXT这个字段类型,与之相同含义的字段类型为CLOB。
- sqlType和Saprk dataType不匹配:
······Spark导入geometry类型的数据,会将其识别为StringType,但是在导入虚谷数据库中,会导入失败,因为Spark未能正确的将sqlType和DataType匹配
- 其他情况…
1.3 JdbcDialects
在spark3.5的源码中可以看到,有这么一段代码。</