sqoop import --connect jdbc:teradata://192.168.xx.xx/DBS_PORT=1025,DATABASE=ds_tbl_db
--driver com.teradata.jdbc.TeraDriver
--username dbc
--password dbc
--query 'select * from reason where id>20'
--hive-import
--hive-table reason_hive
--target-dir <hdfs-location>
-m 1
我收到了错误:
在WHERE子句中查询[select * from reason where where&gt; 20]必须包含'$ CONDITIONS'。
我知道在查询Sqoop时必须有一个where子句。
所以,对于像
这样的查询 select * from reason
我将其修改为:
select * from reason WHERE $CONDITIONS
如何处理具有where
子句的查询?
答案 0 :(得分:21)
您必须添加AND \$CONDITIONS
--query "select * from reason where id>20 AND \$CONDITIONS"
答案 1 :(得分:3)
Sqoop需要访问表的元数据,例如列类型信息。 Placeholder $ CONDITIONS默认设置为'1 = 0'以确保 sqoop只接收类型信息。因此,在执行sqoop命令后,您将看到被触发的第一个查询 默认为$ CONDITIONS。稍后,它将由基于映射器数量(-m)或--split-by列或--boundary-query定义不同范围的不同值替换,以便整个数据集可以划分为不同的数据切片或块和块可以并行导入,并且可以使用并发。 Sqoop将自动用生成的条件替换此占位符,指定每个单独任务应传输哪个数据片
例如,考虑带有列名,id和salary的sample_data表。 您想要获取工资&gt;的记录1K。
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba --password cloudera \
--query 'select * from sample_data where $CONDITIONS AND salary > 1000' \
--split-by salary \
--target-dir hdfs://quickstart.cloudera/user/cloudera/sqoop_new
以下是第一个返回空集的查询。
SqlManager: Executing SQL statement: select * from sample_data where (1 = 0) AND salary > 1000
然后下一个查询是获得范围的最小值和最大值。
INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN(salary), MAX(salary) FROM (select * from sample_data where (1 = 1) AND salary > 1000) AS t1;
答案 2 :(得分:0)
您可以使用Where Where子句
- “order_status ='CLOSED'”
答案 3 :(得分:0)
我正在cloudera
工作,正在查询Mysql
中的表列表。
我得到以下列出的查询的结果:
sqoop import --connect jdbc:mysql://127.0.0.1/Mydatabase
--username root --password cloudera
--query 'select * from employee where $CONDITIONS AND Sal<250000'
--split-by Sal --target-dir=user/cloudera/myfirstdata2 -m 1
答案 4 :(得分:0)
使用自由格式查询时,只需确保在$ CONDITIONS之前放置'\',就可以了。这是我在Cloudera Quickstart VM上尝试过的示例,它运行良好。
sqoop import --connect jdbc:mysql://quickstart.cloudera/retail_db --username retail_dba --password cloudera --query“选择来自客户的customer.customer_fname,customers.customer_lname,orders.order_id,orders.order_date加入(customers.customer_id = orders.order_customer_id)上的订单在哪里\ $ CONDITIONS“ --as-parquetfile-被” orders.order_customer_id“分割--target-dir” / user / cloudera / problem2 / data / cusotmers“ >
有关详细文档,请参阅此链接: https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_free_form_query_imports
答案 5 :(得分:0)
您可以如下设置
select * from (query) where $CONDITIONS
否则为select * from (query) as T where $CONDITIONS
请让我知道是否有任何问题。