时间:2021-07-01 10:21:17 帮助过:25人阅读
本次主要介绍一下 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.
原文地址:ApacheHive一点一点进步(3)–动态分区表操作, 感谢原作者分享。