Hive基本操作(一)

创建内部表:
create table if not exists stus(
name string,age int,sex string
)row format delimited fields terminated by "\t";


创建外部表:
create external table if not exists sogou(
time string,uid string,kw string,rank int,
orders int,url string
)
row format delimited 
fields terminated by "\t"
location '/input/sogou';


创建分区表:
create table if not exists invites(
id int,name string
)
partitioned by (ds string)
row format delimited fields terminated by '\t'
stored as textfile;


create table if not exists stus_partition(
name string,age int,sex string
)partitioned by (class string)
row format delimited fields terminated by '\t'
stored as textfile;


向分区表加载数据:
load data local inpath '/home/tg/datas/stu' into table stus_partition partition(class='001')


基本模式插入
insert overwrite table student partition (stat_date='20170101')
select id,age,name from student where stat_date='20160101';
多模式插入
from student
insert overwrite table student partition(stat_data='20170101')
select id,age,name where stat_data='20160101'
insert overwrite table student partition(stat_data='20170201')
select id,age,name where stat_data='20160201';
自动分区模式
insert overwrite table student partition(stat_data)
select id,age,name,stat_data from student where stat_data='20170201';


导出文件到本地:&&&注意overwrite关键字后面没有into
insert overwrite local directory '/root/app/datafile/student1'
select * from student1;
导出数据到HDFS:
insert overwrite directory 'hdfs://master:9000/input/test/'
selec * from student1;





























