sql server CLR 类型报错 解决

问题描述:
在搭建数仓的过程中,使用sqoop将sql server 的数据导入hive 报错:
分布式查询中不允许对象显示具有 CLR 类型的列。请使用传递查询访问远程对象 ‘“FangDb”.“dbo”.“Community”’。

原因:
为了说明如何遇到这个错误,假设有一个[dbo]。在TestServer服务器的SQLServerHelper数据库中包含一个地理学列的[Location]表:
然后从另一个服务器,TestServer被定义为链接服务器。从[dbo]检索位置列表。从第二台服务器,然后发出以下SELECT语句:
执行SELECT语句将生成以下错误消息

要克服这个错误,将使用OPENQUERY函数。OPENQUERY函数在指定的链接服务器上执行指定的直通查询,
其中服务器是OLE DB数据源。OPENQUERY可以在查询的FROM子句中引用,就好像它是一个表名一样。
虽然传递给OPENQUERY函数的查询可能返回多个结果集,但该函数只返回第一个结果集。
OPENQUERY函数的语法如下:

OPENQUERY( <linked_server>, ‘’)

<linked_server>参数是表示链接服务器名称的标识符。参数是要在链接服务器中执行的查询字符串。
要使用OPENQUERY克服此错误消息,可以使用以下语句从链接服务器检索包含地理或几何列的表的内容:
SELECT *
FROM OPENQUERY([TestServer], ‘SELECT * FROM [SQLServerHelper].[dbo].[Location]’) [Loc]
select a.* from OPENQUERY([172.16.236.75],${TABLENAME}) a

实例sql:
"select a.* from OPENQUERY( d a t a n a m e , ′ s e l e c t ′ ′ {dataname},&#x27;select &#x27;&#x27; dataname,select{cityno}’’ as city_code
,’’${cityname}’’ as city_name
,[CommunityId]
,[CommunityName]
,[CommunityAlias]
,[CommunityPinyin]
,[CommunityAliasPinyin]
,[AreaCode]
,[AreaName]
,[DistrictName]
,[DistrictPinyin]
,[DistrictId]
,[CommunityIndexId]
,[CommunityIndexName]
,[CommunityIndexPinyin]
,[PositionTag]
,[PositionTagName]
FROM ${tablename}.[dbo].[Community] with(nolock) where IsDeleted = 0’) a union all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值