Hive 创建表、导入数据和插入数据操作

本文详细介绍Hive数据库的基本操作,包括表的创建、数据加载、数据导出等关键步骤。涵盖直接创建表、使用子查询创建表、创建外部表、创建视图,以及通过LOAD DATA和INSERT OVERWRITE进行数据加载和导出的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive 数据库创建,文件夹在和插入create table/ load data/ insert 简单操作
1、Hive创建表----直接使用create语句 (IF NOT EXISTS判断是否已存在表,BY后面接分隔符)
CREATE TABLE IF NOT EXISTS 表名(字段1 数据类型,字段2 数据类型) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

比如:CREATE TABLE IF NOT EXISTS test_li01(key INT,value string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

2、Hive创建表----使用子查询的结果集 (表名前可加库名(库名.表名))
create table 表名 as 子查询

比如:create table test02 as select * from test_li where name='ceshi'

3、Hive创建临时表----使用子查询的结果集创建
create temporary table 表名 as select * from 表名2 limit 100;

比如:create temporary table test_linshi03 as select * from test_three limit 100;

4、Hive创建外部表
create external table 表名 (字段1 数据类型,字段2 数据类型) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

比如:

create external table external_table02 (ziduan1 string,ziduan2 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

5、Hive创建视图----使用子查询的结果集创建
create view 视图名 as select * from 表名 limit 100;

比如:create view test_view02 as select * from test_three limit 100;

加载路径下的数据:
以下(3,4,5,6)加载可不带文件名,但会覆盖目录下的所有文件
6、Hive load data----无分区----加载本地路径数据到表 (overwrite重写)
load data local inpath ‘linux本地路径+文件名’ overwrite into 表名

比如:load data local inpath '/app/hive/load_data.txt' overwrite into table test04

7、Hive load data----有分区----加载本地路径数据到表 (overwrite重写)
load data local inpath ‘linux本地路径+文件名’ overwrite into 表名 partition (ds=‘分区名’)

比如:load data local inpath '/app/hive/load_data.txt' overwrite into table test01 partition (ds='20190506')

8、Hive load data----无分区----加载HDFS路径数据到表 (与本地相比,少一个local)
load data inpath ‘HDFS路径+文件名’ overwrite into table 表名;

比如:load data inpath '/tmp/test07.txt' overwrite into table test_li;

9、Hive load data----有分区----加载HDFS路径数据到表 (overwrite重写)
load data inpath ‘HDFS路径+文件名’ overwrite into table 表名 partition (ds=‘分区名’)

比如:load data inpath '/tmp/test_05.txt' overwrite into table test_h01 partition (ds='20190507')

10、通过子查询结果集将数据保存到系统路径下(可指定具体文件名)
insert overwrite [local] directory select * from …

导出数据到本地目录:(会将目录中已存在的文件删除)
insert overwrite local directory ‘linux本地路径’ select * from 表名;

比如:insert overwrite local directory '/app/hive/' select * from test01;

导出数据到HDFS中:
insert overwrite directory ‘HDFS路径’ select 列名 from 表名;

比如:insert overwrite directory '/app/tmp/' select * from test_hive limit 10;

11、同一个查询结果同时插入到多个表或者多个目录中:
from 表名
insert overwrite local directory ‘linux本地路径’ select *
insert overwrite directory ‘HDFS路径’ select 列名;

比如:

from test_insert123
insert overwrite local directory '/home/hive/' select * 
insert overwrite directory '/tmp/test/' select name='ceshi';

12、对多个表进入插入操作
from 表名 别名
insert overwrite table 表名1 partition(ds=‘分区名1’) select * where 别名.列名=‘值’
insert overwrite table 表名2 partition(ds=‘分区名2’) select * where 别名.列名=‘值’;

比如:

from test_th t1
insert overwrite table test05 partition(ds='20190508') select * where t1.name='2019'
insert overwrite table test06 partition(ds='20190508') select * where t1.name='2019';

13、多表查询结果导出到路径下(左连接)
insert overwrite local directory 'linux本地路径’select * from (select * from 表名1 where ds=分区名1) a left join (select * from 表名2) b on a.列名 = b.列名;
insert overwrite directory 'HDFS路径’select * from (select * from 表名1 where ds=分区名1) a left join (select * from 表名2) b on a.列名 = b.列名;
比如:

insert overwrite local directory '/appcom/tmp/'select * from (select * from test_hive01 where ds=20190507) a left join (select * from table_hive_copy) b on a.col01 = b.col01;
insert overwrite directory '/tmp/dw/'select * from (select * from test_hive01 where ds=20190507) a left join (select * from table_hive_copy) b on a.col01 = b.col01;

注:最好是( 库名.表名 ) 的格式进行操作

### Hive导入数据的方法 在Hive中,将数据导入到空可以通过多种方式实现。以下是几种常见的方法,并结合提供的引用内容进行详细说明。 #### 方法一:从本地文件导入数据 通过 `LOAD DATA` 语句可以将本地文件中的数据直接加载到Hive中。此方法适用于小规模数据集的导入。 ```sql LOAD DATA LOCAL INPATH '/path/to/local/file/t_user.txt' INTO TABLE test_user; ``` 上述命令会将 `/path/to/local/file/t_user.txt` 文件中的数据加载到 `test_user` 中[^1]。需要注意的是,如果使用了 `LOCAL` 关键字,则示从本地文件系统加载数据;否则是从 HDFS 加载数据。 #### 方法二:从其他插入数据 通过 `INSERT INTO` 或 `INSERT OVERWRITE` 语句可以从其他中选择数据插入到目标中。这种方式适合于大规模数据的迁移或转换。 ```sql INSERT INTO TABLE test_user SELECT id, name FROM source_table; ``` 如果需要覆盖目标中的现有数据,则可以使用 `INSERT OVERWRITE`: ```sql INSERT OVERWRITE TABLE test_user SELECT id, name FROM source_table; ``` 此外,当目标包含分区时,可以在插入语句中指定分区信息[^2]。例如: ```sql INSERT INTO TABLE HiveTest_1 PARTITION(day='2022-07-22') SELECT activity_id, tocc_name, app_key, page, visit_type FROM s_activity_log; ``` #### 方法三:创建外部并关联数据 创建一个外部(External Table),并将数据存储路径指向已存在的 HDFS 路径。这种方式适合于数据已经存在于 HDFS 中的情况。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS ext_student ( s_id INT, s_name STRING, s_birth DATE, s_sex STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/tmp/hive_test/data/student'; ``` 上述命令创建了一个外部 `ext_student`,并且其数据存储在 HDFS 的 `/tmp/hive_test/data/student` 路径下[^3]。 #### 方法四:解决数据导入后为空的问题 在某些情况下,可能会遇到数据导入后显示为空的问题。这可能是由于 SQL 语句中的逻辑错误导致的。例如,多个通过 `UNION ALL` 合并时,可能存在冲突或不匹配的数据[^5]。因此,在执行复杂查询之前,建议先验证每个子查询的结果是否正确。 另外,确保 Hive 配置参数设置正确,例如动态分区模式执行引擎配置[^4]: ```sql SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; SET hive.execution.engine=tez; ``` #### 示例代码 以下是一个完整的示例,展示如何从本地文件导入数据Hive中: ```sql -- 创建目标 CREATE TABLE test_user ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; -- 导入本地文件数据 LOAD DATA LOCAL INPATH '/root/t_user.txt' INTO TABLE test_user; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值