最近有个小需求,需要自动在Hive的数据库中创建一些通用的基础表,用于不同城市的数据计算服务,通常我会整理出一个hql文档,将所有的sql统统塞到一个文件里,然后直接执行,这种虽然简便,但是却不易维护,于是我就用python撸个小工具,能够适配各种不同的配置。那么此时就需要用python3来连接hiveserver2了。方法如下:
1.安装依赖包
pip3 install sasl thrift thrift-sasl PyHive
2.项目中直接引用
from pyhive import hive
3.创建连接的代码
conn = hive.Connection(host='10.10.10.101', port=10000, username='hive', database='dbname')
其他DDL、DML的语法与mysql-connector的用法一模一样,有空在下面给大家大致罗列一下。
4.DDL相关
执行完第三步以后,即可进行数据库的相关操作
4.1 创建表
cursor = conn.cursor() cursor.execute("CREATE EXTERNAL TABLE TBNAME(ID BIGINT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/test/tbname'") cursor.close()
这里其实有个小坑的第一,执行的SQL里面不要出现“;”;第二,如果你的SQL是从文件里读取出来的,那么你的代码应该是下面这样才行:
cursor = conn.cursor() sql = line["tbname"] # line表示一个字典,里面k是表名,v是具体的sql cursor.execute(str(sql)) cursor.close()
4.2 删除表
cursor = conn.cursor() cursor.execute("DROP TABLE TBNAME") cursor.close()