精华内容
下载资源
问答
  • HADOOP中建了一张分区表,举个简单的例子:比如产品表PRODUCT 其中有个产品代码、产品类别等字段, 按产品类别分区,比如有10个产品类别; 现在根据每个产品类别开发了一个脚本,共10个脚本,目标是往同一张...
  • hadoop hive 分区表load至新表

    千次阅读 2017-04-11 19:37:13
    hadoop hive 分区表load至新表

    hadoop hive 分区表移动

    shell脚本

    ### fct_path_list_history.sh
    #!/bin/sh
    
    . /etc/profile
    . ~/.bash_profile
    
    if [ $# == 2 ]; then
        datebeg=$1
        dateend=$2
    else
        echo "请输入开始时间和结束日期,格式为2017-04-04"
        exit 1
    fi
    
    
    THIS="$0"
    THIS_DIR=`dirname "$THIS"`
    cd ${THIS_DIR}
    
    
    beg_s=`date -d "$datebeg" +%s`
    end_s=`date -d "$dateend" +%s`
    
    echo "处理时间范围:$beg_s$end_s"
    
    while [ "$beg_s" -le "$end_s" ];do
        day=`date -d @$beg_s +"%Y-%m-%d"`;
        echo "当前日期:$day"
        hive -d date=$day -f ./fct_path_list_history.sql
        if test $? -ne 0
        then
        echo "处理失败,日期:$day, 跳过"
        else
        echo "处理成功,日期:$day"
        fi
        beg_s=$((beg_s+86400));
    done
    
    echo "全部处理完成!"

    hive sql

    #### fct_path_list_history.sql
    use dw;
    LOAD DATA INPATH 'hdfs://nameservice1/user/hive/warehouse/dw.db/fct_path_list/date=${date}' OVERWRITE INTO TABLE fct_path_list_history PARTITION (date='${date}');
    

    备份表创建

    use dw;
    CREATE TABLE `fct_path_list_history`(
      `gu_id` string,
      `endtime` bigint,
      `last_entrance_page_id` int,
      `last_guide_page_id` int,
      `last_before_goods_page_id` int,
      `last_entrance_page_value` string,
      `last_guide_page_value` string,
      `last_before_goods_page_value` string,
      `last_entrance_event_id` int,
      `last_guide_event_id` int,
      `last_before_goods_event_id` int,
      `last_entrance_event_value` string,
      `last_guide_event_value` string,
      `last_before_goods_event_value` string,
      `last_entrance_timestamp` bigint,
      `last_guide_timestamp` bigint,
      `last_before_goods_timestamp` bigint,
      `guide_lvl2_page_id` int,
      `guide_lvl2_page_value` string,
      `guide_lvl2_event_id` int,
      `guide_lvl2_event_value` string,
      `guide_lvl2_timestamp` bigint,
      `guide_is_del` int,
      `guide_lvl2_is_del` int,
      `before_goods_is_del` int,
      `entrance_page_lvl2_value` string,
      `guide_page_lvl2_value` string,
      `guide_lvl2_page_lvl2_value` string,
      `before_goods_page_lvl2_value` string,
      `entrance_event_lvl2_value` string,
      `guide_event_lvl2_value` string,
      `guide_lvl2_event_lvl2_value` string,
      `before_goods_event_lvl2_value` string,
      `rule_id` string,
      `test_id` string,
      `select_id` string,
      `last_entrance_pit_type` int,
      `last_entrance_sortdate` string,
      `last_entrance_sorthour` int,
      `last_entrance_lplid` int,
      `last_entrance_ptplid` int,
      `last_entrance_ug_id` int)
    PARTITIONED BY (`date` string)
     stored as orc;

    nohup后台执行

    nohup sh ./fct_path_list_history.sh 2016-01-06 2016-04-01 > ./fct_path_list_history.log 2>&1 &
    
    nohup sh ./fct_path_list_history.sh 2016-04-02 2016-12-31 >> ./fct_path_list_history.log 2>&1 &
    
    nohup sh ./fct_path_list_history.sh 2016-04-21 2016-12-31 >> ./fct_path_list_history.log 2>&1 &

    异常登记

    • 2016-01-05 在test.fct_path_list_bak
    • 处理失败,日期:2016-04-20
    展开全文
  • Hadoop之Hive的分区表

    千次阅读 2021-05-03 10:23:47
    ????前几天的课程我们学习了Hive数据的导入、导出、查询和排序,有兴趣的小伙伴可以查看以往的文章?...分区表1.1 分区表的建立1.2 查询分区表中数据1.3 增加分区1.4 删除分区1.5 查看分区1.6 查看分区表结构2.

    🍦前几天的课程我们学习了Hive数据的导入、导出、查询和排序,有兴趣的小伙伴可以查看以往的文章👇:

    ❗️❗️❗️ 今天要介绍的内容在Hive中非常重要,即分区表

    1.分区表

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

    1.1 分区表的建立

    • 引入分区表(一般情况下,企业中的分区表都是以时间作为分区的)

    我们首先建立三个分区表内所需要的文件

    --dept1.txt
    10	ACCOUNTING	1700
    20	RESEARCH	1800
    --dept2.txt
    30	SALES	1900
    40	OPERATIONS	1700
    --dept3.txt
    50	TEST	2000
    60	DEV	1900
    

    创建成功
    在这里插入图片描述

    • 创建分区表
    create table dept_par(deptno int, dname string, loc string)
    partitioned by (day string)--分区表特有
    row format delimited fields terminated by '\t';
    

    在这里插入图片描述

    • 各分区表导入数据
    --第一天添加
    load data local inpath '/opt/modul/datatest/dept1.txt' 
    into table dept_par 
    partition(day="2021-05-01");--指定分区目录
    --第二天添加
    load data local inpath '/opt/modul/datatest/dept2.txt' 
    into table dept_par 
    partition(day="2021-05-02");
    --第三天添加
    load data local inpath '/opt/modul/datatest/dept3.txt' 
    into table dept_par 
    partition(day="2021-05-03");
    

    都按这种方式导入
    在这里插入图片描述
    我们在web服务上看一下数据:我们发现分区表可以理解为在数据表中创建了文件夹来管理数据。
    在这里插入图片描述
    分区信息也是数据的一个字段,用法和普通属性用法一样。
    在这里插入图片描述
    例如查询某天的数据

    select * from dept_par where day="2021-05-01";
    

    查询分区信息超级快!因为分区表就相当于目录,可以避免全表扫描。
    在这里插入图片描述

    1.2 查询分区表中数据

    刚才其实演示过了,分区查询就相当于属性就行

    --单分区查询
    select * from dept_par where day="2021-05-01";
    --多个分区查询
    select * from dept_par where day="2021-05-01"
    union
    select * from dept_par where day="2021-05-02"
    union
    select * from dept_par where day="2021-05-03"
    --多表分区的另一种写法
    select * from dept_par where day="2021-05-01" or day="2021-05-02" or day="2021-05-03";
    

    结果如下:
    在这里插入图片描述

    1.3 增加分区

    也是使用alter…add…语句,需要添加多个分区时需要用空格隔开。

    --添加一个分区
    alter table dept_par add partition(day='2021-05-04');
    --添加多个分区
    alter table dept_par add partition(day='2021-05-04') partition(day='2021-05-05');
    

    添加分区成功,但是里面没有数据。
    在这里插入图片描述

    1.4 删除分区

    删除分区用alter…drop…语句,删除多个分区时需要用逗号隔开(吐槽它😟)

    --删除一个
    alter tabel dept_par drop partition(day='2021-05-04');
    --删除多个分区
    alter table dept_par drop partition(day='2021-05-04'),partition(day='2021-05-05');
    

    删除成功。
    在这里插入图片描述

    1.5 查看分区

    show partitions dept_par;
    

    在这里插入图片描述

    1.6 查看分区表结构

    desc formatted dept_partition;
    

    在这里插入图片描述

    2. 二级分区

    上一章节讲述了我们将天为单位进行分区,可如果按天分区数据量依然很大,我们这时就需要按照更小的范围分区,比如小时。

    2.1 建立二级分区分区

    --创建二级分区表
    create table dept_par2(deptno int, dname string, loc string) 
    partitioned by (day string,hour string) 
    row format delimited fields terminated by '\t';
    
    • 导入数据
    load data local inpath '/opt/modul/datatest/dept3.txt' 
    into table dept_par2
    partition(day="2021-05-02",hour='12');--指定二级分区信息
    

    创建成功
    在这里插入图片描述

    2.2 查询二级分区

    这里查询也是将分区信息当成属性即可

    --查询所有信息
    select * from dept_par2;
    --查询某天的信息
    select * from dept_par2 where day='2021-05-01';
    --查询某天某时的信息
    select * from dept_par2 where day='2021-05-01' and hour='12';
    

    结果:
    在这里插入图片描述

    3. HDFS数据与分区表关联的方法

    在最开始的普通数据库建表语句中我们说过,数据是存在HDFS上面的,也就是说,如果通过hdfs命令直接在文件夹先存数据,后建表,都是可以查询到的,但是分区表也是这样的吗?
    我们试一试:我们在分区表中建立一个day="2021-05-04"的目录,里面给他数据dept1.txt

    #创建一个类似分区表的文件夹
    hadoop fs -mkdir /user/hive/warehouse/dept_par/day=2021-05-04
    #给他数据
    hadoop fs -put dept1.txt /user/hive/warehouse/dept_par/day=2021-05-04
    

    结果如下:
    在这里插入图片描述
    然后我们用语句查询一下:发现找不2021-05-04的数据!!!
    在这里插入图片描述
    说明元数据中对分区表也有数据的存储,我们应该怎么样才能将我们自建的目录统一到元数据中呢?

    3.1 修复分区

    • 通过修复分区
    --修复分区命令,该命令会匹配分区数据表,补充元数据。
    msck repair table dept_par;
    

    修复完成后,成功找到。
    在这里插入图片描述

    3.2 添加分区

    我们在hdfs上再创建目录day=2021-05-05

    #创建一个类似分区表的文件夹
    hadoop fs -mkdir /user/hive/warehouse/dept_par/day=2021-05-05
    #给他数据
    hadoop fs -put dept2.txt /user/hive/warehouse/dept_par/day=2021-05-05
    
    • 添加分区
    --添加对应分区
    alter table dept_par add partition(day="2021-05-05");
    

    结果如下:
    在这里插入图片描述

    3.3 创建文件夹后load数据

    我们可以事先创建文件夹后,然后再使用load数据

    -- 创建文件夹
    hadoop fs -mkdir /user/hive/warehouse/dept_par/day=2021-05-06
    
    • load数据
    --数据只能load方式,才会添加元数据
    load data local inpath 
    '/opt/modul/datatest/dept3.txt' 
    into table dept_par 
    partition(day="2021-05-06");
    

    4. 动态分区

    动态分区是指分区标准不确定,想依据表中的某个字段进行分区。例如,根据dept表中的deptno进行分区
    在这里插入图片描述

    • 创建分区表
    --首先我们创建一个分区表
    create table dept_no_par(dname string, loc string)
    partitioned by (deptno int)
    row format delimited fields terminated by '\t';
    
    • 传递数据
    --动态分区会默认将最后一个字段名(deptno)作为分区标准
    insert into table dept_no_par 
    partition(deptno)
    select dname,loc,deptno from dept;
    --也可以这样,这种不需要改严格模式
    insert into table dept_no_par 
    select dname,loc,deptno from dept;
    

    提示动态分区要在非严格模式
    在这里插入图片描述

    • 设置非严格模式
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    • 再此执行,结果如下:分区成功。
      在这里插入图片描述

    参考资料

    《大数据Hadoop3.X分布式处理实战》

    展开全文
  • SQL-on-Hadoop产品。与市场上其它产品如Hive不同,BigSQL通过在Hadoop 上运行大规模并行处理(MPP)SQL引擎来替代MapReduce,极大地提高了查询速度。Big SQL以其无与伦比的SQL兼容性、丰富的企业及
  • hadoop集群之间迁移分区表

    千次阅读 2017-12-18 16:12:49
    这里集群的分区表是指的hive/impala表, 表存储格式是parquet. 迁移的时候是指文件的拷贝。下面我做一个案例演示。 如果有大量的表要迁移,可以写一个java程序,多线程控制。 1.查看源集群的表位置 [root@...

    这里集群的分区表是指的hive/impala表, 表存储格式是parquet.

    迁移的时候是指文件的拷贝。下面我做一个案例演示。 如果有大量的表要迁移,可以写一个java程序,多线程控制。


    1.查看源集群的表位置

    [root@slave01 ~]# hadoop fs -du -h /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr
    299.0 K  896.9 K  /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20170601
    [root@slave01 ~]# 

    2.把源集群的文件down到源服务器上

    [root@slave01 ~]# hadoop fs -get /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20170601/minute=0000 /root

    3.把文件通过ftp  down到本机或者scp到 目标集群。

    [root@slave01 ~]# hadoop fs -put /root/dt_differ_users_pre_xdr/ /user/hive/warehouse/prestat.db/
    [root@slave01 ~]# hadoop fs -du -h /user/hive/warehouse/prestat.db
    ^C[root@slave01 ~]# hadoop fs -du -h /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr
    159.7 M  159.7 M  /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20170901
    0        0        /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20171001
    0        0        /user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20171101


    4.在目标集群建立该表的分区

    20170901 有数据,我们创建该月分区 (我直接在impala执行的,避免元数据没有同步刷新)

    [slave01:21000] >  alter table prestat.dt_differ_users_pre_xdr add IF NOT EXISTS partition(day=20170901,minute=cast('0000' as char(4)));
    Query: alter table prestat.dt_differ_users_pre_xdr add IF NOT EXISTS partition(day=20170901,minute=cast('0000' as char(4)))
    Fetched 0 row(s) in 1.63s
    [slave01:21000] > show partitions prestat.dt_differ_users_pre_xdr ;
    Query: show partitions prestat.dt_differ_users_pre_xdr
    +----------+--------+-------+--------+----------+--------------+-------------------+---------+-------------------+---------------------------------------------------------------------------------------------+
    | day      | minute | #Rows | #Files | Size     | Bytes Cached | Cache Replication | Format  | Incremental stats | Location                                                                                    |
    +----------+--------+-------+--------+----------+--------------+-------------------+---------+-------------------+---------------------------------------------------------------------------------------------+
    | 20170901 | 0000   | -1    | 2      | 159.72MB | NOT CACHED   | NOT CACHED        | PARQUET | false             | hdfs://myha/user/hive/warehouse/prestat.db/dt_differ_users_pre_xdr/day=20170901/minute=0000 |
    | Total    |        | -1    | 2      | 159.72MB | 0B           |                   |         |                   |                                                                                             |
    +----------+--------+-------+--------+----------+--------------+-------------------+---------+-------------------+---------------------------------------------------------------------------------------------+
    Fetched 2 row(s) in 0.03s
    [slave01:21000] > 

    5.查看数据

    [slave01:21000] > select day,minute,count(*) from prestat.dt_differ_users_pre_xdr group by day,minute;
    Query: select day,minute,count(*) from prestat.dt_differ_users_pre_xdr group by day,minute
    Query submitted at: 2017-12-18 16:07:34 (Coordinator: http://slave01:25000)
    Query progress can be monitored at: http://slave01:25000/query_plan?query_id=124365f0388d9b90:2af6db6900000000
    +----------+--------+----------+
    | day      | minute | count(*) |
    +----------+--------+----------+
    | 20170901 | 0000   | 3235946  |
    +----------+--------+----------+
    Fetched 1 row(s) in 0.14s
    [slave01:21000] > 

    6.如果查询没有数据,可以执行invalidate metadata xxx;   refresh xxx;  
    [slave01:21000] > invalidate metadata  prestat.dt_differ_users_pre_xdr;
    Query: invalidate metadata  prestat.dt_differ_users_pre_xdr
    Query submitted at: 2017-12-18 16:09:17 (Coordinator: http://slave01:25000)
    Query progress can be monitored at: http://slave01:25000/query_plan?query_id=2242885efbd4c93d:a0ea048500000000
    Fetched 0 row(s) in 0.42s
    [slave01:21000] > refresh prestat.dt_differ_users_pre_xdr;
    Query: refresh prestat.dt_differ_users_pre_xdr
    Query submitted at: 2017-12-18 16:09:24 (Coordinator: http://slave01:25000)
    Query progress can be monitored at: http://slave01:25000/query_plan?query_id=f5483ec91c70dd59:fc2a589f00000000
    Fetched 0 row(s) in 0.67s
    [slave01:21000] > 



    展开全文
  • Hadoop生态圈-桶表和分区表  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。...

                          Hadoop生态圈-桶表和分区表

                                          作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    展开全文
  • 1)hive中内部和外部的区别 内部:又叫管理的创建,和删除都由hive自己决定。 外部结构上同内部,但是存储的数据时自己定义的,外部在删除的时候只删除元数据,原始数据时不能删除的。 内部...
  • 按照分区进行存储数据 kafka的分区和hadoop分区类似 8.创建主题:创建名为“my-topichyxy”的主题,并设置其分区为2,复本为2 $>kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2...
  • hadoop查询大小 hadoop fs -du

    千次阅读 2020-01-02 19:27:24
    hadoop fs -du -h -s /user/hive/warehouse/riskn.db/user_type_app -s:表示汇总值(其实就是查询这个数据总的文件大小,反之查的是每个文件的大小) -h:单位为k,m,g,便于阅读 举个例子,一目了然: ...
  • 基于Greenplum Hadoop- 分布式平台的大数据解决方案17.定义数据库对象(7)-分区表.zip
  • hive中删除外部分区表后,又在另一个库中创建相同的外部分区表,都是从hdfs上的相同目录上读取数据,结果报错org.apache.hadoop.hive.ql.exec.DDLTask返回代码1 解决方法: set hive.msck.path.validation=ignore; ...
  • 1.1 Hadoop-Impala十大优化系列之(1)—分区表优化-8个方法让分区最优化 impala表分区  默认情况下,表中的所有数据文件都位于一个目录中。分区是在加载过程中基于从一个或多个列的值的物理上划分数据的技术,...
  • 基于Greenplum Hadoop- 分布式平台的大数据解决方案19.定义数据库对象(9)-维护分区表.zip
  • 内部: 1.创建:create table stu(id int);2.插入数据:hive插入数据不能用insert语句,需要...5命令为(其中/home/hadoop/Public/stu_data为文件路径):load data local inpath '/home/hadoop/Public/stu_data'
  • 上节课我们一起学习了Hive的简单入门,这节课我们一起来学习Hive基础及分区表。 第一部分:hive基础  首先我们在itcast03上启动hive并创建一张表,如下所示。  接下来我们到hive数据库去查看一下我们创建的表...
  • 基于Greenplum Hadoop- 分布式平台的大数据解决方案18.定义数据库对象(8)-创建和装载分区表.zip
  • hadoop分区、分组

    千次阅读 2018-01-29 16:59:51
    分区和分组在排序中的作用是不一样的,今天早上看书,又有点心得体会,记录一下。 二、什么是分区 1、还是举书上的例子,在8.2.4章节的二次排序过程中,用气温举例,所以这里我也将这个例子说一下。 源...
  • Hive分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。分区表指的是在创建表时指定的partition的分区...
  • Hive中静态分区表 & 动态分区表

    千次阅读 2017-10-15 23:30:47
    Hive静态单级分区表、静态多级分区表的使用,动态分区表的使用、动态分区表与静态分区表的对比介绍;通过实际操作来验证Hive中分区表的如何使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,999
精华内容 15,599
关键字:

hadoop分区表