table does not exists,select 1 from tablename limit 1

来源:互联网 发布:雅思自测软件 编辑:程序博客网 时间:2024/06/08 11:05

最近在postgreSQL的log里看到了大量的:

table does not exists,select 1 from tablename limit 1

感觉非常奇怪。

1.第一直觉是应该没有业务会写类似:

select 1 from tablename limit 1

这样的代码。搜了一遍业务代码之后,发现确实没有这样的代码存在。

2.报错里面的tablename是临时表的名字,是随机生成的,而非常奇怪的是,几乎每个临时表都会出现在日志中

那么就将产生的原因归结到生成和是使用临时表的代码中。

但是读了一遍代码,几乎每个地方都做了严格的判断,应该是不会出现日志中的类似用法和表不存在的情况的。

3.苦思良久,看到了这样一句:

df.write().jdbc(String.format("jdbc:postgresql://%s:%s/%s", ip, port, database), tbRandomName, props);

主要是将dataframe保存到pg中去,这个API的效果是,如果指定的pg表不存在的话,会帮忙建表;然后想了下,会不会是spark判断它自己需不需要帮忙建表呢,执行的select 1 from tablename limit 1。

4.测试了一下:


果然就会出现:


原来是spark的API做的判断,害得我担心了好半天,以为代码业务逻辑出现问题了。

翻开spark的源码,确实是有这样一句:


0 0
原创粉丝点击