一、實戰(zhàn)概述
-
本實戰(zhàn)教程通過一系列Hive SQL操作,演示了如何在大數(shù)據(jù)環(huán)境下創(chuàng)建具有省市分區(qū)的大學(xué)表,并從本地文件系統(tǒng)加載不同地區(qū)的學(xué)校數(shù)據(jù)到對應(yīng)分區(qū)。首先,創(chuàng)建名為
school
的數(shù)據(jù)庫并切換至該數(shù)據(jù)庫;接著,在數(shù)據(jù)庫中定義一個名為university
的分區(qū)表,其結(jié)構(gòu)包括ID和名稱兩列,并按照省份和城市進行物理分區(qū)。隨后,在本地創(chuàng)建多個包含各省市區(qū)學(xué)校數(shù)據(jù)的文本文件。 -
在完成數(shù)據(jù)文件準(zhǔn)備后,依次將各地區(qū)學(xué)校數(shù)據(jù)文件按省市分區(qū)加載到
university
表中,利用LOAD DATA LOCAL INPATH
語句實現(xiàn)數(shù)據(jù)高效地從本地導(dǎo)入到Hadoop分布式文件系統(tǒng)(HDFS)中的相應(yīng)分區(qū)目錄下。 -
最后,通過執(zhí)行SQL查詢語句驗證數(shù)據(jù)加載的正確性,查看全表記錄以及特定省份的所有記錄,并通過HDFS命令行工具檢查分區(qū)表對應(yīng)的目錄及文件。此外,還展示了如何在MySQL中查看Hive元數(shù)據(jù)信息,進一步理解Hive中分區(qū)表的實際存儲結(jié)構(gòu)和組織方式。整個實戰(zhàn)過程旨在幫助用戶掌握基于Hive的大規(guī)模數(shù)據(jù)管理和分區(qū)表應(yīng)用技巧。
二、實戰(zhàn)步驟
(一)創(chuàng)建學(xué)校數(shù)據(jù)庫
- 執(zhí)行語句:
create database school;
- 執(zhí)行語句:
use school;
,切換到school
數(shù)據(jù)庫
(二)創(chuàng)建省市分區(qū)的大學(xué)表
- 執(zhí)行語句:
CREATE TABLE university (id INT, name STRING) PARTITIONED BY (province STRING, city STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
- 該SQL語句用于在支持分區(qū)功能的數(shù)據(jù)庫系統(tǒng)(如Hive、Impala等基于Hadoop的數(shù)據(jù)倉庫)中創(chuàng)建一個名為
university
的表,并且定義了表的結(jié)構(gòu)以及分區(qū)方案。不過,值得注意的是,標(biāo)準(zhǔn)的SQL語法并不直接支持PARTITIONED BY
這樣的關(guān)鍵字,這是大數(shù)據(jù)處理框架為了解決大規(guī)模數(shù)據(jù)存儲和查詢優(yōu)化而擴展的語法。
CREATE TABLE university (
id INT,
name STRING
)
- 這部分定義了一個新表
university
,它有兩個列:-
id
列是整數(shù)類型(INT)。 -
name
列是字符串類型(STRING)。
-
PARTITIONED BY (province STRING, city STRING)
- 這部分指定了表的分區(qū)鍵。這意味著表中的數(shù)據(jù)會按照
province
和city
這兩個字段的值進行物理劃分。每個分區(qū)對應(yīng)一組特定省份和城市的記錄集合。這樣做可以提高針對特定省份或城市數(shù)據(jù)的查詢性能,因為只需要掃描相關(guān)的數(shù)據(jù)分區(qū)即可,而不是整個表。
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
-
這部分定義了表數(shù)據(jù)的格式:
-
ROW FORMAT DELIMITED
表示每一行數(shù)據(jù)都是以某種分隔符結(jié)束的。 -
FIELDS TERMINATED BY ' '
說明各個字段之間用空格字符作為分隔符。
-
-
總結(jié)起來,這條SQL語句是在創(chuàng)建一個具有ID和名稱兩列的
university
表,并按照省份和城市進行了分區(qū),且表中數(shù)據(jù)是以空格分隔的文本格式存儲。這非常適合于處理大型、半結(jié)構(gòu)化的日志文件或者需要按地理位置快速檢索的大數(shù)據(jù)場景。
(三)在本地創(chuàng)建數(shù)據(jù)文件
1、創(chuàng)建四川成都學(xué)校數(shù)據(jù)文件
- 在master虛擬機上創(chuàng)建
sc_cd_schools.txt
文件
2、創(chuàng)建四川瀘州學(xué)校數(shù)據(jù)文件
- 在master虛擬機上創(chuàng)建
sc_lz_schools.txt
文件
3、創(chuàng)建江蘇南京學(xué)校數(shù)據(jù)文件
- 在master虛擬機上創(chuàng)建
js_nj_schools.txt
文件
4、創(chuàng)建江蘇蘇州學(xué)校數(shù)據(jù)文件
- 在master虛擬機上創(chuàng)建
js_sz_schools.txt
文件
(四)按省市分區(qū)加載學(xué)校數(shù)據(jù)
1、加載四川成都學(xué)校數(shù)據(jù)文件到四川成都分區(qū)
-
加載
sc_cd_schools.txt
到分區(qū)(province='sc', city='cd'
) -
執(zhí)行語句:
LOAD DATA LOCAL INPATH '/root/sc_cd_schools.txt' OVERWRITE INTO TABLE university PARTITION (province='sc', city='cd');
-
這段SQL語句是在大數(shù)據(jù)處理框架如Hive或Impala中使用的,用于從本地文件系統(tǒng)加載數(shù)據(jù)到已存在的分區(qū)表
university
中,并且會覆蓋目標(biāo)分區(qū)已有的數(shù)據(jù)。-
LOAD DATA LOCAL INPATH '/root/sc_cd_schools.txt'
: 這部分指定要加載的數(shù)據(jù)文件路徑。其中LOCAL
關(guān)鍵字表示數(shù)據(jù)文件位于客戶端(即運行該命令的機器)本地文件系統(tǒng)中的/root/sc_cd_schools.txt
路徑下。 -
OVERWRITE INTO TABLE university
:OVERWRITE
表示如果目標(biāo)表或者目標(biāo)分區(qū)已有數(shù)據(jù),則先刪除原有數(shù)據(jù)再進行加載;INTO TABLE university
指定了將數(shù)據(jù)加載到名為university
的表中。 -
PARTITION (province='sc', city='cd')
: 由于university
表是分區(qū)表,這里指定了要加載數(shù)據(jù)到的具體分區(qū),即province
字段為'sc'
(四川省的縮寫)和city
字段為'cd'
(成都市的縮寫)。這意味著數(shù)據(jù)將會被加載到代表四川省成都市的分區(qū)里。
-
-
總結(jié):該SQL語句的作用是從本地文件系統(tǒng)中讀取
/root/sc_cd_schools.txt
文件中的數(shù)據(jù),然后將其作為四川省成都市分區(qū)的數(shù)據(jù),以覆蓋的方式加載到名為university
的分區(qū)表中。
2、加載四川瀘州學(xué)校數(shù)據(jù)文件到四川瀘州分區(qū)
-
加載
sc_lz_schools.txt
到分區(qū)(province='sc', city='lz'
)文章來源:http://www.zghlxwxcb.cn/news/detail-791948.html -
執(zhí)行語句:
LOAD DATA LOCAL INPATH '/root/sc_lz_schools.txt' OVERWRITE INTO TABLE university PARTITION (province='sc', city='lz');
文章來源地址http://www.zghlxwxcb.cn/news/detail-791948.html
3、加載江蘇南京學(xué)校數(shù)據(jù)文件到江蘇南京分區(qū)
- 加載
js_nj_schools.txt
到分區(qū)(province='js', city='nj'
) - 執(zhí)行語句:
LOAD DATA LOCAL INPATH '/root/js_nj_schools.txt' OVERWRITE INTO TABLE university PARTITION (province='js', city='nj');
4、加載江蘇蘇州學(xué)校數(shù)據(jù)文件到江蘇蘇州分區(qū)
- 加載
js_sz_schools.txt
到分區(qū)(province='js', city='sz'
) - 執(zhí)行語句:
LOAD DATA LOCAL INPATH '/root/js_sz_schools.txt' OVERWRITE INTO TABLE university PARTITION (province='js', city='sz');
(五)查看大學(xué)分區(qū)表記錄
1、查看全部記錄
- 執(zhí)行語句:
SELECT * FROM university;
2、查看江蘇分區(qū)記錄
- 執(zhí)行語句:
SELECT * FROM university WHERE province = 'js';
(六)查看大學(xué)分區(qū)表對應(yīng)的目錄及文件
- 執(zhí)行命令:
hdfs dfs -ls -R /user/hive/warehouse/school.db
(七)在MySQL里查看Hive元數(shù)據(jù)(分區(qū)信息)
1、登錄MySQL Hive Metastore數(shù)據(jù)庫
- 執(zhí)行命令:
mysql -uroot -p903213
,登錄MySQL,然后執(zhí)行use hive;
,打開hive元數(shù)據(jù)庫
2、 查看university表分區(qū)元數(shù)據(jù)信息
- 執(zhí)行語句:
SELECT * FROM COLUMNS_V2;
,university分區(qū)表的CD_ID值是33
- 執(zhí)行語句:
SELECT SD_ID, CD_ID, LOCATION FROM SDS WHERE CD_ID = 33;
三、實戰(zhàn)總結(jié)
- 本實戰(zhàn)演練通過創(chuàng)建分區(qū)表
university
,并按省市劃分加載本地學(xué)校數(shù)據(jù)文件至Hive,展示了大數(shù)據(jù)環(huán)境下高效的數(shù)據(jù)管理與查詢方法。利用分區(qū)技術(shù)優(yōu)化存儲與查詢性能,并通過SQL驗證數(shù)據(jù)加載正確性及查看分區(qū)信息,實現(xiàn)了對大規(guī)模教育數(shù)據(jù)的組織和分析。
四、課后練習(xí)
- 根據(jù)實戰(zhàn)教程中的步驟,自行創(chuàng)建一個以國家和城市為分區(qū)鍵的公司信息表(如
company
),包含字段:id(整數(shù)類型)、name(字符串類型)和address(字符串類型)。然后,在本地創(chuàng)建不同國家城市公司的數(shù)據(jù)文件,并將這些數(shù)據(jù)按各自對應(yīng)的國家和城市分區(qū)加載到Hive表中。最后,通過SQL查詢驗證數(shù)據(jù)加載完整性與正確性。
到了這里,關(guān)于Hive分區(qū)表實戰(zhàn) - 多分區(qū)字段的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!