hadoop - 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 测试;
通过以下查询,作业被执行,但没有数据被传输。它说拆分列是浮点类型,并严格将其更改为整数类型。
请帮助我将拆分列从浮点类型更改为整数类型
解决方案
该问题似乎主要与使用别名作为 --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)')。
推荐阅读
- mysql - 连接表中选定数据的查询计数
- sql - 通过执行多个连接来避免运行多个查询,不能单独几个月
- python - 在不使用 sum() 的情况下,对我来说计算数组总和的更有效方法是什么?
- php - 没有提示路径 laravel
- angular - Angular - 仅在使用 router.navigate() 方法路由时才允许路由
- hadoop - 将 hadoop 配置传递给 Nutch crawl 命令
- asp.net - 在 asp.net 上验证最小值/最大值?
- python - Python 和 MongoEngine,TypeError:ValidationError 类型的对象不是 JSON 可序列化的
- python - Matplotlib Legend 的一个问题
- python - Selenium Python 使用代理刷新页面直到完全加载