假设我有一个名为“users”的 mysql 表,它有像
user_name, user_id, user_address, user_level
.
我可以使用 sqoop 将数据导入 HBase 并重命名和删除一些列吗?例如,当它们被导入到 HBase 时,我的列可能看起来像这样:
行键:user_id
列:u_name, user_address
。
假设我有一个名为“users”的 mysql 表,它有像
user_name, user_id, user_address, user_level
.
我可以使用 sqoop 将数据导入 HBase 并重命名和删除一些列吗?例如,当它们被导入到 HBase 时,我的列可能看起来像这样:
行键:user_id
列:u_name, user_address
。
简短的回答是肯定的。要更改列名,您可以使用自由查询并使用诸如“Select [insert column] as”之类的语句。
语句如下所示:
sudo sqoop import --connect jdbc:mysql://[host ip]/databasename --username [your username] --password [your password] --hbase-table [your hbase table] --column-family cf --hbase-row-key user_id --query "SELECT user_id, user_name AS u_name, user_address AS u_address FROM users WHERE \$CONDITIONS -m 1"
注意:您的查询必须包含标记 $CONDITIONS,每个 Sqoop 进程将用唯一的条件表达式替换该标记。您还必须使用 --split-by 或使用“-m 1”选择拆分列。
您可以忽略 select 语句中的其他列。但请注意,除了 id 之外,您可能还希望在行键中添加更多内容,因为这是 HBase 在检索记录方面的强大之处,并考虑添加 md5 以避免区域热点。您可以使用 MySQL 的“md5”命令来执行此操作,例如。“md5(user_id) AS md5” 并将其放在实际的行键之前,以获得跨区域服务器的键的良好分布。