WedX - журнал о программировании и компьютерных науках

Драйвер ODBC Teradata ODBC 15.0 не поддерживает запрошенные свойства

Я использую ADODB в Excel 2007 VBA для подключения к серверу Teradata 14.0 с помощью драйвера Teradata ODBC 15.0. Все работает, как ожидалось, кроме тех случаев, когда я отправляю очень большие запросы через ADODB.Recordset.Open.

Иногда, когда я пытаюсь recordset.open с запросом, который содержит более 5000 символов, он выдает ODBC Driver does not support the requested properties ошибку -2147217887.

Ошибка появляется через заданный промежуток времени (30 секунд или около того), когда я не получаю обратно загруженный объект набора записей.

Код прост:

Sub getData()
    Dim strSQL As String
    Dim scRS As ADODB.Recordset
    Dim adoConn As ADODB.Connection

   strSQL = "Very Large SQL"

    'open the connection
    Set adoConn = New ADODB.Connection

    On Error GoTo adoExit
    adoConn.Open "SessionMode=Teradata;Driver=Teradata;DBCName=<SERVERIP>;Database=<DATABASE>;CharSet=UTF16;Uid=<USERID>;Pwd=<PASSWORD>"

    'get the data
    Set scRS = New ADODB.Recordset
    scRS.Open strSQL, adoConn, adOpenKeyset, adLockOptimistic

    ...

End Sub 

Отредактировано для добавления: я пробовал варианты почти всего, что звучало так, как будто это могло повлиять на размеры пакетов / тайм-ауты / наборы символов (которые, как я думал, могут повлиять на общее количество байтов) / и т. Д. В строке подключения с использованием https://www.info.teradata.com/htmlpubs/DB_TTU_13_10/index.html#page/Connectivity/B035_2509_071A/2509ch03.05.06.html в качестве руководства. И все же у меня бывают спорадические таймауты.

12.11.2014

  • какой у тебя adoConn.ConnectionTimeout? Может быть, попробуйте увеличить это ... Вы пытались сократить запрос? Вы пробовали выполнить какой-нибудь более короткий запрос? Также взгляните на ConnectionStrings для TerraData, может быть, есть свойство, которое почему-то не поддерживается? Также проверьте свой adoConn.state 12.11.2014
  • ConnectionTimeout - это значение по умолчанию. Я просто попытался поднять его до 120 (я предполагаю, что это в секундах), но та же ошибка появилась через 30 секунд. На самом деле это целый беспорядок добавленных друг к другу запросов. Я не могу сократить их намного больше, чем у меня уже есть, и я хочу отправить все одновременно, чтобы воспользоваться преимуществами параллелизма TD. Это разница между 25 секундами и минутой или двумя (если я отправляю серию). 12.11.2014
  • Понятно ... У меня действительно нет опыта работы с TerraData, поэтому я чувствую себя немного беспомощным на этом этапе, а также я не могу воспроизвести это, что еще больше усложняет отладку. Еще одно предложение - можете ли вы поиграть с двумя последними параметрами на rs.Open - попробуйте другие, возможно 12.11.2014
  • Похоже, вы превышаете какой-то предел длины оператора SQL или что-то в этом роде. Я НУЖНО знаком с TerraData, так что я просто предполагаю, но звучит как довольно длинный оператор Select. Можете ли вы разбить оператор select на несколько операторов? Может быть, сохранить результаты каждого в #TemporaryTable, а когда вы закончите, просто откройте набор записей из этой таблицы, используя SELECT * FROM #TemporaryTable. Или что-то подобное. 21.11.2014
  • Не видя вашего состояния SQL, я не знаю, как он выглядит, но я нашел это Список ограничений TeraData SQL. Может быть, это поможет пролить свет на то, почему это происходит? 21.11.2014
  • Само по себе утверждение - это не просто один длинный большой оператор, это фактически как 15 операторов, объединенных вместе. Я могу запустить большой ужасный оператор cat'd прямо в TD без каких-либо проблем, только при проталкивании ADODB с ODBC у меня есть проблема. Я мог бы разделить их и запустить на несколько сериализованных блоков, но с ними я теряю параллельную обработку, которую дает мне TD. Я могу запускать их все по отдельности, сериализовать менее чем за 90 секунд. Я бы хотел, чтобы он находился где-то в 20-секундном диапазоне, что дает мне распараллеленный оператор cat'd. 21.11.2014
  • Длинный выстрел. Не распинай меня. Рассматривали ли вы поставщика .Net для Teradata вместо ODBC? 22.11.2014
  • @RobPaller Я могу ошибаться, но я не верю, что могу использовать провайдера .net в VBA. Я использую ADODB и ODBC просто потому, что ADODB - это простой вариант в VBA, а драйвер Teradata ODBC уже установлен на каждом компьютере в компании. Я думал о том, чтобы проверить проблему с помощью драйвера OLEDB, который я установил, но тогда это будет ограничено несколькими компьютерами, на которых люди имеют доступ для установки такой вещи, так что это тоже в значительной степени не работает. 23.11.2014
  • Как вы отправляете это напрямую в Teradata для тестирования SQL? 23.11.2014
  • Через Atanasuite или Teradata Studio. 23.11.2014
  • И AtanaSuite, и Teradata Studio используют другой клиент для связи с базой данных, а не ODBC. Можно ли параметризовать SQL и сохранить его как макрос, на который, в свою очередь, вместо этого ссылается ваш код VBA? Это должно позволить вам поддерживать выполнение нескольких операторов и аналогичное поведение в результирующем наборе, возвращаемом макросом. 23.11.2014
  • Я исследовал использование макроса, однако сгенерированный SQL является динамическим, что означает, что у меня может быть от 1 до 15 различных полей в предложении WHERE, из которых может быть от 1 до многих различных элементов в списке IN (). Есть способ заставить его работать, передав список значений для каждого поля в списке, разделенном символами, и используя STRTOK_SPLIT_TO_TABLE для его анализа и использования INNER JOIN для ограничения, но это ужасно уродливо и очень дорого, поэтому я отказался от него. Я думаю, что на этом этапе мне может потребоваться преобразовать операторы SQL в несколько представлений и вызвать их вместо этого, чтобы уменьшить счетчик chr :( 24.11.2014
  • Прошло 5 лет с тех пор, как я это написал. Решение, которое я в итоге использовал, заключалось в том, чтобы выгружать эти запросы в хранимую процедуру, которая может возвращать до 16 наборов записей. Затем у меня есть масса параметров, которые я отправляю в процедуру, и она все возвращает. До сих пор понятия не имею, почему ODBC был такой соплей. 27.11.2019

Ответы:


1

Возникла та же проблема при попытке выполнить составной запрос. Попробуйте добавить: ;QueryTimeout=0 в конце строки подключения (той, которая следует за adoConn.Open)

02.12.2014
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]