python 连接hive2 数据库

python 连接hive2 数据库

python 复制代码
from pyhive import hive

# 连接到 Hive
conn = hive.Connection(host='hive_host', port=10000, username='your_username')

# 创建游标对象
cursor = conn.cursor()

# 执行查询
cursor.execute('SELECT * FROM your_table LIMIT 10')

# 获取结果
for row in cursor.fetchall():
    print(row)

下面封装一下代码 完整代码如下所示:

python 复制代码
from pyhive import hive

class HiveDictCursor:
    """
    PyHive cursor 封装,fetchall / fetchone 返回字典列表或字典
    """
    def __init__(self, cursor):
        self._cursor = cursor
        self._columns = None

    def execute(self, sql, params=None):
        if params:
            self._cursor.execute(sql, params)
        else:
            self._cursor.execute(sql)
        # 获取列名
        self._columns = [col[0] for col in self._cursor.description]

    def fetchall(self):
        rows = self._cursor.fetchall()
        return [dict(zip(self._columns, row)) for row in rows]

    def fetchone(self):
        row = self._cursor.fetchone()
        if row:
            return dict(zip(self._columns, row))
        return None

    def __getattr__(self, name):
        # 其他方法直接代理给原 cursor
        return getattr(self._cursor, name)

#数据库的配置
HIVE_CONFIG = {
    'host': '127.0.0.1',
    'database': 'bdp',
    'username': 'wwww',
    'password': '123456',
    'port': 10000,
    'auth': 'LDAP'
}


#查询方法
def fetch_data_from_hivesql(query):
    conn = None
    cursor = None
    try:
        conn = hive.Connection(**HIVE_CONFIG)
        cursor = HiveDictCursor(conn.cursor())
        logging.info("执行 Hive SQL: %s", query)
        cursor.execute(query)
        result = cursor.fetchall()
        #result = [dict(row) for row in cursor.fetchall()] 
        return result
    except Exception as e:
        logging.error("从Hive获取数据时出错: %s", e)
        return []
    finally:
        if cursor:
            cursor.close()
        if conn:
            conn.close()



today = datetime.now().date()
yesterday = (today - timedelta(days=1)).strftime("%Y-%m-%d")
start_time = yesterday+" 00:00:00" 
end_time = yesterday+" 23:59:59"

aa_sql = """ SELECT * FROM ddd  WHERE gxsj>='{start_time}' AND gxsj<='{end_time}' ORDER """
query = aa_sql.format(start_time=start_time,end_time=end_time)
        
rows = fetch_data_from_hivesql(query) #查询hive 数据库信息
相关推荐
wuyk5553 分钟前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法
吴声子夜歌7 分钟前
ApacheCommons——commons-text(模板替换与文本算法)
java·开发语言·算法·apache
2601_9622946120 分钟前
Python接口自动化测试实战:使用requests库
python·接口自动化测试·异常处理·requests库·api测试
砚底藏山河27 分钟前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
阿童木写作31 分钟前
跨境电商翻译工具推荐:批量图片翻译+视频字幕实时翻译
人工智能·python·音视频
晶捷软件32 分钟前
晶捷智能:集团型制造企业ERP如何实现多工厂统一管控
大数据·人工智能·python·制造
oyguyteggytrrwwwrt43 分钟前
闵可夫斯基差演示
python
Java小白笔记1 小时前
MySQL 8.0 常用内置函数用例
数据库·mysql·mybatis
智购科技无人售货机工厂店1 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
ZGG0031 小时前
MySQL 索引详解:B+ 树、聚簇索引与最左前缀
java·数据库·mysql