Mysql 为什么;Sqoop导入--查询…“;仅应插入一行时插入多行?
我正在获得hadoop、sqoop、pig、flume等的“实践经验” 在我的本地Mysql 为什么;Sqoop导入--查询…“;仅应插入一行时插入多行?,mysql,hadoop,hdfs,sqoop,Mysql,Hadoop,Hdfs,Sqoop,我正在获得hadoop、sqoop、pig、flume等的“实践经验” 在我的本地mysql模式中,我有一个名为Employee的表,其结构如下: `emp_id` int(11) NOT NULL AUTO_INCREMENT `first_name` varchar(30) NOT NULL `last_name` varchar(30) NOT NULL `create_date` datetime NOT NULL Employee表有四行 我运行了以下sqoop命令: sqoop -
mysql
模式中,我有一个名为Employee
的表,其结构如下:
`emp_id` int(11) NOT NULL AUTO_INCREMENT
`first_name` varchar(30) NOT NULL
`last_name` varchar(30) NOT NULL
`create_date` datetime NOT NULL
Employee表有四行
我运行了以下sqoop命令:
sqoop --options-file import.txt \
--query "select 1 as emp_id, 'Barry' as first_name, 'Williams' as last_name, '2016-04-20 15:41:00' as create_date from test.Employee where \$CONDITIONS" \
--target-dir /user/<username>/Employee \
--split-by emp_id \
-m 1
我明白了:
1,Barry,Williams,2016-04-20 15:41:00
1,Barry,Williams,2016-04-20 15:41:00
1,Barry,Williams,2016-04-20 15:41:00
1,Barry,Williams,2016-04-20 15:41:00
问题:
1) Why were four rows inserted instead of one?
2) Is it because there were four rows in the table when the `sqoop` command ran?
3) Is this a bug?
提前感谢。我不确定这是否是一个bug,但这很有趣,我从未尝试过以这种方式执行sqoop命令
--拆分依据
指定的列(主键)由sqoop用于拆分工作单元
-m1
正在强制sqoop仅使用1个映射器
您有一个自由形式的查询导入,基于该查询,sqoop应该只创建一行。我的假设是,你有两个--splitby
&-m1
选项/参数传递给了独家新闻;可能--按
拆分优先于-m
。通常,当未指定-m
时,sqoop仅使用4个映射器作业执行,我猜每个映射器在sql语句中创建了1行硬编码字段
请在不使用
--split by
参数的情况下尝试使用sqoop命令。我不确定这是否是一个bug,但这很有趣,我从未尝试过以这种方式执行sqoop命令
--拆分依据
指定的列(主键)由sqoop用于拆分工作单元
-m1
正在强制sqoop仅使用1个映射器
您有一个自由形式的查询导入,基于该查询,sqoop应该只创建一行。我的假设是,你有两个--splitby
&-m1
选项/参数传递给了独家新闻;可能--按
拆分优先于-m
。通常,当未指定-m
时,sqoop仅使用4个映射器作业执行,我猜每个映射器在sql语句中创建了1行硬编码字段
请尝试使用sqoop命令,但不要使用
--split by
参数。我不知道为什么会得到4条记录。我的系统中只有一条记录。请在“选择”的末尾添加限制1。。。查询WHERE$条件后,请参阅。希望这能奏效我不知道你为什么会得到4张唱片。我的系统中只有一条记录。请在“选择”的末尾添加限制1。。。查询WHERE$条件后,请参阅。希望这能起作用Sqoop运行良好。尝试对数据库运行此查询,您将看到输出将等于该表中的行数。Sqoop工作正常。尝试对数据库运行此查询,您将看到输出将等于该表中的行数。不,这不是错误。您以错误的方式查询。您需要向sql查询添加限制。更新后的查询将如下所示:
sqoop --options-file import.txt \
--query "select 1 as emp_id, 'Barry' as first_name, 'Williams' as last_name, '2016-04-20 15:41:00' as create_date from test.Employee LIMIT 1 where \$CONDITIONS" \
--target-dir /user/<username>/Employee \
--split-by emp_id \
-m 1
sqoop——选项文件import.txt\
--查询“选择1作为emp_id,选择Barry作为名字,选择Williams作为姓氏,选择2016-04-20 15:41:00作为测试的创建日期。员工限额1,其中\$CONDITIONS”\
--目标目录/用户//员工\
--按emp_id拆分\
-M1
不,这不是一个bug。您以错误的方式查询。您需要向sql查询添加限制。更新后的查询将如下所示:
sqoop --options-file import.txt \
--query "select 1 as emp_id, 'Barry' as first_name, 'Williams' as last_name, '2016-04-20 15:41:00' as create_date from test.Employee LIMIT 1 where \$CONDITIONS" \
--target-dir /user/<username>/Employee \
--split-by emp_id \
-m 1
sqoop——选项文件import.txt\
--查询“选择1作为emp_id,选择Barry作为名字,选择Williams作为姓氏,选择2016-04-20 15:41:00作为测试的创建日期。员工限额1,其中\$CONDITIONS”\
--目标目录/用户//员工\
--按emp_id拆分\
-M1
按
拆分选项已删除。我使用了-m1
选项,得到了相同的结果——插入了4行。我使用了--num mappers 1
选项,得到了相同的结果。所以,我尝试了这个方法:我在mysql
表中添加了四行,然后再次运行sqoop
命令。现在,插入了8行<代码>按拆分选项已删除。我使用了-m1
选项,得到了相同的结果——插入了4行。我使用了--num mappers 1
选项,得到了相同的结果。所以,我尝试了这个方法:我在mysql
表中添加了四行,然后再次运行sqoop
命令。现在,插入了8行!