从mysql获取表转化为hive建表语句(python语言)

脚本可以直接从mysql 数据库里获取表信息,直接生成hive建表语句
'''
Created on 2017年6月29日

@author: 80002419
'''
import  pymysql
import  re


def get_table_info(table,schema = '',ispartition = True):
    '''
    table =  为表名,mysql,hive表名一致
    schema = 为hive中的库名
    ispartition : 是否分区默认为分区
    '''
    cols = []
    create_head = '''
create external table if not exists {0}.{1}('''.format(schema,table)
    if ispartition:
        create_tail = r'''
partitioned by(inc_day string)
row format delimited fields terminated by '\001'
location '/hivetable/{0}';'''.format(table)
    else:
        create_tail = r'''
row format delimited fields terminated by '\001'
location '/hivetable/{0}';'''.format(table)
    connection=pymysql.connect(host='hostname',
                               user='username',
                               password='password',
                               db='mysqldb',
                               port=3306,
                               charset='utf8'
                               )
    try:
    #获取一个游标
        with connection.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
            sql='SHOW FULL FIELDS FROM  {0}'.format(table)
            cout=cursor.execute(sql) #返回记录条数
            try:
                for row in cursor:#cursor.fetchall()
                    #print(row)
                    cols.append(row['Field']) 
                    if 'bigint' in row['Type']:
                        row['Type'] = "bigint"
                    elif 'int' in row['Type'] or 'tinyint' in row['Type'] or 'smallint' in row['Type'] or 'mediumint' in row['Type'] or 'integer' in row['Type']:
                        row['Type'] = "int"
                    elif 'double' in row['Type'] or 'float' in row['Type'] or 'decimal' in row['Type']:
                        row['Type'] = "double"
                    else:
                        row['Type'] = "string"
                    create_head += row['Field'] + ' '+ row['Type'] +' comment \'' + row['Comment'] + '\' ,\n'     
            except:
                print('程序异常!')  
    finally:
        connection.close()
    create_str = create_head[:-2] + '\n' + ')'+ create_tail
    return cols,create_str # 返回字段列表与你建表语句   
cols,create_str = get_table_info("tablename")
print(cols) 
print(create_str)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值