Hive 外部表关联分区数据
生活随笔
收集整理的這篇文章主要介紹了
Hive 外部表关联分区数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0. 說明
已經安裝好Hadoop和hive環境,hive把元數據存儲在mysql數據庫。這里僅討論外部表和HDFS的關聯,并且刪掉外部表之后,對HDFS上的文件沒有影響。
1. 在HDFS創建分區,并存有文件
手工創建或者由程序在HDFS上生成了分區目錄,每個分區目錄下有相應的文件。本例中根據day分了兩個分區,如下所示:
/test/in/day=20/20.txt /test/in/day=21/21.txt文件里面的內容格式如下:
2;Lily;1991;Shanghai 3;Jack;1992;Guangxi 4;Jenny;1999;Xinjiang 5;Jay;1995;Xizang 6;Tom;1990;Beijing 7;Lily;1991;Shanghai 8;Jack;1992;Guangxi 9;Jenny;1999;Xinjiang 10;Jay;1995;Xizang2. 創建hive外部表(建表語句沒有用location直接關聯HDFS文件)
根據HDFS上的源文件里面的數據格式,創建hive外部表。
hive> create external table t3 (seq int,name string,year int, city string)> partitioned by (day int)> row format delimited> fields terminated by '\073'> stored as textfile; OK Time taken: 0.207 seconds源文件里面列之間的分隔符是分號,hive里面分號是特殊符號(命令執行結束符),如果建表語句里面用分號則會出錯,使用分號的ascii碼'\073'(這里用了八進制碼)則正常。
查看t3的表結構:
hive> desc t3; OK seq int name string year int city string day int# Partition Information # col_name data_type comment day int Time taken: 0.079 seconds, Fetched: 10 row(s)表格已經成功創建。
3.關聯HDFS文件
hive并不會自動關聯hdfs中指定目錄的partitions目錄,需要手工操作。
通過給已經創建的表增加分區數據的方式,與HDFS上的文件相互關聯起來。
語法格式:
關聯day=20的分區:
hive> alter table t3 add partition (day=20) location '/test/in/day=20/20.txt'; OK關聯day=21的分區:
hive> alter table t3 add partition (day=21) location '/test/in/day=21/21.txt'; OK執行下面命令,查看表格可以發現數據已經導入。
hive> select * from t3;4.之后HDFS分區添加新文件,hive會自動關聯
如果這個時候往HDFS上面的分區增加一個文件(符合t3表格式),hive表也可以自動讀取到并添加數據。
如新建一個文件b.txt,內容是:1101;JayFEF;2095;BBBB
上傳到HDFS的day=21分區:
hadoop fs -put /jaydisk/b.txt /test/in/day=21直接查看表格,可以看到新的數據也已經添加進去。
hive> select * from t3; OK 2 Lily 1991 Shanghai 20 3 Jack 1992 Guangxi 20 4 Jenny 1999 Xinjiang 20 5 Jay 1995 Xizang 20 6 Tom 1990 Beijing 20 7 Lily 1991 Shanghai 20 8 Jack 1992 Guangxi 20 9 Jenny 1999 Xinjiang 20 10 Jay 1995 Xizang 20 1101 JayFEF 2095 BBBB 21 Time taken: 1.549 seconds, Fetched: 19 row(s)5. 內部表和外部表相互轉化
可以通過如下語句轉換外部表和內部表
alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='TRUE'); //內部表轉外部表alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='FALSE'); //外部表轉內部表6. 建外部表時指定HDFS路徑(建表語句沒有用location直接關聯HDFS文件)
6.1 建表
create external table t1 (seq int,name string,year int, city string) partitioned by (day int) row format delimited fields terminated by '\073' stored as textfile location '/test/in';6.2 添加分區day=20
alter table t1 add partition (day=20);6.3 查看成功
hive> select * from t1; OK 2 Lily 1991 Shanghai 20 3 Jack 1992 Guangxi 20 4 Jenny 1999 Xinjiang 20 5 Jay 1995 Xizang 20 6 Tom 1990 Beijing 20 7 Lily 1991 Shanghai 20 8 Jack 1992 Guangxi 20 9 Jenny 1999 Xinjiang 20 10 Jay 1995 Xizang 20 Time taken: 0.108 seconds, Fetched: 9 row(s)總結
以上是生活随笔為你收集整理的Hive 外部表关联分区数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ros(7)自定义service数据
- 下一篇: F5 BIGip 负载均衡 IP算法解密