关于GREENPLUM 临时表问题
0
在GP过程调度的时候碰到这样一个问题,详细情况如下
过程设计:
1.双参过程:穿开始日期,结束日期两个参数
过程实现根据开始时间,结束时间循环调用单参过程,并给单参过程传参
2.单参过程:一个日期参数,通过双参过程传参
实现业务数据处理逻辑。
问题:双参过程中包含
DROP TABLE IF EXISTS 临时表名称;
CREATE LOCAL TEMP TABLE 临时表名称;
这样的步骤,那么问题来了
在调用双参过程存在跨天情况时,第一天的数据处理正常,当循环处理第二天数据时,过程报错。
错误信息: : Raised an error ...relation with OID 512840411 does not exist
LOCAL TEMP TABLE 是基于会话的,如果第二次调用单参过程属于不同会话,理论上我删除语句也不会报错,因为做了判断,
而且第一次调用单参过程时临时表也不存在。
PS:将删除创建临时表步骤放到双参中不会报错。理论上双参调单参属于同一会话。
PPS:将临时表替换为实体表不报错(这里应该可以确定跟会话相关了)
1.请问上述情况是什么原因
2.双参循环调单参,双参过程和单参过程的会话关系,不同批次循环之间的会话关系
3.LOCAL TEMP TABLE 特性,假如是因为不同会话原因为何第一次循环中执行DROP表的时候表不存在不报错。
过程设计:
1.双参过程:穿开始日期,结束日期两个参数
过程实现根据开始时间,结束时间循环调用单参过程,并给单参过程传参
2.单参过程:一个日期参数,通过双参过程传参
实现业务数据处理逻辑。
问题:双参过程中包含
DROP TABLE IF EXISTS 临时表名称;
CREATE LOCAL TEMP TABLE 临时表名称;
这样的步骤,那么问题来了
在调用双参过程存在跨天情况时,第一天的数据处理正常,当循环处理第二天数据时,过程报错。
错误信息: : Raised an error ...relation with OID 512840411 does not exist
LOCAL TEMP TABLE 是基于会话的,如果第二次调用单参过程属于不同会话,理论上我删除语句也不会报错,因为做了判断,
而且第一次调用单参过程时临时表也不存在。
PS:将删除创建临时表步骤放到双参中不会报错。理论上双参调单参属于同一会话。
PPS:将临时表替换为实体表不报错(这里应该可以确定跟会话相关了)
1.请问上述情况是什么原因
2.双参循环调单参,双参过程和单参过程的会话关系,不同批次循环之间的会话关系
3.LOCAL TEMP TABLE 特性,假如是因为不同会话原因为何第一次循环中执行DROP表的时候表不存在不报错。
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
1 个回复
philbert 2016-05-08 回答
赞同来自: