为什么我通过 Hortonworks ODBC 驱动程序通过 Openquery 在 SSMS 中 运行 的 Hive QL 查询会产生错误?
Why is my Hive QL Query that I run in SSMS via Openquery through the Hortonworks ODBC Driver producing an error?
我使用 Hortonworks ODBC Driver for Apache Hive 建立了到 Hive 服务器的连接。版本信息如下:
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 中的链接服务器。但是,当我尝试使用 openquery 运行 SSMS 中的查询时,我遇到了一些问题。我的 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)
这是我正在查询的 table 的一些信息:
Table 姓名:instrumentapps_event
使用 OPENQUERY,我能够使用以下查询通过 SSMS 查询 Hive DB:
SELECT * FROM OPENQUERY(KMhivehttp, 'select * from dmfwk_gold.instrumentapps_event')
以上查询returns所需的内容table。但是,下面的查询会产生错误:
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.
我该如何解决这个问题?
虽然我不确定如何解决我以前遇到的问题(我怀疑它是 Hortonworks ODBC 驱动程序的错误),但我确实找到了解决方法。
而不是运行:
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);
这让我可以避免任何元数据错误。
我使用 Hortonworks ODBC Driver for Apache Hive 建立了到 Hive 服务器的连接。版本信息如下:
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 中的链接服务器。但是,当我尝试使用 openquery 运行 SSMS 中的查询时,我遇到了一些问题。我的 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)
这是我正在查询的 table 的一些信息:
Table 姓名:instrumentapps_event
使用 OPENQUERY,我能够使用以下查询通过 SSMS 查询 Hive DB:
SELECT * FROM OPENQUERY(KMhivehttp, 'select * from dmfwk_gold.instrumentapps_event')
以上查询returns所需的内容table。但是,下面的查询会产生错误:
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.
我该如何解决这个问题?
虽然我不确定如何解决我以前遇到的问题(我怀疑它是 Hortonworks ODBC 驱动程序的错误),但我确实找到了解决方法。
而不是运行:
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);
这让我可以避免任何元数据错误。