1、字段相关
通过describe 获取的表字段信息,hive的string 在presto中为varchar
执行SQL时为了防止字段名为SQL关键字,hive使用`号包裹,而presto会报错,需改为双引号包裹字段名或表名
2、自定义UDF相关
注册自定义UDF,presto与hive的jar不能共用,两种写法两套体系,注册的SQL语法也不一致
3、侧视图
-- hive的侧视图
select movie,category,category_name from hive.test.movies lateral view explode(split(category,',')) tmp as category_name;
-- trino的侧视图
select * from hive.test.movies cross join unnest(split(category,',')) as t (category_name)
5、类型转换
hive使用cast() trino使用try_cast()
trnio虽然也提供了cast(),但是当类型转换不能正常进行时会报错终止运行,如select cast('ABC' AS BIGINT) 分别在两个平台上运行的结果
6、查看集合中的元素个数
hive使用size(),如select size(split('121212,434,dsadsa,dfds,f,yty,t',','));
trnio使用cardinality(),如select cardinality(split('121212,434,dsadsa,dfds,f,yty,t',','));
7、构造数组的方式
hive为array(),如:select array(3, 2, 5, 1, 2) ,读取数组的下标值使用 select array(3, 2, 5, 1, 2)[0],下表从0开始算
trino为array[],如array[3, 2, 5, 1, 2],读取数组的下标使用SELECT element_at(array[3, 2, 5, 1, 2],1);,下标从1开始算
8、获取时间戳
hive使用unix_timestamp(),精确到秒
而trino需使用to_unixtime(now()),精确到毫秒,精确到秒需使用
SELECT TO_UNIXTIME(CAST(FORMAT_DATETIME(FROM_UNIXTIME(TO_UNIXTIME(NOW())),'yyyy-MM-dd HH:mm:ss') AS TIMESTAMP))
或者
SELECT CAST(TO_UNIXTIME(CURRENT_TIMESTAMP) AS BIGINT),最后一位会根据毫秒数四舍五入
9、使用md5获取摘要
hive可直接使用select md5('AAAAA')
trnio需要使用 select lower(to_hex(MD5(to_utf8 ('AAAAA'))))
10、空值补全
hive可使用 SELECT NVL(NULL,'XYZ')
trino需要使用 SELECT coalesce(null,'XYZ')
11、对INSERT OVERWRITE的支持
hive 支持此覆写语法,
trino不支持insert overwrite 语法,只能先delete然后再insert into
12、修改表时删除分区数据的支持
ALTER TABLE hive.tetris.result_de3edffbfb22ba77_ds DROP PARTITION(my_dt='2024060314')
hive 支持此语法
trino不支持