0
点赞
收藏
分享

微信扫一扫

数组划分,双指针

大南瓜鸭 03-25 11:00 阅读 2

1.函数差异

1.1unix_timestamp函数差异性

用于把字符串格式日期转换成时间戳格式

1.1.1函数用法不同

spark执行unix_timestamp需要设置格式化参数,例如:select unix_timestamp(‘2023-01-01’,‘yyyy-MM-dd’)中’yyyy-MM-dd’必填, hive执行unix_timestamp,可以不设置日期格式化参数

select unix_timestamp('2023-01-01')
--1.spark返回为null,2.hive 返回1672502400

--spark兼容的语法如下
select unix_timestamp('2023-01-01','yyyy-MM-dd')
--1.spark返回为1672502400,2.hive 返回1672502400``
1.1.2对时间格式约束不同: spark对24点认为是非法的
unix_timestamp(concat('2020-06-01', ' 24:00:00'))
--1.spark返回为null,2.hive 返回1672502400

1.2date_format函数差异性

把日期格式化,spark要求格式化使用java格式化标准,例如:“yyyy-MM-dd”,hive可以支持MySQL类格式,‘%Y-%m-%d’

select date_format('2023-01-01 00:00:00','%Y-%m')
--1.spark返回null,2.hive返回2023-01

--saprk兼容的语法如下:
select date_format('2023-01-01 00:00:00','yyyy-MM')
--1.spark返回2023-01,2.hive返回2023-01

1.3精度差异

spark在写入decimal字段数据时, 并不会四舍五入; 而hive会四舍五入。

举例: -0.0761685 spark写入为 -0.076168 ;而hive写入为 -0.076169

1.4get_json_object

spark 中获取json数组的某个元素时,语法为 $[0] 而 hive 语法为 $.[0]

 -- 区别是差一个点; spark下面sql为null, hive有值
select get_json_object(info, '$.[0]') as name from test_get_json_object
-- spark如下格式方才有值
select get_json_object(info, '$[0]') as name from test_get_json_object

2.仅Hive支持

2.1.SparkSQL关联on条件不支持函数rand()

2.2.SparkSQL关联on条件不支持case when语法

举报

相关推荐

0 条评论