Почему мой Hive QL Query, который я запускаю в SSMS через Openquery через драйвер Hortonworks ODBC, выдает ошибку? - PullRequest
0 голосов
/ 14 марта 2019

Я установил соединение с сервером Hive с помощью драйвера Hortonworks ODBC для Apache Hive. Информация о версии ниже:

ODBC connector version info

OS: Windows Server 2012 R2 Standard
Hive: 1.2.1000.2.6.5.4-1
Hadoop: 2.7.3.2.6.5.4-1
Hortonworks ODBC Driver for Apache Hive
ODBC Version: 03.80
Driver Version: 2.1.12.1017
Bitness: 64-bit
Locale: en_US

Я могу выполнить запросы ниже, используя соединитель, который я настроил в Teradata SQL Assistant, без проблем. Я настроил свой DSN как связанный сервер в SSMS. Однако, когда я пытаюсь выполнить запросы в SSMS с помощью openquery, у меня возникают некоторые проблемы. Информация о моем сервере SQL ниже:

Microsoft SQL Server 2016 (SP2-CU3) (KB4458871) - 13.0.5216.0 (X64) Sep 13 2018 22:16:01 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

Вот некоторая информация о столе, к которому я обращаюсь:

Название таблицы: instrumentapps_event

table info

Используя OPENQUERY, я могу запросить базу данных Hive через SSMS с помощью следующего запроса:

SELECT * FROM OPENQUERY(KMhivehttp, 'select * from dmfwk_gold.instrumentapps_event')

Приведенный выше запрос возвращает содержимое нужной таблицы. Однако приведенный ниже запрос выдает ошибку:

SELECT * FROM OPENQUERY(KMhivehttp, 'select * from dmfwk_gold.instrumentapps_event WHERE to_date(from_unixtime(UNIX_TIMESTAMP(load_ts,''yyyy/MM/dd''))) >= to_date(''2019-03-01'')')

Ошибка выглядит следующим образом:

Msg 7355, Level 16, State 1, Line 1

The OLE DB provider "MSDASQL" for linked server "KMhivehttp" supplied inconsistent metadata for a column. The name was changed at execution time.

Как я могу это исправить?

1 Ответ

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

Хотя я не уверен, как решить проблему, с которой сталкивался ранее (я подозреваю, что это ошибка в драйвере ODBC Hortonworks), я нашел обходной путь.

Вместо запуска:

SELECT * FROM OPENQUERY(KMhivehttp, 
    'SELECT * 
     FROM dmfwk_gold.instrumentapps_event 
     WHERE to_date(from_unixtime(UNIX_TIMESTAMP(load_ts,''yyyy/MM/dd''))) >= 
     to_date(''2019-03-01'')
    ')

Я сейчас использую:

SELECT * FROM OPENQUERY(KMhivehttp, 'select * from dmfwk_gold.instrumentapps_event')
WHERE load_ts >= CAST('2019-03-01' AS DATE);

Это позволяет мне избежать ошибок метаданных.

...