Драйвер ODBC для кустов не распознает unix_timestamp - PullRequest
0 голосов
/ 18 февраля 2019

Короткая версия:

Как узнать разницу в секундах между двумя временными метками через драйвер ODBC?

Длинная версия:

Использование ODBC для простого запроса (не то, чтобы я использовал приведение (... в качестве временной метки) для создания отдельной строки, фактический запрос выполняется для таблицы с данными временной метки):

select unix_timestamp(cast('2019-02-01 01:02:03' as timestamp)) as tto

Я получил сообщение об ошибке:

unix_timestamp не является допустимым скалярным вызовом функции или процедуры

Я не смог найти ни одного параметра конфигурации, который мог бы изменить это.Собственный запрос отключен (потому что я использую подготовленные операторы), и другие функции работают нормально.Я предполагаю, что unix_timestamp () (без параметра) устарела, и драйвер немного увлечен предотвращением использования этой функции.

Я попытался обойти проблему, и я использовал метку времени как bigint вместоиспользуя функцию unix_timestamp:

select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)

Это отлично работает!Но когда я пытаюсь получить разность 2 отметок времени:

select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint) - cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)

, я получаю сообщение

Типы операндов SQL_WCHAR и SQL_WCHAR несовместимы для двоичного оператора минус

(но только для сложных запросов, но не в том случае, если запрос состоит только из этого выбора).

Драйвер примет разность между 2 временными метками, но затем я получаю интервальный тип,которые я не могу преобразовать обратно в секунды.

Я бы посчитал, что это ошибки в драйвере ODBC, но я не могу связаться с Hortonworks, потому что я не являюсь платящим клиентом, и я также не могу связаться с Симбой, потому что я неплатящий клиент.

Если заметить, если я пытаюсь использовать функцию floor, я получаю сообщение:

'floor' - зарезервированное ключевое слово.

Да, я знаю, что это зарезервировано, и я на самом деле пытаюсь это сделать.

Есть идеи, как мне обойти это?

1 Ответ

0 голосов
/ 12 марта 2019

Короче говоря, официальный драйвер Hive ODBC действительно действительно действительно плохо, если вы не можете использовать нативные операторы (т. Е. Если вам нужны параметризованные запросы).

Мои предлагаемые обходные пути - либо получить платный (например, https://www.progress.com/datadirect-connectors - я пробовал это, и он работает очень хорошо), либо просто использовать jdbc, если ваше приложение может это поддерживать.Все драйверы ODBC, которые я нашел для Hive, в любом случае являются обертками вокруг jdbc, связывая jre.

...