oracle sql和spark sql表达的差异

本文的创作背景

笔者是个研究生,上学期学习了各类不同的数据库和spark sql,恰好自己最近一段实习工作中,涉及到了将oracle数据库可识别的sql语句转化为spark sql语句。在完成这个工作中,进行了很多搜索,但没有专门针对将oracle数据库适用的sql语句转化为spark sql的文章。因此决定自己写一篇,能够帮到遇到类似问题的人。
本篇主要来讲oracle sql和spark sql表达的差异,之后可能会继续写相同的表达和在实际进行spark sql代码书写时常见的问题。

关于对问题实质的剖析

spark sql在学校学习的时候,似乎没有感觉到和sql有什么区别,为什么oracle数据库可以识别的sql会和sqark sql不同呢?
经过查询资料后,发现:

  1. 日常适用的spark sql就是和普通的标准sql一致 :目前我们用的Spark2.x 版本中遵循的是美国的ANSI的SQL2003完全标准sql ;
  2. 而之所以oracle数据库可识别的sql语句和spark sql有较大的区别,是因为oracle中有很多自己独特的函数和表达。换言之,夹杂着oracle特有的函数和特殊表达的sql,不是标准sql。
  3. 其实不同数据库,一般或多或少都有一些自己独特的函数或查询表达方式,这些差异一定程度上是简化了sql代码的书写,但是也让sql的可移植性变差了。
    结论:oracle可以适用的sql转化为spark sql的核心,就是其他的不变,更改oracle数据库独有的函数或表达方式为标准sql。

需要进行的转化

一、表示表关联.
假如A、B、C、D、E是三张表
Oracle<=> spark sql
A.id=B.id <=> A inner join B on(A.id=B.id)
B.name=C.name(+) <=> B left join C on(B.name=C.name)
C.amount_id(+)=D.amount_id <=> D left join C on (D.amount_id=C.amount_id)
换言之,(+)在=左侧,则为右关联(但都要表示为右侧的表左关联左侧的表);(+)在=右侧,则为左关联;=两侧无(+),则为内关联。

另外,需要注意的是,在普通sql中,我们经常会用select* from 表A名and表B名 where 表A关联字段=表B关联字段。
而在spark sql中,我们一般用一个起始表将所有涉及的表都关联起来。
例如,oracle sql:

select* from A,b,c,d 
where A.id=B.id and B.name=D.name
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值