日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive 外部表关联分区数据

發布時間:2024/8/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;Xizang

2. 創建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上的文件相互關聯起來。
語法格式:

alter table 表名稱 add partition (分區名1=分區值1,...) location '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 外部表关联分区数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。