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。您可以将 VARCHAR
和 NVARCHAR
保存在 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 类型的主要内容,如果未能解决你的问题,请参考以下文章