当前位置: 首页 > 后端技术 > Python

python请求登录hue提交hive查询

时间:2023-03-25 23:04:44 Python

"""python登录Hue并查询。首次使用请修改BASE_URL、USERNAME和PASSWORD。"""__author__='YujianYangand0ut0fcontrol'__version__='1.0.0'importtimeimportrequestsclassHue(requests.Session):BASE_URL='http://localhost:8000'USERNAME='test'PASSWORD='123'def__init__(self,base_url=None):如果base_url为None:self.base_url=self.BASE_URLelse:self.base_url=base_urlsuper(Hue,self).__init__()deflogin(self,username=None,password=None):如果用户名是None:username=self.USERNAME如果密码是None:password=self.PASSWORDlogin_url=self.base_url+'/accounts/login/'self.get(login_url)form_data=dict(username=username,password=password,csrfmiddlewaretoken=self.cookies['csrftoken'],next='/')r=self.post(login_url,data=form_data,cookies=dict(),headers=dict(Referer=login_url))ifr.status_code==200:print('用户[%s]在%s登录成功\n'%(username,self.base_url))else:raiseException('loginfailedforuser[%s]at%s\n'%(username,self.base_url))returnrdefbeeswax(self,database,query,filename=None):beeswax_url=self.base_url+'/beeswax'query_data={'query-query':query,'query-database':database,'settings-next_form_id':0,'file_resources-next_form_id':0,'functions-next_form_id':0,'query-email_notify':False,'query-is_parameterized':True,}HEADERS={'X-CSRFToken':self.cookies['csrftoken'],'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8','回复ferer':beeswax_url,}self.headers.update(HEADERS)excecute_url=self.base_url+'/beeswax/api/query/execute/'r=self.post(excecute_url,data=query_data,headers=self.headers,cookies=self.cookies,)assertr.status_code==200r_json=r.json()job_id=r_json['id']watch_url=self.base_url+r_json['watch_url']t_sec=2t_try=100t_tol=t_sec*t_tryforiinrange(t_try):print('等待%3d/%d秒作业%d:%s...'%(t_sec*i,t_tol,job_id,query[:50]))r=self.post(watch_url,data=query_data,headers=self.headers,cookies=self.cookies,)r_json=r.json()ifr_json['isSuccess']:breakelse:time.sleep(t_sec)csv_url=self.base_url+'/beeswax/download/%d/csv'%(job_id)r=self.get(csv_url,headers=self.headers,cookies=self.cookies,)如果文件名不是None:withopen(filename,'wb')asf:f.write(r.content)print('将结果保存在%s\n'%(filename))returnrif__name__=="__main__":importargparseparser=argparse.ArgumentParser(description=__doc__,formatter_class=argparse.RawDescriptionHelpFormatter,epilog='Example:\n''python-ddatabase-squery.sql-oresult.csv\n''python-ddatabase-sq1.sqlq2.sql#输出q1.sql.csvq2.sql.csv\n')parser.add_argument('-d','--database',help='数据库名',required=True)parser.add_argument('-s','--sql',nargs='+',help='一个或多个查询语句文件.',required=True)parser.add_argument('-o','--output',help='查询结果csv文件名,默认:sql文件名.csv')args=parser.parse_args()hue=Hue()hue.login()forqinargs.sql:withopen(q)作为f:query=f.read()output=args.output如果输出为None:output=q+'.csv'hue.beeswax(args.database,query,output)