zoukankan      html  css  js  c++  java
  • hive一级分区、二级分区、动态分区

    一级分区

    1、hive分区是根据某列的值进行划分,每个分区对应HDFS上的一个目录,以下就是分区表test.table_t在HDFS的存储路径,可以看到有202002和202003两个分区,且分区字段为month。

     2、创建分区表

    1 create table table_name(
    2     no int,name string
    3     )
    4     partitioned by (month string)
    5     row format delimited fields terminated by "	";

     3、增加分区

    1 alter table table_name add partition(month="202004") partition(month="202005");

    4、删除分区

    1 alter table table_name drop partition(month="202006") partition(month="202007");

    5、查看分区表

    1 -- 查看表分区
    2 show partition table_name;
    3 
    4 -- 查看分区表结构
    5 desc format table_name;

    6、数据加载

    1 load data local inpath "/opt/module/datas/data.txt" into table table_name partition(month="202003");
    2 insert into table table_name partition (month="202003") values(...);

    二级分区

    1、建表语句

    1 create table table_name(
    2     no int,name string
    3     )
    4     partitioned by (month string,day string)
    5     row format delimited fields terminated by "	";

    2、数据加载

     1 -- 从外部存储系统正常加载数据
     2 load data local inpath "/opt/module/datas/data.txt" into table table_name partition(month="202003",day="02");
     3 
     4 -- 上传到HDFS后恢复
     5 hive (default) > dfs -mkdir -p /user/hive/warehouse/table_name/month=202003/day=02;
     6 hive (default) > dfs -put /opt/module/datas/data.txt /user/hive/warehouse/table_name/month=202003/day=02;
     7 hive (default) > msck repair table table_name;
     8 
     9 -- 上传数据到HDFS后添加分区
    10 hive (default) > dfs -mkdir -p /user/hive/warehouse/table_name/month=202003/day=02;
    11 hive (default) > dfs -put /opt/module/datas/data.txt /user/hive/warehouse/table_name/month=202003/day=02;
    12 hive (default) > alter table table_name add partition(month="202003",day="03");
    13 
    14 -- 上传数据到HDFS后load数据到分区
    15 hive (default) > dfs -mkdir -p /user/hive/warehouse/table_name/month=202003/day=02;
    16 hive (defalut) > load data local inpath "/opt/module/datas/data.txt" in to table table_name partition(month="202003",day="03");

    动态分区

    1、动态分区所需属性

    set hive.exec.dynamic.partition=true; --开启动态分区,必须参数
    set hive.exec.dynamic.partition.mode=nonstrict(默认static); --允许所有分区都是动态的,否则必须有静态分区字段,必须参数
    set hive.exec.max.dynamic.partitions.pernode=100; --(默认100,一般可以设置大一点,表示每个mapper或reducer可以创建的最大动态分区数)
    set hive.exec.max.dynamic.partitions=1000;--(默认值,表示每一个动态分区语句创建的最大动态分区数)

    2、创建一个单分区表

    1 create table table_name(id int,name string) partition by (city string);

    3、数据加载

     1 -- 装载数据并动态以city建立分区
     2 --因为table_name只有两个字段,所以查询三个字段时,系统默认将最后一个字段city作为分区名,分区字段也默认也是表中的字段,且依次排在表字段最后面,不是按照字段名称推断分区字段。
     3 insert overwrite table table_name partition(city) select id,name,city from src_table;
     4 
     5 -- 多个分区字段(部分静态分区部分动态分区)
     6 create table target_table(id int) partitioned by (state string,city string);
     7 --partition(state="china",city),表示state为静态分区,city为动态分区,以src_table中的city字段为分区名
     8 insert overwrite table target_table partition(state="china",city) select id,city from src_table;
     9 --state和city均使用动态分区
    10 insert overwrite table target_table partition(state,city) select id,state,city from src_table;
  • 相关阅读:
    [武汉集训] Cliquers
    [NOI2017] 泳池
    [NOWCODER7] 小睿睿的方案
    动态dp初探
    [WC2008] 游览计划
    插头dp初探
    最小斯坦纳树初探
    2020ccpc总结
    Finding Palindromes
    最长非严格上升子序列的思考 && CF 1437E Make It Increasing
  • 原文地址:https://www.cnblogs.com/cnblogs-syui/p/12512788.html
Copyright © 2011-2022 走看看