Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 02-12-2016 04:12 PM
Hi,
I am new to sqoop and trying to write few simple sqoop scripts. I am trying to query a table with where clause condition. When I give the where clause condition it's failing. Here is my simple script:
sqoop import \
--connect jdbc:mysql://localhost/test \
--username sat \
-P \
--query 'select emp_no,salary from salaries where salary >8000' \
--target-dir /user/ \
--m 1
I went through sqoop documentation and it was mentioned that I should use $CONDITIONS , but here my question is, if I use this parameter then , where I can specify my where clause condition. Please help me on the same.
Thanks,
Satish.
Created 02-12-2016 04:18 PM
See this tutorial http://www.tutorialspoint.com/sqoop/sqoop_import.htm
sqoop import \ --connect jdbc:mysql://localhost/userdb \--username root \ --table emp_add \ --m 1 \ --where“city =’sec-bad’” \ --target-dir /wherequery
Created 02-12-2016 05:37 PM
yes, it worked. Here is the final script:
sqoop import --connect jdbc:mysql://localhost/test --username sat -P --query 'select emp_no, salary from salaries where $CONDITIONS and salary>800' --split-by emp_no --target-dir /user/cloudera/tmp/ff
Thanks much.
Created 02-12-2016 05:40 PM
Please accept the answer to close the thread 😉
Created 02-12-2016 05:32 PM
please try this after giving valid password
sqoop import \
--connect jdbc:mysql://localhost/test \
--username sat \
--password XXXXX \
--query "select emp_no, salary from salaries where $CONDITIONS" \
--fields-terminated-by '|' \
--target-dir /user/cloudera/tmp/ \
--m 1;
Created 02-12-2016 04:45 PM
This is my script:
sqoop import --connect jdbc:mysql://localhost/test --username sat -P --query 'select emp_no, \ salary \ from \ salaries \ where \ $CONDITIONS' --split-by emp_no --target-dir /user/cloudera/tmp/
Error:
16/02/12 08:42:22 ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\ salary \ from \ salaries \ where \ (1 = 0)' at line 2 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\ salary \ from \ salaries \ where \ (1 = 0)' at line 2
Created 02-12-2016 05:35 PM
see the error message you have to include SqlManager in your conenction string.
16/02/12 09:28:51 ERROR manager.SqlManager: Error executing statement:
Created 02-07-2017 06:54 AM
sqoop import --connect jdbc:mysql://localhost/test --username sat -P --query 'select emp_no, salary from salaries where $CONDITIONS' --split-by emp_no --target-dir /user/cloudera/tmp/
there is no need of \ that you have add into your mysql query
and if you want use query in double quotes --query "select emp_no, salary from salaries where \$CONDITIONS"
add backslash before $CONDITIONS like above 🙂
Created 02-12-2016 04:57 PM
@Satish S your issue is all the \ in your query, you use \ outside of quotes, inside the quotes it is interpreted as SQL. That's why your MySQL is complaining. Remove all that and do use '$CONDITIONS', make sure to read the note about wrapping $CONDITIONS with single quotes or double because it does make a difference.
Created 02-12-2016 05:00 PM
I'm using below command frequently ..
sqoop import \ --connect jdbc:teradata://<DB Schema Nmae>/DATABASE=app_hadoop,CHARSET=UTF8 \
--driver "com.teradata.jdbc.TeraDriver" \
--username XXXXX \
--password XXXXX \
--query "select a*,b* from abc where CAST(ts as DATE) >='2012-00-01' and CAST(ts as DATE) < '2016-02-01' AND \$CONDITIONS" \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-delims-replacement '\0D' \
--fields-terminated-by '\001' \
--target-dir /db/prep/data \
--split-by created_on \
--m 4 ;
Here my Source DB is Teradata
Created 05-23-2016 03:39 PM
Based on the Neeraj Sabharwal reply , $Condition with where condition is working fine as expected . But that condition should be int comparision .
Example
Where id is integer field
sqoop import --connect jdbc:mysql://localhost/test --username sat --query 'select id,name from employee where $CONDITIONS and id = 323437 ' --split-by id --target-dir taget-dir-name
this is working fine as expected .
but
sqoop import --connect jdbc:mysql://localhost/test --username sat --query " select id,name from employee where $CONDITIONS and name = 'sathish' " --split-by id --target-dir taget-dir-name
name = 'sathish' is not working .
Could you please let us know how to handle string in where condition
Created 08-10-2016 06:33 AM
sqoop import --connect jdbc:mysql://localhost/test --username sat --query " select id,name from employee where \$CONDITIONS and name = 'sathish' " --split-by id --target-dir taget-dir-name
This query works fine. When you are using double-quote to specify sql statement then you have to use \$CONDITIONS instead of only $CONDITIONS