首页 > 解决方案 > Hadoop-Sqoop 使用 split-by 导入没有整数值

问题描述

我正在使用 Sqoop 将数据从 memsql 导入到 Hdfs。我在 Memsql 中的源表没有任何整数值,我创建了一个新表,其中包括一个带有现有列的新列“test”。

以下是查询

sqoop import --connect jdbc:mysql://XXXXXXXXX:3306/db_name --username XXXX --password XXXXX --query "select closed,extract_date,open,close,cast(floor(rand()*1000000 as int) as测试从 tble_name where \$CONDITIONS" --target-dir /user/XXXX--split-by test;

这个查询给了我以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行使用 'as int) 作为 test from table_name where (1 = 0)'

我也尝试了另一种方法:

sqoop import --connect jdbc:mysql://XXXXX:3306/XXXX --username XXXX --password XXXX --query "select closed,extract_date,open,close,ceiling(rand()*1000000) as test from table_name where \$CONDITIONS" --target-dir /user/dfsdlf --split-by 测试;

通过以下查询,作业被执行,但没有数据被传输。它说拆分列是浮点类型,并严格将其更改为整数类型。

请帮助我将拆分列从浮点类型更改为整数类型

标签: hadoopsqoop

解决方案


该问题似乎主要与使用别名作为 --split-by 参数有关。如果需要使用查询中的特定列,您可以在控制台中运行查询“select closed,extract_date,open,close,ceiling(rand()*1000000) from table_name”,获取列名控制台中的表并在 --split-by 'complete_column_name_from_console' 中使用它(这里应该是 --split-by 'ceiling(rand()*1000000)')。


推荐阅读