当前位置: 首页 > news >正文

Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..

        在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人,好在解决了。shit!!

实测1:TO_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:Matrix70,https://blog.csdn.net/qq_52128187?type=blog,ok,就是我*/

吐槽 :

        由于爷们对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,

http://www.lryc.cn/news/338195.html

相关文章:

  • 2023数据要素白皮书(免费下载)
  • kafka学习记录
  • 无线网络2.4和5G的区别
  • 大模型笔记:Prompt tuning
  • 【Ambari】Ansible自动化部署大数据集群
  • RTSP/Onvif视频安防监控平台EasyNVR调用接口返回匿名用户名和密码的原因排查
  • opencv基础图行展示
  • GIF在线生成器
  • 使用JavaScript制作一个简单的天气应用
  • 说说对WebSocket的理解?应用场景?
  • 网路维护基础知识
  • 【GD32】MQ-3酒精检测传感器
  • 如何在极狐GitLab 启用依赖代理功能
  • ES6中 Promise的详细讲解
  • 网站建设也会涉及商标侵权,需要注意些!
  • Leetcode算法训练日记 | day25
  • 第23次修改了可删除可持久保存的前端html备忘录:增加了百度引擎
  • vue3中使用antv-S2表格(基础功能版)
  • 算数逻辑单元
  • clickhouse深入浅出
  • TPS2041A 至 TPS2044A 、TPS2051A 至 TPS2054A
  • Excel从零基础到高手【办公】
  • AI图书推荐:如何在课堂上使用ChatGPT 进行教育
  • Redis中的集群(九)
  • funasr 麦克风实时流语音识别
  • 英语学习笔记-音节划分和字母发音对照表
  • 使用odbc链接dm8数据库
  • 开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备
  • 面试-数据库基础以及MySql、ClickHost、Redis简介
  • MySQL分库分表的方式有哪些