hive学习笔记第三部分

来源:互联网 发布:淘宝店铺怎么设置运费 编辑:程序博客网 时间:2024/06/07 10:13

五、数据操作

1、向表中装载数据

新关键字overwrite会转移数据的存储路劲,并且会覆盖原来表中的数据。

LOAD DATA LOCAL INPATH '/file/path'OVERWRITE INTO TABLE testPARTITION (country='CN',state='bj');

如果分区目录不存在,上述命令会创建分区再拷贝数据。如果非目标分区,则可以省略partition子句。

LOCAL关键字存在的话,应该使用本地文件系统路径,省略此关键字,则路径为分布式文件系统路径(要求源文件和目标文件在同一个集群当中)。

2、通过查询向表中插入数据

INSERT OVERWRITE TABLE test01PARTITION(country='CN',state='bj')SELECT * FROM test WHERE test.country='CN' AND test.state='bj';

OVERWRITE关键字会覆盖之前分区数据,若替换为INTO关键字,则为附加的方式添加数据。

3、查询方式建表

常用语在一张大表中选取部分需要的数据集。
CREATE TABLE test
AS SELECT country,state
FROM test01
WHERE test01.state=’bj’;

4、导出数据

#数据文件格式不需要修改的方式hadoop fs -cp source_path target_path#更通用方式INSERT OVERWRITE LOCAL DIRECTORY '/tmp/test'SELECT name,country,stateFROM testWHERE test.state='bj';

关键字OVERWRITE和LOCAL的用法与前面一致。

hive会将所有的表内字段序列化成字符串写入到文件中,采用和内部存储的表相同的编码方式生成输出文件。

5、HiveQL语句

HiveQL语句与SQL语句大同小异,提供了众多的函数可以供开发人员选择,在具体的业务需求下,可以根据SQL的编写基础,能够很顺利的写出HiveQL。

6、Hive视图

Hive视图的创建语法以及使用规则和传统关系型数据库的使用方法也相当类似。

CREATE VIEW test_view ASSELECT * FROM test JOIN test01ON (tets01.name = test.name)WHERE country='CN';

- 使用视图可以过滤基于条件限制的数据。在原来的表上通过建立的视图的方式达到过滤数据的目的。
- 查询过程中Hive会先解析视图,然后使用解析结果再来解析整个查询语句。
- 删除视图

    DROP VIEW IF EXISTS test;删除视图的方式和删除表的方式比较类似,如果不存在视图,也没有添加关键字`IF EXISTS`删除操作会报错。

- 不能通过删除table的方式删除建立在table之上的视图。删除table后,进行视图查询会报错。
- 视图具有只读属性,对于视图智能改变元数据的TBLPROPERTIES属性信息。

    ALTER VIEW test SET TBLPROPERTIES('created_at'='times')

7、索引

CREATE INDEX test_index ON TABLE test(country)AS 'org.apache.hadoop.hive.ql.index.conpact.CompactIndexHandel'WITH DEFERRED REBUILDIDXPROPERTIES('creator'='me','created_at'='times')IN TABLE test_index_tablePARTITIONED BY (country,state)COMMENT 'message';

AS…语句指定索引处理器,其是一个实现了索引接口的Java类。也可以通过第三方的实现来最优化的处理特定的场景。

IN TABLE…语句将索引数据保存在一张新表中

  • 重建索引
    当创建索引时指定关键字DEFERRED REBUILD,则新索引将呈现空白状态。
    ALTER INDEX test_index
    ON TABLE test
    PARTITION (country=’CN’)
    REBUILD;
    如果省略partition关键字,那么将会对多有分区进行重建索引。

  • 显示缩影

    SHOW FORMATTED INDEX ON test;
  • 删除索引

    DROP INDEX IF EXISTS test_index ON TABLE test;

    如果索引的表被删除了,那么对应的索引和索引表也会被删除。同样,如果原始表的分区被删除了,那么对应分区的分区索引也会被删除。

0 0
原创粉丝点击