让决策更智能
新一代智能数据分析平台

高性能数据集&ClickHouse语法注意事项

观小数发表于:2021年08月18日 17:56:14更新于:2022年07月01日 15:29:18

背景介绍 :

高性能数据集的语法是引用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:其他相关文档参考:

1、直连ClickHouse & 高性能查询表的注意事项

2、如何自定义周(clickhouse版本)

3、ClickHouse官方语法介绍


                                                        (更多语法将持续更新...

    您需要登录后才可以回复