隨著互聯網、信息產業的大發展、以及地緣政治的變化,網絡安全風險日益增長,網絡安全關乎國家安全。因此很多的企業,開始了國產替代的腳步,從服務器芯片,操作系統,到數據庫,中間件,逐步實現信息技術自主可控,規避外部技術制裁和風險。
就數據庫而言,目前很多的國產數據庫,比如瀚高、人大金倉、崖山、南大通用、虛谷等,都可以逐步的取代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的源碼中可以看到,有這么一段代碼。</