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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容