nas 做网站服务器,wordpress定时器,品牌网站建设内容,网站搭建哪里找有名气在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人#xff0c;好在解决了。shit!!
实测1#xff1a;TO_CLOB(a3)
代码样例
--这是一个sparksql写入hive的一个小逻辑#xff0c;我脱敏了噻
SELECT
a1,
a2,
TO_CLOB(a3) AS clob_data,
TO_DATE(a4) AS … 在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人好在解决了。shit!!
实测1TO_CLOB(a3)
代码样例
--这是一个sparksql写入hive的一个小逻辑我脱敏了噻
SELECT
a1,
a2,
TO_CLOB(a3) AS clob_data,
TO_DATE(a4) AS time
FROM
table1
WHERE
a2 3; 首先是这个坑本来以为和DATE日期类型转换一样但是这段代码中我在sparksql写入oracle时报错如下
bug描述
......undefined function: TO_CLOB,
this funtion is nether a registered temporary nor a permanent funvtion
registered in the database default..巴拉巴拉 说是我TO_CLOB函数是Oracle特有的函数在Spark SQL中并不支持这是确实啊方法用错了人家不支持。。。
解决方法 要是写入Oracle的CLOB字段得用CAST函数将字段转换为String类型。。。这样 我测过了没问题。
SELECT a1,a2,CAST(a3 AS STRING) AS clob_data,TO_DATE(a4) AS time
FROM table1
WHEREa2 3;/*** author:Matrix70https://blog.csdn.net/qq_52128187?typeblogok,就是我*/吐槽 由于爷们对PLSQL操作看表的不熟悉导致了一个大乌龙太抽象了!具体如下 我以为这个字段内容为CLOB的我程序没写进去我心里想怎么会是这个字段内容呢不应该是一大长串数据么 然后我就尝试了n种转换方式得到的结果还是这个后来我去问同事这个长字符串写入Oracle的方法他说转换成text我说mysql的才是转换成 text,这个坑踩过他又说转换成long类型 Oracle没有这个类型吧给我看了一下数据他那个数据列也是LONG,我看他这么操作的 点了一下LONG后面的三个点一下子他那边的数据出来了。心里保持疑问我快速回到工位 点了一下CLOB后面的点太抽象了数据出来了我整了半天以为是自己代码出问题了。。。好在跑出来了。记录一下这个坑。可能以后也不会忘记了 。
CLOB 另一种方法转换
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._val customClobType DataTypes.createStructField(clob_data, DataTypes.StringType, true)val result table1.select(col(a1),col(a2),struct(col(a3).alias(clob_data)).cast(customClobType).getField(clob_data).alias(clob_data),to_date(col(a4)).alias(time)
).where(col(a2) 3)
ok,