2016-06-13 23 views
0

我正在使用Sqoop將MySQL表導入HDFS。爲此,我使用自由格式的查詢導入。設置恆定邊界查詢

--query "SELECT $query_select FROM $table where \$CONDITIONS" 

由於min(id)和max(id)搜索,此查詢非常慢。爲了提高性能,我決定使用 - 邊界查詢並指定手動下限和上限。 (https://www.safaribooksonline.com/library/view/apache-sqoop-cookbook/9781449364618/ch04.html):

--boundary-query "select 176862848, 172862848" 

然而,sqoop不關心指定的值,然後再次嘗試通過自身尋找最小和最大的「身份證」。

16/06/13 14:24:44 INFO tool.ImportTool: Lower bound value: 170581647 
16/06/13 14:24:44 INFO tool.ImportTool: Upper bound value: 172909234 

完整sqoop命令:

sqoop-import -fs hdfs://xxxxxxxxx/ -D mapreduce.map.java.opts=" -Duser.timezone=Europe/Paris" -m $nodes_number\ 
    --connect jdbc:mysql://$server:$port/$database --username $username --password $password\ 
    --target-dir $destination_dir --boundary-query "select 176862848, 172862848"\ 
    --incremental append --check-column $id_column_name --last-value $last_value\ 
    --split-by $id_column_name --query "SELECT $query_select FROM $table where \$CONDITIONS"\ 
    --fields-terminated-by , --escaped-by \\ --enclosed-by '\"' 

有誰已經遇到了/解決了這個問題?由於

+0

不要回答自己的問題作爲編輯,而是將其作爲答案。你可以接受。 – Rob

回答

0

You are correct ..

我們不應該使用--split-by- 邊界查詢控制參數。

+0

不使用-split-by與--boundary-query控件參數背後的原因是什麼 – Farooque

0

嘗試這樣的..

--boundary-query "select 176862848, 172862848 from tablename limit 1" \ 
+0

該查詢與我的結果相同。 不過,我設法刪除 解決我的問題'--incremental追加--check列$ id_column_name --last價值$ LAST_VALUE' 似乎有這些參數之間的併發,本 - split-by參數和--boundary-query參數。 – theudbald

0

我已經成功通過刪除下列參數來解決這個問題:

--incremental append --check-column $id_column_name --last-value $last_value 

似乎有論據之間的併發--boundary -query,--check-column,--split-by和--incremental append