【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)
蝉噪林逾静,鸟鸣山更幽。——王籍《入若耶溪》