pyhs2连接hive

本文介绍了一个Python脚本,该脚本通过pyhs2库连接到HiveServer2并执行HQL查询。文章展示了如何初始化连接、执行查询及关闭连接,并提供了一个具体的HQL插入操作示例。
pip install pyhs2

--------------------代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-
# hive util with hiveserver2

import pyhs2
from pyhs2.error import Pyhs2Exception
import sys
from file_util import fileUtil
from config_util import config
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)

class hiveUtil:
def __init__(self):

self.conn = pyhs2.connect(host=config.hive_host,
port=config.hive_port,
authMechanism=config.hive_auth,
user=config.hive_user,
password=config.hive_passwd,
database=config.hive_db,
)

def query(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
return cursor.fetch()

def queryNoResult(self, sql):
with self.conn.cursor() as cursor:
result=cursor.execute(sql)
return result
def close(self):
self.conn.close()

if __name__ == '__main__':
hiveClient=HiveClient()
hql_path = "/home/airflow/ebus/hql/SP_ODS_EBUS_CB_ACC_INF_DAY_INSERT.hql"
text=fileUtil.get_file_content(hql_path)
f=open(hql_path)
txt=f.read()
sql=txt.replace('${day_id}','20170818').replace('${past_day_id}','20170817')
sql_list=sql.split(";")
result=0
for hql in sql_list:
if hql.strip()!='':
print("hql=="+hql)
try:
hiveClient.queryNoResult(hql)
except Pyhs2Exception :
result=1
print(result)
hiveClient.close()

-----------/home/airflow/ebus/hql/SP_ODS_EBUS_CB_ACC_INF_DAY_INSERT.hql 文件如下:

INSERT INTO TABLE bank.ODS_CBBNDIRT PARTITION(PARTITION_DATE = '${day_id}')    
SELECT    
TRIM(REGEXP_REPLACE(CORPORATION,'\"','')) as CORPORATION,
TRIM(REGEXP_REPLACE(DAY_ID,'\"','')) as DAY_ID,
TRIM(REGEXP_REPLACE(FK_CBBND_KEY,'\"','')) as FK_CBBND_KEY,
TRIM(REGEXP_REPLACE(CB_IRT_ACT_DATE,'\"','')) as CB_IRT_ACT_DATE,
    CBIRT_DB_TIMESTAMP ,
    CB_BASE_IRT ,
TRIM(REGEXP_REPLACE(FILLER,'\"','')) as FILLER    
FROM out.ODS_CBBNDIRT;   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值