2016-12-14 34 views
0

我正在使用Sqoop将数据从SQL Server导入到Hive,然后将该数据从Hive导出到另一个SQL Server。 Sqoop导入工作正常,并将VCHAR/NVARCHAR数据类型转换为String。Sqoop Hive字符串数据类型到MS SQL服务器类型

我的问题是目标表上定义的最佳列类型是什么,因为Hive现在当前将数据类型保存为字符串?我最初定义了我的大部分列在目标表为VARCHAR(100),并一直在努力,但现在一些字符串,导出过程中失败,我也得到:

SQL状态:22001,错误代码:8152

“java.sql.BatchUpdateException:将字符串或二进制数据截取为 ”。

样品字符串失败:

"HEALTH SITE PROVIDERS LLC"|" "|"3435673"|"UHGID0000547777"|"906225"|"\\N"|"\\N"|"\\N" 

显然这个数据比100为每列(由分隔栏|)远远更少的字符,所以我很困惑,蜂巢/ Sqoop是如何将这个字符串还是在导出过程中完成任何转换?

我正在考虑将目标表中的列定义为NVARCHAR(max),但是这有点极端吗?此外,我还需要有一些列索引以及SQL Server中不允许NVARCHAR(max)。

问候,

回答

1

既然你主要数据VARCHAR(100)类型。没有必要存储它是蜂巢的STRING。您可以将VARCHARNVARCHAR保存在Hive的VARCHAR中。

在您的sqoop导入命令中使用--map-column-hive <column-name,hive-type....>

例子:

说COL1是VARCHAR(100)和COL2是NVARCHAR(100)

--map-column-hive col1='varchar(100)',col2='varchar(100)',....


现在,您可以将其导出回其SQL Server表列VARCHAR/NVARCHAR