以下是我在Cloudera快速启动VM中尝试的查询
sqoop import --username training --password training --connect jdbc:mysql:// localhost / loudacre --target -dir / sample --split-by accounts.acct_num --query'select accounts.first_name FROM accounts JOIN accountdevice ON(accounts.acct_num = accountdevice.account_id)WHERE $ CONDITIONS' kquote
以下是查询
中使用的两个表的表结构mysql> describe accounts;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| acct_num | int(11) | NO | PRI | NULL | |
| acct_create_dt | datetime | NO | | NULL | |
| acct_close_dt | datetime | YES | | NULL | |
| first_name | varchar(255) | NO | | NULL | |
| last_name | varchar(255) | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| city | varchar(255) | NO | | NULL | |
| state | varchar(255) | NO | | NULL | |
| zipcode | varchar(255) | NO | | NULL | |
| phone_number | varchar(255) | NO | | NULL | |
| created | datetime | NO | | NULL | |
| modified | datetime | NO | | NULL | |
+----------------+--------------+------+-----+---------+-------+
12 rows in set (0.00 sec)
mysql> describe accountdevice;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| account_id | int(11) | NO | MUL | NULL | |
| device_id | int(11) | NO | MUL | NULL | |
| activation_date | datetime | NO | | NULL | |
| account_device_id | varchar(255) | NO | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
我收到以下异常
SQLSyntaxErrorException: Unknown column 't1.acct_num' in 'field list'
16/10/15 13:48:12 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 't1.acct_num' in 'field list'
有人可以帮忙吗?
答案 0 :(得分:0)
这是预期的行为。
首先,sqoop将根据您的查询从RDBMS获取元数据(列详细信息)。
使用查询:
select accounts.first_name FROM accounts JOIN accountdevice
ON (accounts.acct_num = accountdevice.account_id) WHERE 1 = 0
您认为$CONDITIINS
已替换为 1 = 0 以获取元数据。
现在,您的查询将仅返回1列first_name
,并且您将在acct_num
上拆分,而不是从RDBMS表中查询。这就是您收到未知列错误的原因。
因此,请确保在SQL查询中也按列拆分。