需求描述:
需要从myslq导入数据到大数据平台hbase,但是由于有100多张表,如果一个表一个表导入的话,工作量大。如果写代码的话,需要的时间也比较多。是否可以直接通过sql语句批量生成sqoop语句呢??
此外,除了数据接入过来之外,还需要做的就是查询,通过phoenix查询,需要创建视图,怎么通过mysql sql语句自动生成创建视图的语句呢?
需要生成的sqoop:
sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://10.3.10.210/webmagic_n --username root --password P@ssw0rd --table weather_warning --columns id,title,district,disaster_type,warning_level,source,publish_time,content,url,update_time,groupname_stamp --hbase-create-table --hbase-table weather_warning --column-family cf --hbase-row-key id --where "update_time >= 2018-06-29" -m 1 --hbase-bulkload
需要生成的phoenix语句:
CREATE VIEW "accident_warning_policy"( id VARCHAR PRIMARY KEY, "cf"."title" VARCHAR,"cf"."policy_type" VARCHAR,"cf"."publish_time" VARCHAR,"cf"."source" VARCHAR, "cf"."content" varchar,"cf"."attachment" VARCHAR, "cf"."url" VARCHAR, "cf"."update_time" VARCHAR);
解决方法:
直接上sql:
生成的sqoop的sql:::
select s.table_schema,s.table_name,
concat('sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://10.3.10.210/webmagic_n --username root --password P@ssw0rd --table '
,s.table_name
,' --columns '
,GROUP_CONCAT(s.column_name)
,' --hbase-create-table --hbase-table '
,s.table_name
,' --column-family cf --hbase-row-key id --where "update_time >= 2018-06-29" -m 1 --hbase-bulkload')
from information_schema.COLUMNS s
left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE b on s.table_schema=b.table_schema and s.table_name =b.table_name
where s.table_schema = 'webmagic_n'
and b.constraint_name='PRIMARY'
GROUP BY s.table_name
生成phoenix的sql:::
select s.table_schema,s.table_name ,b.column_name
, GROUP_CONCAT( case s.column_name when b.column_name then concat(b.column_name,' VARCHAR PRIMARY KEY')
else concat('"cf"."',s.column_name,'" VARCHAR') end)
,concat('CREATE VIEW "',s.table_name,'"( ',GROUP_CONCAT( case s.column_name when b.column_name then concat(b.column_name,' VARCHAR PRIMARY KEY') else concat('"cf"."',s.column_name,'" VARCHAR') end) ,');')
from information_schema.COLUMNS s
left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE b on s.table_schema=b.table_schema and s.table_name =b.table_name
where s.table_schema = 'webmagic_n'
and b.constraint_name='PRIMARY'
and b.TABLE_NAME not in ('base_data_source_02','base_data_source')
GROUP BY s.table_name,b.column_name
如有疑问可以评论回复,谢谢大家!