Hive內部表,外部表,分割槽表的建立

2022-06-03 18:54:10 字數 3900 閱讀 9977

--------建立內部表------------

預設儲存在/user/hive/warehouse下 也可以通過location指定

刪除表時,會刪除表資料及元資料

create table if not exists db_study.student(

id string ,

name string

)row format delimited fields terminated by 『\t』 #檔案內容格式與表的格式相同,否則匯入後表的資料是null

location 『/user/wei/hive-table/student』;

#載入本地資料到表中

load data local inpath 『/opt/data/student.table』 into table db_study.student ;

#刪除表,會刪除建立表時指定的目錄,以及目錄下的資料檔案

drop table if exists student ;

---------建立外部表-------------

在建立表時必須指定目錄位置(location)

刪除表時,只刪除元資料不會刪除表資料

create external table if not exists db_study.teacher(

id string,

name string

)row format delimited fields terminated by 『\t』

location 『/user/wei/hive-table/teacher』

#上傳資料檔案到localtion目錄下,hive會把所有的檔案對映到表中

dfs -put /opt/data/teacher.table /user/wei/hive-table/teacher

dfs -put /opt/data/teacher2.table /user/wei/hive-table/teacher

----------建立分割槽表-------------

實際上就是對應乙個hdfs檔案系統上的獨立資料夾,該資料夾下是該分割槽的所有資料檔案

hive中的分割槽就是分目錄,把乙個大的資料集根據業務需要分割成更多的資料集

查詢時通過where子句中的表示式來選擇查詢所需要的指定分割槽,這樣的查詢效率會高很多

create table db_study.class_partition(

id int,

name string

)partitioned by(month string)

row format delimited fields terminated by 『\t』

location 『/user/wei/hive-table/class_partition』

載入表資料

方法一 load 載入

load data local inpath 『/opt/data/class1.table』 into table db_study.class_partition partition(month=『201809』)

select * from class_partition where month=201809 ;

方法二 insert 載入

insert overwrite table name partition(month=『201707』) select id, name from name;

方法三 可通過手動上傳檔案到分割槽目錄,進行載入

hdfs dfs -mkdir /user/hive/warehouse/tb_partition/month=201710

hdfs dfs -put nameinfo.txt /user/hive/warehouse/tb_partition/month=201710

雖然方法三手動上傳檔案到分割槽目錄,但是查詢表的時候是查詢不到資料的,需要更新元資料資訊。

更新源資料的兩種方法

方法一:msck repair table 表名

方法二:alter table tb_partition add partition(month=『201708』);

查詢表資料

select * from default.emp_partition where month = 『201807』 ;

show partitions tb_partition;

-------從已經存在的表選出字段內容組成新的表,分表抽取-------

create table if not exists test_db.user_tmp

row format delimited fields terminated by 『\t』

location 『/user/wei/oozie/datas/table/user_tmp』

as select username from test_db.hive_user

-------複製表結構-------

create table if not exitsts default.teacher03

like default.teacher

-------匯出hive 表的資料---------------

1)匯出查詢資料到本地目錄下

insert overwrite local directory 『/opt/datas/user2.txt』

row format delimited fields terminated by 『/t』 collection items terminated by 『\n』

select * from db_wei.user_pt ;

2)匯出查詢資料到本地目錄下

bin/hive -e 「select * from db_wei.user;」 > /opt/datas/user

3)匯出查詢資料到hdfs

insert overwrite directory 『/user/root』

row format delimited fields terminated by 『/t』 collection items terminated by 『\n』

select * from db_wei.user_pt ;

-------資料庫的操作-------

create database if not exists

show databases;

show databases like 『db_hive』;

use db_hive;

desc database db_hive ;

desc database extended db_hive ;

drop database db_hive;

drop database db_hive cascade ; #級聯刪除,刪除資料庫,刪除下面的表

drop database if exists db_hive;

-------表的操作-------

#清除乙個表的資料

truncate table tablename ;

#對錶進行改名

alter table tablename rename to tablename ;

#刪除表

drop table if exists tablename;

#表詳情

desc formatted tablename

內部表,外部表,分割槽表

1.未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 2.內部表資料由hive自身管理,外部表資料由hdfs管理。3.內部表資料儲存在hive.metastore.warehouse.dir 預設 user hive wa...

Hive 內部表 外部表 分割槽表 擴充套件命令

create external table if not exists 表名 列名資料型別 comment 本列注釋 comment 表注釋 partitioned by 列名資料型別 comment 本列注釋 clustered by 列名,列名,sorted by 列名 asc desc inf...

Hive表分類,內部表 外部表 分割槽表簡介

內部表與資料庫中的table在概念上是類似的,每乙個內部table在hive中都有乙個相應目錄儲存資料,所有的table資料 不包括external table 都儲存在這個目錄中。刪除表時,元資料與資料都會被刪除。在建立表的時候可以指定external關鍵字建立外部表,外部表對應的檔案儲存在loc...