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  

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

猜你喜欢

转载自blog.csdn.net/wumiqing1/article/details/85161914