Hive语法简述(基础部分)

本文详述了Hive的各种操作,包括创建表(管理表和外部表)、分区表的设置与修改、自定义存储格式,以及数据装载、查询与插入操作。深入探讨了动态分区插入、JOIN语句、排序与分组方法,为Hive初学者提供了全面的指南。
摘要由CSDN通过智能技术生成

表操作

创建表

CREATE TABLE IF NOT EXISTS mydb.employees (
    name             STRING,
    salary           FLOAT,
    subordinates     ARRAY<STRING> COMMENT '下属名称',
    deductions       MAP<STRING, FLOAT>,
    address          STRUCT<stree:STRING, city:STRING, state:STRING, zip:INT>)
COMMENT 'Description of the table'
TBLPROPERTIES('creater'='me', 'created_at'='2012-01-02 10:00:00',...)
LOCATION '/user/hive/warehouse/mydb.db/employees';

TBLPROPERTIES:增加了额外的说明文档,以key-value形式保存。Hive会自动增加两个表属性,last_modified_by和last_modified_time。
LOCATION :根据情况为表中数据指定一个路径。默认情况下,放在这个表所属的数据库目录之后,default数据库例外,会直接在warehouse目录下

查看表信息:
可以使用DESCRIBE EXTENDED mydb.employees命令来查看表的详细结构信息。
使用FORMATTED关键字代替EXTENDED 关键字的话,可以提供更加详细的的内容。

管理表和外部表

管理表:也称为内部表。默认情况下配置在配置项,hive.metastore.warehouse.dir目录下。当我们删除一个管理表时,也会删除数据。
外部表:删除表时不会删除数据,只会删除元数据信息,利于分享数据。

用户可以通过DESCRIBE EXTENDED tablename查看是哪种表

... tableType:MANAGED_TABLE)     //管理表
... tableType:EXTERNAL_TABLE)     //外部表

分区表

先按照国家(country)分区,在更具州(state)分区:

CREATE TABLE IF NOT EXISTS mydb.employees (
    name             STRING,
    salary           FLOAT,
    subordinates     ARRAY<STRING> COMMENT '下属名称',
    deductions       MAP<STRING, FLOAT>,
    address          STRUCT<stree:STRING, city:STRING, state:STRING, zip:INT>)
PARTITIONED BY (country STRING, state STRING);

Hive会自动根据分区创建目录

...
.../employees/country=CA/state=AB
.../employees/country=US/state=AK
...

设置分区的外部表

外部表童谣是可以使用分区,举例:
第一步:讲分区数据拷贝到指定路径,例如下面将分区数据拷贝到S3中

hadoop distcp /data/log_message/2011/12/02 s3n://ourbucket/logs/2011/12/02

第二部:修改表,改变分区路径指向,例如下面指向S3路径:

ALTER TABLE log_message PARTITION(year = 2011, month = 12, data =2)
SET LOCATION 's3n://ourbucket/logs/2011/12/02';

第三部:使用hadoop fs -rmr命令删除掉HDFS中的这个分区数据:

hadoop fs -rmr /data/log_messages/2011/01/02

修改表分区

修改表分区的操作都不会使得数据本生发生变动,只会改变元数据信息。
增加:

ALTER TABLE log_message ADD IF NOT EXISTS
PARTITION (year = 2011, month = 1, day = 1)    LOCATION '/logs/2011/01/01'
PARTITION (year = 2011, month = 1, day = 2)    LOCATION '/lo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值