我的SQL表是
mysql>从“订单”中选择*;
+ -------- + ----------- + ------------ + ------------ -+ ------------- +
| ord_no | purch_amt | ord_date | customer_id | salesman_id |
+ -------- + ----------- + ------------ + ------------ -+ ------------- +
| 70001 | 150.50 | 2012-10-05 | 3005 | 5002 |
| 70009 | 270.65 | 2012-09-10 | 3001 | 5005 |
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70004 | 110.50 | 2012-08-17 | 3009 | 5003 |
| 70007 | 948.50 | 2012-09-10 | 3005 | 5002 |
| 70005 | 999.99 | 2012-07-27 | 3007 | 5001 |
| 70008 | 999.99 | 2012-09-10 | 3002 | 5001 |
| 70010 | 999.99 | 2012-10-10 | 3004 | 5006 |
| 70003 | 999.99 | 2012-10-10 | 3009 | 5003 |
| 70012 | 250.45 | 2012-06-27 | 3008 | 5002 |
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
| 70013 | 999.99 | 2012-04-25 | 3002 | 5001 |
+ -------- + ----------- + ------------ + ------------ -+ ------------- +
我运行了Sqoop导入
sqoop import --connect jdbc:mysql://ip-172-31-20-247:3306/sqoopex --
username sqoopuser --password <hidden> --table Orders --target-dir
SqoopImp2 --split-by ord_no --check-column ord_date --incremental
lastmodified --last-value '2012-09-10'
根据下面所述的Sqoop 1.4.6手册,
Sqoop支持的另一种表更新策略称为lastmodified 模式。当源表的行可能会更新时,应该使用此方法,并且每次此类更新会将上次修改的列的值设置为当前时间戳。导入检查列保存的时间戳比--last-value 指定的时间戳更新的行
我不希望输出中的日期为“ 2012-09-10”的列。但是我的输出,如下所示,
[manojpurohit17834325 @ ip-172-31-38-146〜] $ hadoop fs -cat SqoopImp2 / *
70001,150.50,2012-10-05,3005,5002
70002,65.26,2012-10-05,3002,5001
70003,999.99,2012-10-10,3009,5003
70007,948.50,2012-09-10,3005,5002
70009,270.65,2012-09-10,3001,5005
70008,999.99,2012-09-10,3002,5001
70010,999.99,2012-10-10,3004,5006
包含日期为20125-10-10的行。注意:输出目录先前不存在,并且是通过此sqoop执行创建的。
从此执行中,我看到--last-modified中的日期包含在输出中,这与手册中提到的相反。请帮助我了解这种差异,如果在此处缺少任何内容,请纠正我。
答案 0 :(得分:0)
是,-lastvalue 也包含在结果中。 在--incremental import中有2种可用模式:i)附加ii)最后修改
追加:在此模式下,它仅检查--lastvalue并从最后一个值开始导入。 ->即使以前的值已更新,也不会导入
上次修改:它也仅与附加模式相同,但是在此它会导入新行,并且如果更新了之前的行,也会导入它们。 注意:lastmodified仅在唯一的日期或时间戳类型列上起作用