背景介绍 :
高性能数据集的语法是引用ClickHouse语法的,所以如果是从普通数据集切换成高性能数据集后,某些卡片容易报错,本文档将针对spark语法和ClickHouse语法的不同点,持续更新实际使用过程中遇到的“坑”。
1、to_date 函数和 toDate()函数
to_date 函数是spark的语法,具体的写法及注意事项参考:to_date() 的正确使用方法、to_date()函数使用时需注意大小写
toDate()函数是ClickHouse的语法,且这个函数对大小写敏感,比如写成todate()就会报错,写法参考:
toDate([日期],'yyyy-MM-dd')
2、注意单引号和双引号的使用
spark里习惯使用英文双引号来引用字符串,单引号也是兼容的,但是ClickHouse里需要严格使用英文状态下的单引号(''),不然会报错。
3、高性能数据集&ClickHouse行权限的设置,语法如下:
has(cast(splitByChar(',',[CURRENT_USER.所在地区1]), 'Array(Nullable(String))') ,[省份])>0
具体语法可参考:高性能数据集行权限设置
4、dateDiff函数的使用:
datediff函数在spark里只需要两个参数------终止日期字段和起始日期字段,如datediff([离职日期], [入职日期]),返回同一行中"离职日期"至"入职日期"的间隔天数;
dateDiff函数在ClickHhouse里需要3个或者4个参数:
dateDiff('unit', startdate, enddate, [timezone])
支持的时间单位: second, minute, hour, day, week, month, quarter, year.
[timezone]这个参数是可选参数,可根据实际场景填写。
举个例子:dateDiff( 'day',[开始日期],[结束日期])-----计算两个日期之间天数的差
5、date_sub函数和subtractDays函数:
date_sub函数是spark的语法,date_sub([销售日期],1)-----返回销售日期前一天的日期;
subtractDays函数是ClickHouse的语法,写法是一样的:subtractDays([销售日期],1)-----返回销售日期前一天的日期
6、String函数注意大写:
cast ([字段] as String)
注意S是大写。
7、clickhouse要求年份必须在1970~2139年之间,否则会出现类似这样的报错:
ClickHouse exception , code :321, host :xxx.xx.x.xx, port :xxxx; Code :xxx, e .displayText0= DB : Exception : Input value 2932783 of a column "UInt16” is greater than max alowed Date value , which is 49710( version 20.4.5.36( official build ))
PS:其他相关文档参考:
(更多语法将持续更新...)