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 数据库信息
相关推荐
想会飞的蒲公英几秒前
一个 PyTorch 模型训练的完整流程
人工智能·pytorch·python
c_lb728814 分钟前
最新AI量化练习,小策略更适合练流程感
人工智能·python
电化学仪器白超29 分钟前
低阻域 ADC 与参考源选型理论分析
人工智能·python·单片机·嵌入式硬件·自动化
༄沐࿆风࿆࿆36 分钟前
JavaScript函数完全指南:从基础语法到闭包原理与应用实战
开发语言·javascript
山峰哥37 分钟前
数据库工程:Explain执行计划对比实战指南‌
数据库·sql·oracle·深度优先·宽度优先
crisps_ww1 小时前
自媒体运营分析-BI可视化仪表盘制作
数据库
AI科技星1 小时前
《01无穷全域信息场论:算子G与宇宙本体高维完备公理大典》
人工智能·python·算法·金融·乖乖数学·全域数学
Geek-Chow1 小时前
微服务认证与授权:01 — 概念
java·前端·数据库
KobeSacre1 小时前
DelayQueue 源码
java·开发语言
han_hanker1 小时前
重新认识枚举enum
开发语言