您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Hive數(shù)據(jù)如何導(dǎo)入導(dǎo)出mysql的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
Hive定位:ETL(數(shù)據(jù)倉(cāng)庫(kù))工具
將數(shù)據(jù)從來(lái)源端經(jīng)過(guò)抽?。╡xtract)、轉(zhuǎn)換(transform)、加載(load)至目的端的工具,如像:kettle
批量插入/批量導(dǎo)入
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
注:filepath可以是hdfs路徑或者是S3路徑,如hdfs://namenode:9000/user/hive/project/data1
1.從本地文件導(dǎo)入到表
load data local inpath 'test.txt' into table test;
2.從hdfs導(dǎo)入到表
load data inpath '/home/test/add.txt' into table test;
3.從表查詢中導(dǎo)入到表
insert into table test select id, name, tel from test;
4.將查詢數(shù)據(jù)導(dǎo)入到多個(gè)表
from source_table
insert into table test select id, name, tel from dest1_table select src.* where src.id < 100
insert into table test select id, name, tel from dest2_table select src.* where src.id < 100
insert into table test select id, name, tel from dest3_table select src.* where src.id < 100;
5.建表時(shí)導(dǎo)入
create table test4 as select id, name, tel from test;
指定分隔符導(dǎo)出數(shù)據(jù)
insert overwrite local directory '/home/hadoop/export_hive'
row format delimited
fields terminated by '\t'
select * from test;
刪除/清空
1.刪除table1中不符合條件的數(shù)據(jù)
insert overwrite table table1
select * from table1 where XXXX;
2.清空表
insert overwrite table t_table1
select * from t_table1 where 1=0;
3.截?cái)啾恚ㄗⅲ翰荒芙財(cái)嗤獠勘恚?br/>truncate table table_name;
4.刪除hdfs對(duì)應(yīng)的表數(shù)據(jù)達(dá)到清空表(表結(jié)構(gòu)依然存在)
hdfs dfs -rmr /user/hive/warehouse/test
注:1和2本質(zhì)是覆寫表來(lái)實(shí)現(xiàn)清除數(shù)據(jù)
delete 與 update
在hive中默認(rèn)不支持事務(wù),因此默認(rèn)不支持delete與update,如果需要支持必須在hive-site.xml中配置打開(kāi)
庫(kù)/表/索引/視圖/分區(qū)/分桶
列出/創(chuàng)建/修改/刪除/查看信息
1.列出所有數(shù)據(jù)庫(kù)
show databases;
2.創(chuàng)建數(shù)據(jù)庫(kù)
create database test;
3.刪除
drop database test;
處于安全原因,直接drop有數(shù)據(jù)的數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò),此時(shí)需要cascade關(guān)鍵字忽略報(bào)錯(cuò)刪除
drop database if exists test cascade;
4.查看數(shù)據(jù)庫(kù)信息
describe database test;
列出/創(chuàng)建/修改/刪除/查看信息
1.列出所有表
當(dāng)前數(shù)據(jù)庫(kù)的所有表
show tables;
指定數(shù)據(jù)庫(kù)的所有表
show tables in db_name;
支持正則
show tables '.*s';
2.創(chuàng)建表
create table test
(id int,
a string
)
ROW FORMAT DELIMITED 行分割
FIELDS TERMINATED BY ‘,’ 字段分隔符
LINES TERMINATED BY ‘\n’ 行分隔符
STORED AS TEXTFILE; 作為文本存儲(chǔ)
創(chuàng)建基于正則切分行字段的表
add jar ../build/contrib/hive_contrib.jar;
CREATE TABLE apachelog (
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|//[[^//]]*//]) ([^ /"]*|/"[^/"]*/") (-|[0-9]*) (-|[0-9]*)(?: ([^ /"]*|/"[^/"]*/") ([^ /"]*|/"[^/"]*/"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;
3.修改
加一個(gè)新列
ALTER TABLE test ADD COLUMNS (new_col2 INT COMMENT 'a comment');
改表名
ALTER TABLE old_name RENAME TO new_name;
4.刪除
drop table test;
5.查看信息
顯示列信息
desc test;
顯示詳細(xì)表信息
desc formatted test;
創(chuàng)建索引
CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS 'index.handler.class.name'
如:DROP INDEX index_name ON table_name
重建索引
ALTER INDEX index_name ON table_name [PARTITION (...)] REBUILD
如:alter index index1_index_test on index_test rebuild;
刪除索引
DROP INDEX index_name ON table_name
列出索引
show index on index_test;
CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], ...) ][COMMENT view_comment][TBLPROPERTIES (property_name = property_value, ...)] AS SELECT
注:hive只支持邏輯視圖,不支持物化視圖
?增加視圖
?如果沒(méi)有提供表名,視圖列的名字將由定義的SELECT表達(dá)式自動(dòng)生成
?如果修改基本表的屬性,視圖中不會(huì)體現(xiàn),無(wú)效查詢將會(huì)失敗
?視圖是只讀的,不能用LOAD/INSERT/ALTER
?刪除視圖 DROP VIEW view_name
列出/創(chuàng)建/修改/刪除
1.列出一個(gè)表的所有分區(qū)
show partitions test;
2.創(chuàng)建分區(qū)表
create table test
(id int,
a string,
)
partitioned by (b string,c int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n’
STORED AS TEXTFILE;
3.對(duì)現(xiàn)有表添加分區(qū)
ALTER TABLE test ADD IF NOT EXISTS
PARTITION (year = 2017) LOCATION ‘/hiveuser/hive/warehouse/data_zh.db/data_zh/2017.txt’;
4.刪除分區(qū)
ALTER TABLE test DROP IF EXISTS PARTITION(year =2017);
5.加載數(shù)據(jù)到分區(qū)表
LOAD DATA INPATH ‘/data/2017.txt’ INTO TABLE test PARTITION(year=2017);
6.未分區(qū)表數(shù)據(jù)導(dǎo)入分區(qū)表
insert overwrite table part_table partition (YEAR,MONTH) select * from no_part_table;
7.動(dòng)態(tài)分區(qū)指令
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
#set hive.enforce.bucketing = true;
開(kāi)啟動(dòng)態(tài)分區(qū)后導(dǎo)入數(shù)據(jù)時(shí)可以省略指定分區(qū)的步驟
LOAD DATA INPATH ‘/data/2017.txt’ INTO TABLE test PARTITION(year);
CREATE TABLE bucketed_user (id INT) name STRING)
CLUSTERED BY (id) INTO 4 BUCKETS;
對(duì)于每一個(gè)表(table)或者分區(qū), Hive可以進(jìn)一步組織成桶,也就是說(shuō)桶是更為細(xì)粒度的數(shù)據(jù)范圍劃分。Hive也是 針對(duì)某一列進(jìn)行桶的組織。Hive采用對(duì)列值哈希,然后除以桶的個(gè)數(shù)求余的方式?jīng)Q定該條記錄存放在哪個(gè)桶當(dāng)中。
把表(或者分區(qū))組織成桶(Bucket)有兩個(gè)理由:
(1)獲得更高的查詢處理效率。桶為表加上了額外的結(jié)構(gòu),Hive 在處理有些查詢時(shí)能利用這個(gè)結(jié)構(gòu)。具體而言,連接兩個(gè)在(包含連接列的)相同列上劃分了桶的表,可以使用 Map 端連接 (Map-side join)高效的實(shí)現(xiàn)。比如JOIN操作。對(duì)于JOIN操作兩個(gè)表有一個(gè)相同的列,如果對(duì)這兩個(gè)表都進(jìn)行了桶操作。那么將保存相同列值的桶進(jìn)行JOIN操作就可以,可以大大較少JOIN的數(shù)據(jù)量。
(2)使取樣(sampling)更高效。在處理大規(guī)模數(shù)據(jù)集時(shí),在開(kāi)發(fā)和修改查詢的階段,如果能在數(shù)據(jù)集的一小部分?jǐn)?shù)據(jù)上試運(yùn)行查詢,會(huì)帶來(lái)很多方便。
感謝各位的閱讀!關(guān)于“Hive數(shù)據(jù)如何導(dǎo)入導(dǎo)出mysql”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。