Sqoop Hive 字符串数据类型转 MS SQL Server 类型

Posted

技术标签:

【中文标题】Sqoop Hive 字符串数据类型转 MS SQL Server 类型【英文标题】:Sqoop Hive String Data Type to MS SQL Server Type 【发布时间】:2016-12-14 15:51:45 【问题描述】:

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

我的问题是在 Target 表上定义的最佳列类型是什么,因为 Hive 现在将数据类型保存为 String?我最初将 Target 表上的大多数列定义为 VARCHAR(100) 并且它一直在工作,但现在一些 String 在导出期间失败了,我得到:

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

"java.sql.BatchUpdateException: 字符串或二进制数据将是 被截断了。”

示例字符串失败:

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

显然,该数据每列的字符数远少于 100 个(列由 | 分隔),所以我对 Hive/Sqoop 如何转换此字符串或在导出期间是否进行任何转换感到困惑?

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

问候,

【问题讨论】:

【参考方案1】:

由于您的数据大多是@​​987654321@ 类型。无需存储它是 Hive 的 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)',....


现在您可以将其导出回包含 VARCHAR/NVARCHAR 列的 SQL Server 表。

【讨论】:

以上是关于Sqoop Hive 字符串数据类型转 MS SQL Server 类型的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop hive导出到mysql[转]

用sqoop 把oracle表迁移到hive 上怎么处理字段类型不一样

python脚本 用sqoop把mysql数据导入hive

Sqoop导出Hive数据到Mysql时异常问题解决

Sqoop导出Hive数据到Mysql时异常问题解决

Sqoop导出Hive数据到Mysql时异常问题解决