【问题标题】:Sqoop Hive String Data Type to MS SQL Server TypeSqoop Hive 字符串数据类型转 MS SQL Server 类型
【发布时间】: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


    【解决方案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 表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2023-04-02
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多