【发布时间】: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)。
问候,
【问题讨论】:
标签: sql-server string hadoop hive sqoop