Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么;Sqoop导入--查询…“;仅应插入一行时插入多行?_Mysql_Hadoop_Hdfs_Sqoop - Fatal编程技术网

Mysql 为什么;Sqoop导入--查询…“;仅应插入一行时插入多行?

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 -

我正在获得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 --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行!