当前位置 博文首页 > 悦光阴:Databricks 第9篇:Spark SQL 基础(标识符、数据类型、
Spark SQL 支持多种数据类型,并兼容Python、Scala等语言的数据类型。
标识符是一个字符串,用于标识一个数据库对象,比如table、view、schema、column。Spark SQL 有常规标识符和分割标识符(delimited identifiers),分割标识符由撇号 `` 包裹。标识符都是不区分大小写的。
分隔标识符:`c [ , ... ]`
标识符的构成:字母(a-z,A-Z),数字(0-9),分隔标识符使用撇号把特殊字符转换为常规标识符来用。
双引号用于注释:--
整数系列:
小数系列:
日期和时间类型:
其他类型:
复合类型:
Spark SQL通常使用字符串来表示Date和Timestamp类型的值,字符串要跟Date和Timestamp相互转换,在转换时,可以设置格式参数fmt,按照特定的格式来相互转换。
fmt是格式字符串,由相应的模式来指定格式:
1,表示Date或timestamp
方法1:用字符串转换为Date或timestamp
date '1970-1-03' timestamp '1970-1-03 04:05:06.78'
方法2:把字符串按照特定的格式转换为Date或timestamp
to_date(date_str[,fmt]) to_timestamp(timestamp_str[,fmt])
方法2:用数字构造Date或timestamp
make_date(year,month,day) make_timestamp(year,month,day,hour,min,sec[,timezone])
2,把Date和timestamp转换为string
date_format(timestamp,fmt)
举个例子,把Date和timestamp按照特定的格式转换位字符串:
select date_format(date '1970-1-03', "yyyy-MM-dd"); --1970-01-03 select date_format(timestamp '1970-1-03 04:05:06.78', "yyyy-MM-dd HH:mm:ss.SS"); --1970-01-03 04:05:06.78
3,当前的Date和Timestamp
current_date() current_timestamp() now() -- current timestamp
4,提取Date和Timestamp的成分
field:是指year、month、day、hour、minute、second,
source:是指Date或Timestamp
date_part(field,source) year(date) month(date) day(date) hour(timestamp) minute(timestamp) second(timestamp)
5,unixtimestamp
unix timestamp是用数字来表示timestamp
unix_timestamp([timeExp[format]]) from_unixtime(unix_time,format) to_unix_timestamp(timeExp[,format])
6,Date和Timestamp操作
以day或month为单位来对Date和Timestamp进行操作:
add_months(start_date,num_months) months_between(timestamp1,timestamp2[,roundOff]) date_add(start_date,num_days) date_sub(start_date,num_days) datediff(endDate,startDate)
截断到特定的时间成分:
-- truncate timestamp date_trunc(fmt,ts) -- truncate date trunc(date,fmt)
7,UTC时间
from_utc_timestamp(timestamp,timezone) to_utc_timestamp(timestamp,timezone)
文本常量是指用文本表示一个固定不变的量,
1,16进制的字节序列
X { 'num [ ... ]' | "num [ ... ]" }
2,Date 和 Timestamp Literal
DATE 'yyyy-[m]m-[d]d[T]' TIMESTAMP 'yyyy-[m]m-[d]d[T][h]h:[m]m:[s]s.[ms][ms][ms][us][us][us][zone_id]'
Spark SQL也支持三值逻辑,任何两个值比较的结果是:True、False和Unknown,NULL代表Unknown(未知值)。
1,比较运算
NULL和任何值(包括NULL)进行比较,返回的都是NULL,为了比较NULL值,Spark提供了一个null-safe的“等于运算符” <=>,该运算符的运算逻辑是:
NULL <=> NULL,返回True
NULL <=> 任意非NULL, 返回False
2,逻辑运算符
Spark支持的逻辑运算符是AND, OR和 NOT
NOT NULL 返回NULL
NULL AND false 返回false,NULL AND true, NULL AND NULL都返回NULL
NULL OR true 返回true, NULL OR NULL,NULL OR false 都返回 NULL
3,判断NULL值的函数
ISNULL(null) 返回true
ISNAN(null) 返回false
参考文档:
SQL reference for Databricks Runtime 7.x
NULL semantics