当前位置:   article > 正文

Spark与hive 不兼容语法

Spark与hive 不兼容语法

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
  • 2
  • 3
  • 4
  • 5
  • 6
1.1.2对时间格式约束不同: spark对24点认为是非法的
unix_timestamp(concat('2020-06-01', ' 24:00:00'))
--1.spark返回为null,2.hive 返回1672502400
  • 1
  • 2

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
  • 2
  • 3
  • 4
  • 5
  • 6

1.3精度差异

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

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

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
  • 1
  • 2
  • 3
  • 4

2.仅Hive支持

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/308168?site
推荐阅读
相关标签
  

闽ICP备14008679号