<think>好的,用户之前问过关于Hadoop生态系统中的几个工具,现在他想了解Hive基本操作。我需要先回顾下之前的对话,确保回答的致性和连贯性。之前我详细介绍了Hadoop、Hive、HBase、Spark和Flink的核心功能和案例,用户现在可能已经对这些工具有了初步了解,现在想深入Hive的具体使用。 首先,用户可能是数据分析师或刚接触大数据的学生,他们需要掌握Hive基本操作来处理数据。Hive作为数据仓库工具,使用类SQL语法,所以用户可能熟悉SQL,但需要了解Hive的特殊之处,比如如何建表、加载数据、执行查询等。 我需要考虑用户的需求层次。基本操作可能包括数据库和表的管理、数据加载、查询、分区和分桶、函数使用等。同时,用户可能对Hive和传统数据库的区别不太清楚,比如Hive不支持事务、延迟较高等,这些也需要在介绍中提及,帮助用户避免常见误区。 另外,用户可能需要实际例子来理解每个操作。比如,创建表时的ROW FORMAT和存储格式,分区表的例子,导入数据的不同方法等。这些例子应该贴近实际应用,比如日志分析、销售数据统计等场景,让用户更容易理解。 还要注意Hive的不同计算引擎,比如默认是MapReduce,但也可以使用Tez或Spark,这可能影响执行效率。用户可能想知道如何优化查询,所以需要提到些优化技巧,比如使用分区、合理设置并行度等。 最后,用户可能有后续问题,比如如何优化Hive性能,如何处理复杂的数据类型,或者如何与Hadoop其他工具结合使用。因此,在回答中需要结构清晰,分步骤讲解,并给出注意事项和常见问题,帮助用户打下扎实的基础,同时激发他们进步探索的兴趣。</think>以下是 **Hive 基本操作**的详细说明,包含常用命令、语法示例及实际场景案例,帮助你快速上手: --- ### **Hive 核心概念** 1. **数据存储**:底层数据存储在 HDFS 上(如 `/user/hive/warehouse`) 2. **表类型**: - **内部表(Managed Table)**:数据由 Hive 管理,删除表时数据会被删除。 - **外部表(External Table)**:数据存储在指定路径,删除表时仅删除元数据。 3. **数据格式**:支持 TEXTFILE(默认)、ORC、Parquet 等。 --- ### **二、数据库操作** #### 1. 创建数据库 ```sql CREATE DATABASE IF NOT EXISTS sales_db COMMENT 'Sales Data Warehouse' LOCATION '/user/hive/sales'; -- 指定 HDFS 存储路径 ``` #### 2. 查看数据库 ```sql SHOW DATABASES LIKE 'sales*'; -- 模糊匹配数据库名 ``` #### 3. 切换数据库 ```sql USE sales_db; ``` #### 4. 删除数据库 ```sql DROP DATABASE IF EXISTS sales_db CASCADE; -- CASCADE 强制删除非空数据库 ``` --- ### **三、表操作** #### 1. 创建内部表(默认) ```sql CREATE TABLE user_orders ( user_id STRING COMMENT '用户ID', order_id STRING COMMENT '订单号', amount DOUBLE COMMENT '金额', order_time TIMESTAMP COMMENT '下单时间' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' -- 列分隔符 STORED AS TEXTFILE; -- 存储格式 ``` #### 2. 创建外部表(推荐生产环境使用) ```sql CREATE EXTERNAL TABLE logs ( ip STRING, url STRING, status INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/logs/access_log'; -- 指定外部数据路径 ``` #### 3. 查看表结构 ```sql DESCRIBE FORMATTED user_orders; -- 显示详细表信息(存储路径、格式等) ``` #### 4. 删除表 ```sql DROP TABLE IF EXISTS user_orders; ``` --- ### **四、数据加载与导出** #### 1. 从本地加载数据(适合小数据测试) ```sql LOAD DATA LOCAL INPATH '/home/user/orders.csv' INTO TABLE user_orders; ``` #### 2. 从 HDFS 加载数据(生产常用) ```sql LOAD DATA INPATH '/data/orders/20231001.csv' INTO TABLE user_orders; ``` #### 3. 导出数据到 HDFS ```sql INSERT OVERWRITE DIRECTORY '/output/user_orders' ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' SELECT * FROM user_orders; ``` --- ### **五、查询操作** #### 1. 基础查询(类 SQL) ```sql SELECT province, COUNT(*) AS order_count FROM user_orders WHERE dt = '20231001' GROUP BY province HAVING order_count > 100 ORDER BY order_count DESC LIMIT 10; ``` #### 2. 分区表查询(优化性能) ```sql -- 创建分区表 CREATE TABLE user_orders_partitioned ( user_id STRING, order_id STRING, amount DOUBLE ) PARTITIONED BY (dt STRING) -- 按日期分区 STORED AS ORC; -- 查询特定分区 SELECT * FROM user_orders_partitioned WHERE dt = '20231001'; ``` #### 3. 连接查询(Join) ```sql SELECT u.name, SUM(o.amount) AS total FROM users u JOIN user_orders o ON u.user_id = o.user_id GROUP BY u.name; ``` --- ### **六、常用函数** #### 1. 字符串函数 ```sql SELECT CONCAT(user_id, '_', order_id) AS uid_order, SUBSTR(order_time, 1, 7) AS month FROM user_orders; ``` #### 2. 日期函数 ```sql SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd HH:mm:ss') AS current_time; ``` #### 3. 聚合函数 ```sql SELECT AVG(amount) AS avg_amount, PERCENTILE(CAST(amount AS BIGINT), 0.5) AS median_amount FROM user_orders; ``` --- ### **七、优化技巧** 1. **使用分区和分桶**: ```sql CREATE TABLE user_orders_bucketed ( user_id STRING, order_id STRING ) PARTITIONED BY (dt STRING) CLUSTERED BY (user_id) INTO 32 BUCKETS; -- 分桶加速 Join ``` 2. **选择高效存储格式**: ```sql CREATE TABLE orc_table (...) STORED AS ORC; -- 列式存储,压缩比高 ``` 3. **启用压缩**: ```sql SET hive.exec.compress.output=true; SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; ``` --- ### **八、注意事项** 1. **Hive 与 RDBMS 的区别**: - 不支持事务和行级更新(设计初衷为离线分析) - 高延迟(适合分钟级以上的批量处理) 2. **常见报错处理**: - `SemanticException [Error 10072]`: 分区字段未在WHERE中指定(需添加分区过滤) - `Execution Error: Java heap space`: 内存不足(调整 `mapreduce.map.memory.mb`) --- ### **实际案例:电商日志分析** ```sql -- 1. 创建外部表映射日志数据 CREATE EXTERNAL TABLE click_logs ( user_id STRING, item_id STRING, click_time TIMESTAMP ) LOCATION '/user/logs/clicks'; -- 2. 统计每小时热门商品 SELECT item_id, DATE_FORMAT(click_time, 'yyyy-MM-dd HH') AS hour, COUNT(*) AS clicks FROM click_logs GROUP BY item_id, DATE_FORMAT(click_time, 'yyyy-MM-dd HH') ORDER BY clicks DESC LIMIT 10; ``` 如果需要更高级操作(如 **UDF 开发**、**动态分区**、**复杂嵌套查询**),可以进步说明具体需求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值