Mysql sql 拼接Sqoop和Phoenix语句

需求描述

       需要从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

如有疑问可以评论回复,谢谢大家!

你可能感兴趣的:(Mysql sql 拼接Sqoop和Phoenix语句)