火花 SQL:改变 TABLE 改变

Spark SQL: ALTER TABLE CHANGE

我想将一些表导入到(目前)不支持大于 18 的小数精度的数据库中。所以我在 Spark 中像这样尝试 ALTER TABLE 来降低精度。如何四舍五入并不重要。

rt_rel_acc_acc.saveAsTable("rt_rel_acc_acc", SaveMode.Overwrite)
hiveContext.sql("ALTER TABLE rt_rel_acc_acc CHANGE REL001 REL001 decimal(18, 9)")
hiveContext.read.table("rt_rel_acc_acc").write.jdbc(url, "rt_rel_acc_acc", properties)

但是 Spark 似乎根本没有应用更改,因为在第三行抛出了异常:

PSQLException: ERROR: invalid numeric size '30,15'

ALTER TABLE 另一方面,x RENAME TO y 立即应用。

知道吗,我的方法有什么问题?

您可以转换 Dataframe 中的任何列。就像下面一样。

val df2 = df.withColumn("New_Column_Name", 
              df.col("Actual_Column_name").cast("Decimal(18, 9)"))

在这种情况下,您将同时拥有旧列名和新列名。您可以删除或 select 列,然后应用 saveAsTable 或将其用于其他表。

如果可行,请告诉我。如果我对问题的理解有误,我很乐意根据您的回答尝试其他解决方案。

谢谢, 问候, 斯里尼