Hive 编程主要涉及使用 HiveQL(Hive Query Language)进行数据查询、数据操作、数据定义和数据管理等任务。以下是一些基本的 Hive 编程步骤和示例:
1. 安装 PyHive
首先,你需要安装 PyHive 库,以便在 Python 环境中连接和执行 Hive 查询。
```bash
pip install pyhive
```
2. 连接 Hive
使用 PyHive 连接 Hive 数据库,需要提供主机名、端口号和用户名。
```python
from pyhive import hive
创建连接
conn = hive.Connection(host='your_hive_host', port=10000, username='your_username')
获取游标
cursor = conn.cursor()
执行 SQL 查询
cursor.execute('SELECT * FROM your_table LIMIT 10')
获取查询结果
for result in cursor.fetchall():
print(result)
关闭游标和连接
cursor.close()
conn.close()
```
3. 创建数据库和表
在 Hive 中创建数据库和表,可以使用以下 SQL 语句:
```sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS demo;
-- 使用数据库
USE demo;
-- 创建表
CREATE TABLE IF NOT EXISTS hello_table (
id INT,
message STRING
);
-- 插入数据
INSERT INTO hello_table VALUES (1, 'Hello Hive'), (2, 'Welcome to Big Data');
-- 查询数据
SELECT * FROM hello_table;
```
4. 高级操作
外部表创建
创建一个指向 HDFS 上的外部表:
```sql
CREATE EXTERNAL TABLE eusers (
userid INT
) LOCATION 'oss://emr/users';
```
使用 OSS
在 Hive 中读写 OSS(对象存储服务)中的数据:
```sql
-- 创建外部表指向 OSS
CREATE EXTERNAL TABLE emrusers (
userid INT,
movieid INT,
rating INT,
unixtime STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'oss://${bucket}/yourpath';
-- 查询数据
SELECT COUNT(*) FROM emrusers;
SELECT * FROM emrusers LIMIT 100;
```
5. 常用 Hive 函数
Hive 提供了丰富的函数,以下是一些常用的算数运算函数:
```sql
-- 加法
SELECT 1 + 9 FROM zuoyyyy;
-- 减法
SELECT 10 - 5 FROM zuoyyyy;
-- 乘法
SELECT 5.6 * 4 FROM zuoyyyy;
```
6. Hive 配置
可以通过设置 Hive 的配置参数来调整查询输出和行为:
```sql
-- 设置查询时显示字段名称
SET hive.cli.print.header=true;
-- 设置 CLI 模式下显示当前所在的数据库名称
SET hive.cli.print.current.db=true;
-- 设置 Hive 的安全措施为 "strict" 模式
SET hive.mapred.mode=strict;
```
7. Hive 作业流程
在 E-MapReduce 集群中开发 Hive 作业流程,可以编写脚本来执行一系列 Hive 命令:
```sql
-- 示例脚本,保存为 hiveSample1.sql 并上传至 OSS
USE DEFAULT;
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.stats.autogather=false;
DROP TABLE emrusers;
CREATE EXTERNAL TABLE emrusers (
userid INT,
movieid INT,
rating INT,
unixtime STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'oss://${bucket}/yourpath';
SELECT COUNT(*) FROM emrusers;
SELECT * FROM emrusers LIMIT 100;
SELECT movieid, count(userid) as rating_count FROM emrusers GROUP BY movieid;
```
通过以上步骤和示例,你可以开始在 Hive 中进行编程。根据具体需求,你可以进一步扩展和优化你的 Hive 作业。