• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

pyhive使用简明教程

Python admin 1年前 (2018-06-19) 6130次浏览 0个评论 扫描二维码

博主使用的是 pyhive,目前发现 github 作者还在一直维护当中附上链接pyhive

作为工具,我们直接使用就好了,当然你的服务器也要开启对用的服务,后面我们才可以通过客户端连接使用

在 macos 下面可以通过安装下面的包即可

pip install pyhive
pip install thift
pip install sasl
pip install thrift-sasl

下面贴出一个简单的小例子

# -*- coding: utf-8 -*-
# @Time    : 2018/6/19 上午 11:32
# @Author  : zhusimaji
# @File    : python_hive.py
# @Software: PyCharm

from pyhive import hive

PORT=10000
name = "*****"
password = "*****"
conn=hive.Connection(host="your host", port=PORT, username=name,database='stg',auth='LDAP',password=password)

cursor = conn.cursor()
cursor.execute("SELECT col1 FROM table123 LIMIT 10")
for result in cursor.fetchall():
    print(result)

一般情况下默认的端口都是 10000,下面看下 Connection 类的初始化参数

def __init__(self, host=None, port=None, username=None, database='default', auth=None,
                 configuration=None, kerberos_service_name=None, password=None,
                 thrift_transport=None):
        :param host: host 参数
        :param port:hive 服务端口 Defaults to 10000.
        :param auth: The value of hive.server2.authentication used by HiveServer2. 认证参数
            Defaults to ``NONE``.
        :param configuration: A dictionary of Hive settings (functionally same as the `set` command) hive 的参数
        :param kerberos_service_name: Use with auth='KERBEROS' only
        :param password: Use with auth='LDAP' or auth='CUSTOM' only  如果前面的 auth 参数是 ldap 或者 costom 则需要输入密码
        :param thrift_transport: A ``TTransportBase`` for custom advanced usage.
            Incompatible with host, port, auth, kerberos_service_name, and password.

所以你在上面的测试代码中看到我们使用了 LDAP 认证方式,需要输入对应的账号密码
Connection 有几个常见的方法简单说明一下

    #close 顾名思义就是关闭连接呗
    def close(self):
        """Close the underlying session and Thrift transport"""
        req = ttypes.TCloseSessionReq(sessionHandle=self._sessionHandle)
        response = self._client.CloseSession(req)
        self._transport.close()
        _check_status(response)
    #commit 一般只有类似 mysql 提供服务支持,hive 还是算了不支持
    def commit(self):
        """Hive does not support transactions, so this does nothing."""
        pass
    #cursor 游标,后续用于提交 sql 语句查询
    def cursor(self, *args, **kwargs):
        """Return a new :py:class:`Cursor` object using the connection."""
        return Cursor(self, *args, **kwargs)

    @property
    def client(self):
        return self._client

    @property
    def sessionHandle(self):
        return self._sessionHandle
    #mysql 支持事务,所有可以 rollback,当然 hive 不支持
    def rollback(self):
        raise NotSupportedError("Hive does not have transactions")  # pragma: no cover

下面再来看看 Cursor

class Cursor(common.DBAPICursor):
    """These objects represent a database cursor, which is used to manage the context of a fetch
    operation.

    Cursors are not isolated, i.e., any changes done to the database by a cursor are immediately
    visible by other cursors or connections.
    """

    def __init__(self, connection, arraysize=1000):
        self._operationHandle = None
        super(Cursor, self).__init__()
        self._arraysize = arraysize
        self._connection = connection

这个类是从 DBAPICursor 继承过来的,在 DBAPICursor 已经定义了很多方法,在前面的样例代码中我们使用了 cursor.fetchall(),其中 fetchall 就是在父类中定义的
大概描述就是这么多。。。。。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明pyhive 使用简明教程
喜欢 (4)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!