Hive常用函数和分桶表

Hive常用函数和分桶表

一、字符串常用函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、分桶表
  分桶操作是更细粒度的分配方式,一张表可以同时分区和分桶,分桶的原理是根据指定的列的计算hash值模余分桶数量后将数据分开存放。
  Hive的分桶实际上就是Hadoop的分区,有几个桶,就用几个reduce任务来处理。
  需要注意的是:分桶表必须是内部表。因为只有在创建表的时候才能指定桶的数量,然后在往表里插入数据的时候,会按照指定的分区字段(列字段)做分桶。
  实现步骤:
   1.创建带桶的 table :
    create table teacher(class string) clustered by (class) into 3 buckets row format delimited fields terminated by ‘\t’;
   2.开启分桶机制:
    set hive.enforce.bucketing=true;
   3.往表中插入数据:
    insert overwrite table teacher select * from b1;//需要提前准备好temp,从temp查询数据写入到teacher。
    注:teacher是一个分桶表,对于分通表,不允许以外部文件方式导入数据,只能从另外一张表数据导入。
   4.查看表的结构,会发现当前表下有三个文件:
    dfs -ls /user/hive/warehouse/teacher;
   5.读取数据,看一个文件的数据:
    dfs -cat /user/hive/warehouse/teacher/000000_0;
   注:桶使用 hash 来实现,所以每个文件拥有的数据的个数都有可能不相等。
   6.对桶中的数据进行采样:
    select * from teacher tablesample(bucket 1 out of 3 on class);
   注:分桶语法—TABLESAMPLE(BUCKET x OUT OF y)
   y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。
   x表示从哪个bucket开始抽取。
   例如:table总bucket数为3,tablesample(bucket 3 out of 3),表示总共抽取(3/3=)1个bucket的数据,抽取第3个bucket的数据。
   再例如:table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。
   7.查询第一个桶里数据,并返回一半的数据:
    select * from bucketed_user tablesample(bucket 1 out of 6 on id);

猜你喜欢

转载自blog.csdn.net/qq_38019655/article/details/83902949
今日推荐