Я пытаюсь выполнить и вставить запрос на связанный сервер в SQL Server.
Для этого я использую оператор INSERT INTO OPENQUERY
.
Связанный сервер - это Apache HIVE, использующий поставщик ODBC Cloudera.
Операция вставки занимает около 1 минуты в моей настройке при выполнении из клиента HIVE.
Однако SQL INSERT всегда отключается через 30 секунд.
Я установил для параметра Query Timeout значение 0, но, похоже, он не влияет на оператор INSERT, однако он хорошо работает для операторов SELECT, занимающих более длительное время.
Это известное ограничение?
Есть ли способ изменить время ожидания для оператора вставки при использовании OPENQUERY
?
EDIT
Я бы хотел уточнить настройки, с которыми я работаю.
---------- ---------------------- ---------------
| MS SQL | => Linked Server => | Hive ODBC Provider | => | Hive Server |
---------- ---------------------- ---------------
В Hive у меня есть таблица calc_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)
Операция вставки правильно перехватывается сервером HIVE, и начинается задание MapReduce. Однако задание будет прекращено через 30 секунд из-за тайм-аута.
SQL-сервер покажет следующее сообщение об ошибке.
Поставщик OLE DB "MSDASQL" для связанного сервера "HIVE" вернул сообщение "[Cloudera] [Hardy] (72) Истекло время ожидания выполнения запроса.".
Однако SELECT OPENQUERY
работает нормально и будет следовать настройкам Query Timeout связанного сервера (в данном случае это значение равно 0).