【presto】使用python执行presto任务

前言

目前发现有两个驱动包,分别是:

  • pyhive : https://github.com/dropbox/PyHive
  • presto-python-client : https://github.com/prestodb/presto-python-client

这里项目使用的是presto-python-client,毕竟是官方的。而且我这里访问的Presto集群是需要用户名密码进行https认证。

环境准备

  • python2.7
  • presto-python-client

安装 pip install presto-python-client

config.properties

这里需要注意几个点:

  • 是http 还是https 认证: http-server.https.enabled
  • 认证端口: http-server.https.port

在这里插入图片描述

另外一个需要presto.pem文件。

到此:这里需要的环境已经准备好了!

具体代码

#!/usr/bin/python2.7
#-*- coding:utf8 -*-
import prestodb

def get_presto_data():
  try:
     # host是服务器ip,port是端口,hive指的是Presto的catalog。
     conn=prestodb.dbapi.connect(
             host='presto.test.com', # host位置
             port=8443, # 端口位置
             user='risk', # 用户名
             catalog='hive', # 使用的hive
             schema='default', # 使用的schema,默认是default,可以不改
             http_scheme='https', #http的schema,
             auth=prestodb.auth.BasicAuthentication("username", "password") # 这里填用户名密码
     )
     conn._http_session.verify = './presto.pem' #校验文件存储位置,这个应该是默认位置
     
     sql = '''SELECT "trisk.t70"."real_app_name" AS "real_app_name"
     FROM trisk.t70'''

     cur = conn.cursor()
     cur.execute(sql) # sql语句
     rows = cur.fetchall()
     print(rows)
  except:
     print("presto server error")


if __name__ == '__main__':
  startTime = int(time.time())
  get_presto_data()
  endTime = int(time.time())
  execTime = endTime - startTime
  print(execTime)

蝉噪林逾静,鸟鸣山更幽。——王籍《入若耶溪》

posted @ 2022-11-10 19:25  彬在俊  阅读(322)  评论(0编辑  收藏  举报