首页 > 其他 > 详细

hive表管理

时间:2020-09-07 16:56:21      阅读:69      评论:0      收藏:0      [点我收藏+]

 

Hive 0.14.0版本,建表管理

https://blog.csdn.net/Thomson617/article/details/86153924

 

分桶表

分桶对应hdfs目录下的一个个文件,它是将1张大表进行hash(表行索引多分桶数hash,hash值相同的到同一个文件中去),将一份数据拆分成多份,优化查询效率.分桶和MapReduce的分区概念相似
例:

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     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
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY \001
   COLLECTION ITEMS TERMINATED BY \002
   MAP KEYS TERMINATED BY \003
 STORED AS SEQUENCEFILE;

在上面的示例中,page_view表被用户ID分块(聚集),并且在每个桶中,数据按viewTime的递增顺序排序。这样的组织允许用户对集群列进行有效采样 - 在本例中为userid。排序属性允许内部操作员在评估查询时利用更知名的数据结构,同时提高效率。如果任何列是列表或映射,则可以使用MAP KEYS和COLLECTION ITEMS关键字。
CLUSTERED BY和SORTED BY创建命令不会影响数据如何插入表中 - 只会影响它的读取方式。这意味着用户必须小心地通过指定减少器的数量等于桶的数量并在查询中使用CLUSTER BY和SORT BY命令来正确插入数据。

 

分隔符

指定多字符分隔符。比如指定‘$$‘分隔符。

add jar /opt/apache-hive-2.1.1-bin/lib/hive-contrib-2.1.1.jar;
list jars;


create EXTERNAL table IF NOT EXISTS tbl_test (
  id                        string ,
  gender                    string ,
  age                       string ,
  level                     string   
)
PARTITIONED BY (id_type STRING, dt INT,  dt_timestamp INT)
ROW FORMAT SERDE org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe
WITH SERDEPROPERTIES ("field.delim"="$$")
STORED AS TEXTFILE
LOCATION /dm_goddog_tianjin.db/t_ods_waybill_50fields_text
; 

 

表头设置

hive把纯文本放在表对应的位置,就可以查询到数据,但是如果纯文本里面存在表头,会把表头也作为第一行数据。如果又不想在纯文本中去掉表头只要在建表语句中加入如下‘tblproperties ("skip.header.line.count"="1")’即可。
实际建表语句如下所示:

create external table if not exists user(
    name string comment 姓名,
    usr_id  string comment 用户id,
    sex string comment 性别
)
row format delimited fields terminated by \t

stored as textfile

tblproperties ("skip.header.line.count"="1")

location /user/20181018;

 

分区修复

--方式1:已经有分区,但是找不到目录。
msck repair table dm_goddog.waybill_std;

--方式2:load加载数据时,指定分区
load data local inpath /home/appdeploy/tianjin/t_ods_waybill_150fields_flume_text/* overwrite into table dm_goddog.t_ods_waybill_150fields_flume_text  partition ( inc_day = 20200711 );

--方式3:alter修改分区目录
--单分区字段
ALTER TABLE dm_goddog.t_ods_waybill_150fields_flume_text add if not EXISTS PARTITION(`inc_day`=20200601) location hdfs://test-cluster/user/hive/warehouse/dm_goddog.db/t_ods_waybill_150fields_flume_text/inc_day=20200601;
--多分区字段
ALTER TABLE dm_goddog_tianjin.t_ods_waybill_125fields_text add if not EXISTS PARTITION(inc_day=20181201,src_company_code=zyh) location hdfs://test-cluster/user/hive/warehouse/dm_goddog_tianjin.db/t_ods_waybill_125fields_text/inc_day=20200716/src_company_code=zyh;

 

hive表管理

原文:https://www.cnblogs.com/LIAOBO/p/13627487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!