hive调用python

python:

# -*- coding: utf-8 -*-

import sys

for line in sys.stdin:
    values = line.split('\t')
    value = [i.strip() for i in values]
    print '\t'.join([value[0],value[1])

 

hql:

add file /data/pyscrip/hive_python.py

select transform(id,name) using "python hive_python.py" as(id,name) from tbtest;

转载于:https://www.cnblogs.com/kayy/p/7048667.html

### HivePython集成方法 #### 方法一:通过PyHive库连接Hive `PyHive` 是一个允许使用Python访问各种SQL引擎(包括Hive)的库。该库提供了类似于标准Python `db-api` 的接口。 ```python from pyhive import hive conn = hive.Connection(host='localhost', port=10000, username='your_username') cursor = conn.cursor() cursor.execute('SELECT * FROM your_table LIMIT 10') for result in cursor.fetchall(): print(result) ``` 这种方法适用于简单的查询场景,对于复杂的数据处理逻辑,则可以通过编写自定义函数来增强功能[^1]。 #### 方法二:利用HiveServer2和Thrift协议 HiveServer2 提供了一个JDBC/ODBC兼容的服务端口,能够接受来自不同客户端的应用程序请求。Python可通过安装thrift_sasl包建立到HiveServer2的安全连接: ```python import sasl from thrift.transport import TSocket, TSaslClientTransport from thrift.protocol import TBinaryProtocol from pyhive import hive as hiveserver2 transport = TSaslClientTransport(sasl.Client(), 'PLAIN', None, '/path/to/host.keytab', service='hive') protocol = TBinaryProtocol.TBinaryProtocol(transport) client = hiveserver2.connect(thrift_transport=transport) with client.cursor() as cur: cur.execute("SHOW TABLES") tables = cur.fetchall() print(tables) ``` 此方式适合于企业级应用部署环境下的安全认证需求[^4]。 #### 方法三:嵌入式Python脚本调用 当需要对数据做更复杂的转换或计算时,可以在HiveQL语句内部直接调用外部编写的Python脚本来实现特定的功能。这通常涉及到创建临时表并将结果返回给Hive进行进一步加工。 ```sql ADD FILE /path/to/python_script.py; CREATE TEMPORARY FUNCTION my_python_func AS 'com.example.MyPythonFunction'; INSERT OVERWRITE DIRECTORY '/output/path' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' SELECT TRANSFORM (col1, col2) USING 'python python_script.py' AS output_col FROM input_table; ``` 这种方式特别有利于那些熟悉Python编程而不太擅长Java或其他语言的人群,在不改变原有架构的基础上快速迭代业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值