欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ApacheHive一点一点进步(3)–动态分区表操作

程序员文章站 2022-05-16 15:05:51
...

本次主要介绍一下 hive 中的语法。比如bucket的建立,查询表结果查询表分区。 如何进行动态分区,同时在动态分区的过程中会遇到的问题解决。 以及在删除表及修改表结构的时候的语法,尤其是修改表结构,调整列顺序,这些语法是比较重要的。 BUCKET CREATE TA

本次主要介绍一下hive中的语法。比如bucket的建立,查询表结果查询表分区。

如何进行动态分区,同时在动态分区的过程中会遇到的问题解决。

以及在删除表及修改表结构的时候的语法,尤其是修改表结构,调整列顺序,这些语法是比较重要的。

BUCKET

CREATE TABLE page_view(viewTime INT, userid BIGINT,                    page_url STRING, referrer_url STRING, friends ARRAY, properties MAP,                   ip STRING COMMENT 'IP Address of the User')    COMMENT 'This is the page view table'    PARTITIONED BY(dt STRING, country STRING)    CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS   #按照userid进行hash分组,同时按照viewTime排序ROW FORMAT DELIMITED FIELDS TERMINATED BY '1'    #文件分割使用1进行处理        OLLECTION ITEMS TERMINATED BY '2'    #数组分割使用2        MAP KEYS TERMINATED BY '3'            #map分割使用3STORED AS SEQUENCEFILE;

Browsing table and partitions

 SHOW TABLES; SHOW TABLES 'page.*'; SHOW PARTITIONS page_view; DESCRIBE page_view;    列举出表的列名称,类型,备注 DESCRIBE EXTENDED page_view; 列举出表的列及其他属性 DESCRIBE EXTENDED page_view PARTITION (ds='2008-08-08'); 列举出表的分区属性

动态分区

FROM page_view_stg pvs    INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country)           SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, NULL, NULL, pvs.ip, pvs.country注意的:hive.EXEC.MAX.dynamic.partitions.pernode(DEFAULT VALUE being 100) 每个mapper或者reducer任务最大创建分区个数。hive.EXEC.MAX.dynamic.partitions (DEFAULT VALUE being 1000) 一个DML创建的最大分区数量。hive.EXEC.MAX.created.files (DEFAULT VALUE being 100000) 创建的最大文件数量。SET hive.EXEC.dynamic.partition.mode=nonstrict;SET hive.EXEC.dynamic.partition=TRUE;

删除表或者分区

DROP TABLE pv_users;ALTER TABLE pv_users DROP PARTITION (ds='2008-08-08');

修改表

ALTER TABLE old_table_name RENAME TO new_table_name;ALTER TABLE old_table_name REPLACE COLUMNS (col1 TYPE, ...);ALTER TABLE tab1 ADD COLUMNS (c1 INT COMMENT 'a new int column', c2 STRING DEFAULT 'def val');CREATE TABLE test_change (a INT, b INT, c INT);ALTER TABLE test_change CHANGE a a1 INT; 将 a 列的名字改为 a1.ALTER TABLE test_change CHANGE a a1 STRING AFTER b; 将 a 列的名字改为 a1,a 列的数据类型改为 string,并将它放置在列 b 之后。新的表结构为: b INT, a1 string, c INT.ALTER TABLE test_change CHANGE b b1 INT FIRST; 会将 b 列的名字修改为 b1, 并将它放在第一列。新表的结构为: b1 INT, a string, c INT.