presto整合hive问题记录

sql

insert into hive.db.tb1 partition(dt)
select 
 aaa
,bbb
,dt
from hive.db.tb2
where xxx;
Q1:

报错: failed: line 1:38: mismatched input ‘partition’. Expecting: ‘(’, <query>
解决办法:
去掉sql中的partition(dt),presto写的时候不需要加这个
参考: https://stackoverflow.com/questions/61924103/insert-into-static-hive-partition-using-presto


Q2:

报错: failed: Catalog must be specified when session catalog is not set
解决办法:
presto写的时候,如果没指定session的catalog,需要在表名前添加catalog名
如上面的sql的 hive.db.tb1


Q3:

报错: Mismatch at column 3: ‘aaa’ is of type timestamp but expression is of type varchar
解决办法:

要写入的字段类型与查询出来的字段类型不匹配, 修改sql为

insert into hive.db.tb1 
select 
 cast(aaa as timestamp)
,bbb
,dt
from hive.db.tb2
where xxx;

Q4:

报错: failed: No page sink provider for catalog 'hive’
解决办法:
把配置文件 ./etc/catalog/hive.properties 复制到每个presto节点
参考: https://stackoverflow.com/questions/48092203/presto-cannot-insert-values
在这里插入图片描述


Q5:

报错: failed: Cannot insert into an existing partition of Hive table: dt=202001
解决办法:
在 hive.properties 中设置

hive.immutable-partitions=false

不过按 官网 的说法,这个值默认是false,是指新数据是否能写入已存在的分区,按道理应该设置为true,而且我在hive.properties 中设置hive.immutable-partitions=true或不设置这个值的情况下,都会报上面这个错,不知道是不是bug
在这里插入图片描述
此外,按上面的设置后,presto可以正常插入数据,但在该hive表的hdfs分区目录下,每次插入新数据都会生成新文件,其中00000_0是hive之前已有的数据文件,其他是presto生成
在这里插入图片描述
并且,在hive中进行distinct或count查询会报错,目前还不知道怎么解决

Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

但在presto中就能正常查询到数据

20210129: 疑似解决办法 https://blog.csdn.net/lixiaoksi/article/details/106855509

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值