我正在尝试执行查询并将其插入到SQLServer中的链接服务器。
我用的就是这个 INSERT INTO OPENQUERY
声明。
链接服务器是使用cloudera odbc提供程序的apache配置单元。
从配置单元客户端执行插入操作时,在我的设置中大约需要1分钟。
但是,SQLINSERT总是在30秒后超时。
我将query timeout参数设置为0,但它似乎不会影响insert语句,但是,对于花费较长时间的select语句,它可以正常工作。
这是已知的限制吗?在使用insert语句时,是否有方法更改insert语句的超时 OPENQUERY
?
编辑
我想澄清一下我的工作设置。
---------- ---------------------- ---------------
| MS SQL | => Linked Server => | Hive ODBC Provider | => | Hive Server |
---------- ---------------------- ---------------
在hive中,我有一个名为calc\u result的表,我希望定期存储来自sql服务器的计算结果。例如,我尝试使用这样的查询插入。
insert openquery(HIVE, 'select timestamp timestamp , tag tag, value value from calc_result')
values('2019-04-22 11:50:41', 'test',2.0)
配置单元服务器将正确捕获插入操作并启动mapreduce作业。但是,由于超时,作业将在30秒后终止。
sql server将显示以下错误消息。
链接服务器“hive”的ole db提供程序“msdasql”返回消息“[cloudera][hardy](72)查询执行超时已过期。”。
然而, SELECT OPENQUERY
工作正常,将遵循链接服务器的查询超时设置(在本例中设置为0)。
3条答案
按热度按时间wkftcu5l1#
我会尝试使用
SELECT INTO
临时表,然后使用常规INSERT INTO
:编辑:
您可以尝试用事务 Package 它并删除别名:
如有必要,设置dtc:如何为链接服务器启用分布式事务?
2hh7jdfx2#
但我没有找到改变的方法
OPENQUERY
超时30秒后,我发现EXEC AT
链接服务器在遵守超时设置的情况下,可以很好地执行插入查询。我在2009年的博客文章中偶然发现了这个解决方案。数据库可能不是我的强项,但我觉得sql server文档可以改进。一个简单的页面列出了与链接服务器进行交互的可能方式,这样我就省去了很多尝试。
wqlqzqxt3#
这和我想象的完全不同。在这种情况下,select/insert应该没有任何区别。
配置链接服务器超时后,在链接服务器属性中还有第二个位置,您可以检查提供程序字符串中的命令超时设置:
我想到的另一个选择是示例范围的timout。默认设置为600秒(10分钟),远高于30秒。不过,你还是可以试试看有没有影响。
无限等待: