Hive数据如何导入导出mysql

网友投稿 272 2023-12-07

Hive数据如何导入导出mysql

这篇文章给大家分享的是有关Hive数据如何导入导出mysql的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Hive数据如何导入导出mysql

Hive定位:ETL(数据仓库)工具

将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的工具,如像:kettle

DML

批量插入/批量导入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 fromdest1_tableselect src.* where src.id

 < 100

insert into table test select id, name, tel from dest2_table select src.* wheresrc.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 delimitedfields 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中配置打开

DDL

库/表/索引/视图/分区/分桶

数据库

列出/创建/修改/删除/查看信息

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 INTCOMMENT

 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 DELIMITEDFIELDS TERMINATED BY

 ‘,’

LINES TERMINATED BY ‘\n

STORED AS

 TEXTFILE;

3.对现有表添加分区

ALTER TABLE test ADD IF NOT EXISTSPARTITION (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.未分区表数据导入分区表

insertoverwritetable 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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Oracle如何启用FRA和archivelog
下一篇:Redis中如何实现消息队列和延时消息队列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~