您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Hive數據如何導入導出mysql的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Hive定位:ETL(數據倉庫)工具
將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的工具,如像:kettle
批量插入/批量導入
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.從本地文件導入到表
load data local inpath 'test.txt' into table test;
2.從hdfs導入到表
load data inpath '/home/test/add.txt' into table test;
3.從表查詢中導入到表
insert into table test select id, name, tel from test;
4.將查詢數據導入到多個表
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.建表時導入
create table test4 as select id, name, tel from test;
指定分隔符導出數據
insert overwrite local directory '/home/hadoop/export_hive'
row format delimited
fields terminated by '\t'
select * from test;
刪除/清空
1.刪除table1中不符合條件的數據
insert overwrite table table1
select * from table1 where XXXX;
2.清空表
insert overwrite table t_table1
select * from t_table1 where 1=0;
3.截斷表(注:不能截斷外部表)
truncate table table_name;
4.刪除hdfs對應的表數據達到清空表(表結構依然存在)
hdfs dfs -rmr /user/hive/warehouse/test
注:1和2本質是覆寫表來實現清除數據
delete 與 update
在hive中默認不支持事務,因此默認不支持delete與update,如果需要支持必須在hive-site.xml中配置打開
庫/表/索引/視圖/分區/分桶
列出/創建/修改/刪除/查看信息
1.列出所有數據庫
show databases;
2.創建數據庫
create database test;
3.刪除
drop database test;
處于安全原因,直接drop有數據的數據庫會報錯,此時需要cascade關鍵字忽略報錯刪除
drop database if exists test cascade;
4.查看數據庫信息
describe database test;
列出/創建/修改/刪除/查看信息
1.列出所有表
當前數據庫的所有表
show tables;
指定數據庫的所有表
show tables in db_name;
支持正則
show tables '.*s';
2.創建表
create table test
(id int,
a string
)
ROW FORMAT DELIMITED 行分割
FIELDS TERMINATED BY ‘,’ 字段分隔符
LINES TERMINATED BY ‘\n’ 行分隔符
STORED AS TEXTFILE; 作為文本存儲
創建基于正則切分行字段的表
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.修改
加一個新列
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;
顯示詳細表信息
desc formatted test;
創建索引
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只支持邏輯視圖,不支持物化視圖
?增加視圖
?如果沒有提供表名,視圖列的名字將由定義的SELECT表達式自動生成
?如果修改基本表的屬性,視圖中不會體現,無效查詢將會失敗
?視圖是只讀的,不能用LOAD/INSERT/ALTER
?刪除視圖 DROP VIEW view_name
列出/創建/修改/刪除
1.列出一個表的所有分區
show partitions test;
2.創建分區表
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.對現有表添加分區
ALTER TABLE test ADD IF NOT EXISTS
PARTITION (year = 2017) LOCATION ‘/hiveuser/hive/warehouse/data_zh.db/data_zh/2017.txt’;
4.刪除分區
ALTER TABLE test DROP IF EXISTS PARTITION(year =2017);
5.加載數據到分區表
LOAD DATA INPATH ‘/data/2017.txt’ INTO TABLE test PARTITION(year=2017);
6.未分區表數據導入分區表
insert overwrite table part_table partition (YEAR,MONTH) select * from no_part_table;
7.動態分區指令
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
#set hive.enforce.bucketing = true;
開啟動態分區后導入數據時可以省略指定分區的步驟
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;
對于每一個表(table)或者分區, Hive可以進一步組織成桶,也就是說桶是更為細粒度的數據范圍劃分。Hive也是 針對某一列進行桶的組織。Hive采用對列值哈希,然后除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
把表(或者分區)組織成桶(Bucket)有兩個理由:
(1)獲得更高的查詢處理效率。桶為表加上了額外的結構,Hive 在處理有些查詢時能利用這個結構。具體而言,連接兩個在(包含連接列的)相同列上劃分了桶的表,可以使用 Map 端連接 (Map-side join)高效的實現。比如JOIN操作。對于JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了桶操作。那么將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數據量。
(2)使取樣(sampling)更高效。在處理大規模數據集時,在開發和修改查詢的階段,如果能在數據集的一小部分數據上試運行查詢,會帶來很多方便。
感謝各位的閱讀!關于“Hive數據如何導入導出mysql”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。