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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Hive建表

發布時間:2024/8/26 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 Hive建表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Hive建表語句

(1)創建內部表

(2)創建外部表

drop table yum_area_dw.dw_community_base_info_aoi_clean;
CREATE EXTERNAL TABLE `yum_area_dw.dw_community_base_info_aoi_clean`(
  `id` bigint comment '小區id',
  `community_name` string comment '小區名稱',
  `city_id` bigint comment '城市id')
  comment '表備注'
PARTITIONED BY (
dt string comment '日期分區')
  row format delimited fields terminated by 'u0001' lines terminated by '
'
stored as textfile;

二、數據導入

1、Hive客戶端中將數據導入hive表:根據數據源不同劃分

(1)從本地文件系統中導入數據到hive表中:

load data local inpath"path"[OVERWRITE]into tabletablename;

(2)從HDFS上導入數據到hive表中:

load data inpath"path"[OVERWRITE]into tabletablename;

(3)從別的表查詢出來的數據導入到hive表中:

insertoverwritetabletablename_1 partition()

select....fromtablename_2where......

三、內部表和外部表

1、Hive內部表和外部表區別:主要分為兩方面,數據加載load、刪除表drop。

數據加載:創建內部表時,會將數據移動到hive指向的路徑,并且由hive來管理數據的生命周期。

創建外部表時,只是記錄數據所在的路徑,不對數據位置做改變。

刪除表:刪除內部表,數據和元數據會一起刪除掉。

刪除外部表,只是刪除元數據,數據不會刪除。

四、分區和分桶

1、分區:分區是指按照數據表的某列或某些列分為多個區,區從形式上可以理解為文件夾,比如我們要收集某個大型網站的日志數據,一個網站每天的日志數據存在同一張表上,由于每天會生成大量的日志,導致數據表的內容巨大,在查詢時進行全表掃描耗費的資源非常多。那其實這個情況下,我們可以按照日期對數據表進行分區,不同日期的數據存放在不同的分區,在查詢時只要指定分區字段的值就可以直接從該分區查找,避免全表掃描,可以提高查詢效率。

注意:分區只是添加了一個偽列,這個偽劣使我們人為規定的,只在查詢的時候顯示,實際在表中并不存在這個列。不能按照某個數據表中真實存在的列,如userid來分區。

  分區的目的就是提高查詢效率,查詢分區數據的方式就是指定分區名,指定分區名之后就不再全表掃描,直接從指定分區(如name=jack的分區)中查詢,從hdfs的角度看就是從相應的文件系統中(如name=jack文件夾下)去查找特定的數據

create table dept_partition(deptno  int , dname string,loc string)
partitioned by (month string)
row format delimited fields terminated  by '	';

2、分桶:分桶是相對分區進行更細粒度的劃分。分桶將整個數據內容按照某列屬性值的hash值進行區分,如要按照name屬性分為3個桶,就是對name屬性值的hash值對3取摸,按照取模結果對數據分桶。如取模結果為0的數據記錄存放到一個文件,取模為1的數據存放到一個文件,取模為2的數據存放到一個文件。

注意:分桶的列是表中已存在的列,而不是偽列。分桶的信息在hdfs上看不到相關的文件,但是可以查詢到分桶中的數據,說明確實分桶了。

create table test_bucket (
id int comment 'ID', 
name string comment '名字'
)
comment '測試分桶'
clustered by(id) into 4 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

3、分區和分桶的區別:

(1)分區是指定偽列進行分區,分桶是表格中真實存在的列。

(2)分區信息在hdfs上顯示的是分區文件夾,而分桶在hdfs上看不到,但是查詢分桶數據們可以查詢到。

(3)分桶是數據的更精細的劃分。

4、分桶的使用場景:

(1)當使用分區進行數據劃分的時候,出現有些分區數據過多,而有些分區數據過少的時候,這時候可以采用分桶,對數據進行劃分。

(2)提升Join查詢的效率,若兩個表都在連接的字段上進行了分桶,那么在join的時候可以使用 Map 端連接 (Map-side join)高效的實現。比如Join操作。對于Join操作兩個表有一個相同的列,如果對這兩個表都進行了分桶操作。那么將保存相同列值的桶進行Join操作就可以,可以大大減少Join 數據量。

(3)方便抽樣:使取樣(sampling)更高效。在處理大規模數據集時,在開發和修改查詢的階段,如果能在數據集的一小部分數據上試運行查詢,會帶來很多方便。

總結

以上是生活随笔為你收集整理的Hive建表的全部內容,希望文章能夠幫你解決所遇到的問題。

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