我在SQL Server 2016中有一个具有nvarchar列的表,我想将其存储在配置单元中。 nvarchar列可以包含非ASCII字符。将来自SQL Server的数据提取到一个文件中,并将nvarchar列转换为base64编码的字符串。我尝试了以下将base64转换回可读字符串的方法:
select decode(unbase64(BASE64STR),'UTF-8');
它失败,并出现以下错误:
org.apache.hive.service.cli.HiveSQLException:编译时出错 语句:失败:SemanticException [错误10014]:行1:7错误 参数``UTF-8'':org.apache.hadoop.hive.ql.metadata.HiveException: java.nio.charset.MalformedInputException:输入长度= 1
以下代码能够正确解码BASE64编码的字符串
select decode(unbase64(BASE64STR),'UTF-16LE');
使用UTF-16LE从nvarchar类型列中解码字符串是否安全?可以使用列中存储的任何数据吗?是否存在另一种方法来实现从SQL Server到Hive的nvarchar类型数据的ETL功能?
答案 0 :(得分:1)
看看SDU工具(免费)中使用base64的功能。它们与varbinary进/出,但在将字符串强制转换到/从varbinary时可以正常工作。至少,代码应为您提供一个良好的开端。它们位于:http://sdutools.sqldownunder.com