Hbase建表
hbase shell>create 'AC01YS_1_10W', 'COLUMN'
sqoop导入数据到Hbase
sqoop import --connect jdbc:oracle:thin:@//ip:host/ORCLPDB1 --username [username] --password [password] --query "SELECT AAC001, AAC002, AAC003, AAC004, AAC005, AAC006, AAC007, FROM AC01YS WHERE \$CONDITIONS" --hbase-create-table --hbase-table AC01YS --column-family COLUMN --hbase-row-key AAC002,AAC003 -m 1;
Hbase的数据是AAC002,AAC003作为行键,下划线连接这两个字段,但是列簇里并没有AAC002和AAC003这两个字段了,有时候还需要用到这两个字段,比如要创建Hive的分区表
CREATE EXTERNAL TABLE external_hbase.ac01ys( AAC001 DECIMAL(20) COMMENT '人员id', AAC002 VARCHAR(20) COMMENT '公民身份号码', AAC003 VARCHAR(50) COMMENT '姓名', AAC004 VARCHAR(2) COMMENT '性别', AAC005 VARCHAR(2) COMMENT '民族', AAC006 DECIMAL(8) COMMENT '出生日期', AAC007 DECIMAL(8) COMMENT '参加工作日期') STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = "COLUMN:AAC001,:key,COLUMN:AAC004,COLUMN:AAC005,COLUMN:AAC006,COLUMN:AAC007") TBLPROPERTIES("hbase.table.name" = "AC01YS");
上面创建Hive外部表会报错的,因为Hive外部表字段数和Hbase不一致。
在sqoop-site.xml中加入配置项:
<property>
<name>sqoop.hbase.add.row.key</name>
<value>true</value>
</property>
重新导入数据到Hbase表,就能看到Hbase表有AAC002和AAC003字段了