hive建库建表与数据导入导出

本文介绍了Hive中创建内外部表的区别、建表语句示例、索引的使用方法、事务支持及数据导入导出的方式。同时,还详细说明了如何更新与删除Hive表中的数据。

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

hive建表:
hive分内部表与外部表,创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 

创建数据库:

<span style="font-size:18px;">hive> CREATE DATABASE [IF NOT EXISTS] mydb;
hive> CREATE SCHEMA mydb
hive> use mydb</span>

创建表:

<pre name="code" class="plain"><span style="font-size:18px;">hive> create EXTERNAL table IF NOT EXISTS tb(...//外部表
hive> CREATE TABLE table (...//内部表</span>


建表语句示例:

<span style="font-size:18px;">hive> create table customers (id string, name string, email string, street_address string, company string) 
> ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
> with SERDEPROPERTIES ('escape.delim'='\\', 'field.delim'=',', 'serialization.format'=',');</span>

<span style="font-size:18px;">hive> set hive.enforce.bucketing = true
hive> create table customers (id string, name string, email string, street_address string, company string)
> partitioned by (time string)
> clustered by (id) into 5 buckets stored as orc
> location '/user/bedrock/salescust'
> TBLPROPERTIES ('transactional'='true');</span>

Hive可以通过在指定列上建立索引来提高查询速度,可以建立压缩索引与位图索引二种类型的索引,
索引数据保存在另外的表中,可以自定义索引表名也可以取默认值,索引表的基本包含几列:
1. 源表的索引列;
2. _bucketname hdfs中文件地址 
3. 索引列在hdfs文件中的偏移量。
原理是通过记录索引列在HDFS中的偏移量,精准获取数据,避免全表扫描

<span style="font-size:18px;">hive> create index customer_index on table customers(id)
> as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
> in table customer_index_table

hive> create index customer_index on table customers(id)
> as 'org.apache.hadoop.hive.ql.index.bitmap.BitmapIndexHandler' with deferred rebuild stored as rcfile 

hive> alter index customer_index on customers rebuild;//填充索引数据
hive> alter index customer_index on customers partition(columnx='', columny='') rebuild;//在分区上重建索引
hive> show formatted index on customers;
hive> desc customer_index;//查看索引表结构
hive> select * from customer_index_table limit 10; 
hive> drop index customer_index_table on customers;</span>

<span style="font-size:18px;">为了确保Hive能够有效处理事务数据,以下设置要求在Hive配置中进行:</span>
<span style="font-size:18px;">hive> hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</span>

Hive表更新与删除数据(表必须开启事务属性才支持update与delete):

<span style="font-size:18px;">hive> delete from customer_index where id=1;
hive> truncate table customer_index;</span>


Hive数据导入方式:

a.从本地文件系统导入
<span style="font-size:18px;">hive> load data local inpath '/usr/local/hive/customers.info' (overwrite) into table customers;</span>

SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中


b.从HDFS导入
<span style="font-size:18px;">hive> load data inpath '/hive/customers.info' (overwrite) into table customers;</span>

c.从其它表中查询数据导入

<span style="font-size:18px;">hive> insert into table customers select * from customers_tmp;</span>

d.在创建表时导入

<span style="font-size:18px;">hive> create table customers as select * from customers_tmp;</span>

复制表但不导入数据:
<span style="font-size:18px;">hive> CREATE TABLE customers LIKE customers_tmp;</span>

数据导出:
导出到本地文件系统:
<span style="font-size:18px;">hive> insert overwrite local directory '/usr/local/hive/customers.info' select * from customers;</span>

导出到hdfs:
<span style="font-size:18px;">hive> insert overwrite directory '/hive/customers.info' select * from customers;</span>


实验介绍 1.本次实训是基于汽车数据的大数据分析。 2.数据分析包括数据清洗,数据分析。 3.数据分析使用的是hadoop组件-hive,包括,导入数据数据分析等。 4.该实训是一个较完整的分析项目,提升学生的项目能力。 步骤1: 数据采集 将数据(carsData.txt)文件上传到Linux文件系统的/home/hive目录下。 在HDFS的根目录创/carProject/input两级目录(注意:在HDFS上创文件一定要先把hadoop集群启动) 然后利用-put命令,将数据从Linux文件系统上传至HDFS分布式文件系统的/carProject/input中。 利用-ls 命令查看是否将数据集上传到/carProject/input目录中。 步骤2:数据清洗 本次只进行简单数据清洗,数据清洗包括两方面操作: 将脏数据清除掉,比如缺失的字段数据等。 数据集共有39个字段,但是我们的4个分析只用到了其中的7个字段,因此从39个字段的数据中把用到的7个字段筛选出来。 清洗的方式是使用mapreduce进行数据清洗。只有mapper阶段,没有reducer阶段。 3. 执行完数据清洗后,查看清洗之后剩余多少数据。 步骤3:数据导入到hive 1. 进入到hive中 2. 在hive,创名为car的数据,然后进入到car数据中: 3. 创名为car_datas的 4. 结束,然后将刚才清洗好的数据,也就是part-r-00000文件中的数据加载到hive中, 5. 加载完毕后,查看一下数据是否加载成功(查看car_data中的前10条数据): 步骤4:使用hive进行数据分析 1.统计非营运车辆销售数量(使用性质) 2.山西省2013年每个月的汽车销售数量(月份,数量,省,年份) 3.买车的男的对车的品牌的选择(性别,品牌) 4.统计五菱2013年每月的销售量(品牌,月份)
最新发布
06-28
### Hive数据的语法示例 #### 数据Hive 中,可以通过 `CREATE DATABASE` 或 `CREATE SCHEMA` 命令来创一个新的数据。命令的具体语法如下: ```sql CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION 'directory_path'] [WITH DBPROPERTIES (property_name=property_value, ...)]; ``` - `[IF NOT EXISTS]`: 如果指定名称的数据不存在,则创数据。 - `[COMMENT 'database_comment']`: 可选字段,用于描述该数据的信息。 - `[LOCATION 'directory_path']`: 指定存储数据的位置路径,默认情况下会在 HDFS 的 `/user/hive/warehouse` 下创目录。 - `[WITH DBPROPERTIES (...)]`: 设置数据属性。 例如,下面是一个简单的例子[^3]: ```sql CREATE DATABASE IF NOT EXISTS my_database COMMENT 'This is a test database' LOCATION '/user/hive/my_database'; ``` 此命令将在 HDFS 上创名为 `my_database` 的数据,并附带注释说明以及自定义位置。 要切换到某个特定数据下执行查询或其他操作,可使用 `USE` 子句: ```sql USE my_database; ``` 这使得后续所有的 SQL 查询都作用于当前选定的数据中。 #### Hive 支持多种类型的格结构,包括内部(Managed Table)、外部(External Table),还有临时(Temporary Table)等。 ##### 内部(Managed Table) 这是最常用的形式之一,在删除此类时其元数据和实际的数据都会被清除掉。基本语法为: ```sql CREATE TABLE [IF NOT EXISTS] table_name ( col1 data_type, col2 data_type, ... ) [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type)] [CLUSTERED BY (col_name) INTO num_buckets BUCKETS] [SORTED BY (col_name [ASC|DESC])] [ROW FORMAT DELIMITED FIELDS TERMINATED BY char LINES TERMINATED BY char] [STORED AS file_format]; ``` 举个实例演示如何构一张包含分区信息并采用 ORC 文件格式储存的新[^1]: ```sql CREATE TABLE employees( id INT, name STRING, salary FLOAT, join_date DATE ) COMMENT 'Employee details with partitioning on department.' PARTITIONED BY(department STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS ORC; ``` 上述脚本立了一个员工记录,其中按部门划分了多个分区以便更高效地检索相关联的数据集。 ##### 外部(External Table) 当不想让 Hive 控制底层数据文件生命周期的时候可以选择这种方式。即使移除对应的 Hive 对象也不会影响原始数据源的存在状态。其声明方法几乎相同只是多了前缀关键词 EXTERNAL 而已。 ```sql CREATE EXTERNAL TABLE external_table_name ( column_definitions... ) [LOCATION hdfs_directory_path]; ``` 比如这样设置指向已有 HDFS 地址上的 CSV 文档作为输入资源: ```sql CREATE EXTERNAL TABLE logs_ext ( log_time TIMESTAMP, message STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim'=',') LOCATION '/logs/csv/'; ``` 这里指定了 SerDe 类型处理逗号分割符的情况。 ##### 临时(Temporary Table) 这类特殊用途的只存在于发起它们的那个 session 生命周期期间结束之后就会消失不见再也无法访问到了。通常适用于那些只需要短期存在的中间计算成果或者测试验证场景之中。可通过附加 TEMPORARY 标识位实现快速搭过程[^2]. ```sql -- 方法一:通过列定义直接生成 CREATE TEMPORARY TABLE temp_employee ( emp_id INT, first_name STRING, last_name STRING ); -- 方法二:基于现有复制架构 CREATE TEMPORARY TABLE temp_copy LIKE permanent_table; -- 方法三:利用 SELECT INTO 构造初始内容填充 CREATE TEMPORARY TABLE temp_results AS SELECT * FROM source_data WHERE condition=true; ``` 以上三种途径均展示了不同风格下的临时构造技巧供开发者灵活选用满足各自需求特点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值