美文网首页
2.Hive使用

2.Hive使用

作者: 南宫萧言 | 来源:发表于2019-01-12 15:56 被阅读0次

    1.1Hive SQL

    1.1.1Hive的数据类型

    primitive_type

      array_type        //数组格式

      |map_type        //map格式

      |struct_type      //结构体格式

    primitive_type

     |TINYINT

      |SMALLINT

      |INT

      |BIGINT

      |BOOLEAN

      |FLOAT

      |DOUBLE

      |STRING

    hive比普通的mysql多了三种基本的数据结构,array,map,struct。
    具体使用参考:hive使用手册

    创建表的案例

    hive数据的插入通过使用数据格式化,从hdfs文件中读取,上图后续的代码是格式化读取文件。

    LOAD DATA LOCAL INPUT  ’/root/data' INTO TABLE psn;加载文件给hive数据表。

    1.2Hive分区

    1.2.1内部表和外部表

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)

    区别:

    内部表数据由Hive自身管理,外部表数据由HDFS管理;

    内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;

    删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

    1.2.2分区(加目录)

    Hive 分区partition

    必须在表定义时指定对应的partition字段

    a、单分区建表语句:

    create table day_table (id int, content string) partitioned by (dt string);

    单分区表,按天分区,在表结构中存在id,content,dt三列。以dt为文件夹区分

    b、双分区建表语句:

    create table day_hour_table (id int, content string) partitioned by (dt string, hour string);

    双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。先以dt为文件夹,再以hour子文件夹区分

    添加分区:AlTER TABLE psn2 ADD partition(age=10,sex='boy')

    Hive添加分区表语法

    (表已创建,在此基础上添加分区):

    ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1']partition_spec [LOCATION 'location2'] ...;

    partition_spec:

    : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

    例:ALTER TABLE day_table ADD PARTITION (dt='2008-08-08', hour='08')

    Hive删除分区语法

    ALTER TABLE table_name DROP partition_spec, partition_spec,...partition_spec:

    : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

    用户可以用ALTER TABLE DROP PARTITION 来删除分区。内部表中、对应分区的元数据和数据将被一并删除。

    例:ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08',hour='09');

    Hive向指定分区添加数据语法

    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2...)]

    例:LOAD DATA INPATH '/user/pv.txt' INTOTABLE day_hour_table PARTITION(dt='2008-08- 08', hour='08');

    LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hour partition(dt='2010-07- 07');

    当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录

    Hive查询执行分区语法

    SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

    分区表的意义在于优化查询。查询时尽量利用分区字段。如果不使用分区字段,就会全部扫描。

    Hive查询表的分区信息语法:SHOW PARTITIONS day_hour_table;

    1.2.3加数据(读时检查)

    1.直接上传文件到HDFS目录下,一般为/user/hive/warehouse/数据库名/表名/下。

    2.通过load data加载本地文件到hdfs目录下。

    3.insert into tablename....

    FROM psn3 insert overwrite table psn4 select id,name,likes   作用:复制表,中间表等。

    1.3Hive SerDe

    Hive SerDe - Serializer and Deserializer

    1.SerDe 用于做序列化和反序列化。

    2.构建在数据存储和执行引擎之间,对两者实现解耦。

    3.Hive通过ROW FORMAT DELIMITED以及SERDE进行内容的读写.

    row_format:

    DELIMITED

              [FIELDS TERMINATED BY char [ESCAPEDBY char]]

              [COLLECTION ITEMS TERMINATED BY char]

              [MAP KEYS TERMINATED BY char]

              [LINES TERMINATED BY char]

    |SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

    Hive正则匹配

     CREATE TABLElogtbl (

       host STRING,

       identity STRING,

       t_userSTRING,

       time STRING,

       request STRING,

       refererSTRING,

       agent STRING)

     ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

     WITH SERDEPROPERTIES ( "input.regex"= "([^ ]*) ([^ ]*) ([^ ]*) \\[(.*)\\] \"(.*)\" (-|[0-9]*)

    (-|[0-9]*)" ) STORED AS TEXTFILE;

    1.4Hive Beeline

    Beeline要与HiveServer2配合使用

    服务端启动hiveserver2

    客户的通过beeline两种方式连接到hive:

    1.beeline -u jdbc:hive2://localhost:10000/default -n root

    2.beeline

    beeline>

    !connect jdbc:hive2://<host>:<port>/<db>;auth=noSasl root 123

    默认用户名、密码不验证

    1.5Hive JDBC

    服务端启动hiveserver2后,在java代码中通过调用hive的jdbc访问默认端口10000进行连接、访问。

    jdbc访问hive数据库的java代码

    相关文章

      网友评论

          本文标题:2.Hive使用

          本文链接:https://www.haomeiwen.com/subject/xnefdqtx.html