Hive中如何创建带有分区数据的表?
在Hive中创建对应已有分区数据的表
嘿,我来帮你搞定在Hive里对接这些已有分区数据的表创建问题~
1. 先理清你的分区结构
从你给出的HDFS目录信息来看,数据是按两层分区组织的:
- 一级分区:
product_hierarchy_type(示例值为CI) - 二级分区:
month_id(示例值为201601)
父目录是/kylin/retailer/qi_basket_brand_bucket_fact/,里面的_impala_insert_staging是Impala的临时工作目录,Hive会自动忽略它,不用额外处理。
2. 创建Hive外部表(推荐方案)
因为你的数据已经存在HDFS上了,用外部表的核心好处是:后续删除表时不会误删HDFS上的原始数据。你需要把下面的your_column_name、data_type替换成你实际的业务字段和类型,存储格式也根据你的数据实际情况调整:
CREATE EXTERNAL TABLE IF NOT EXISTS qi_basket_brand_bucket_fact ( -- 这里替换成你的真实业务字段,比如: basket_id string, brand_id int, bucket_amount double ) PARTITIONED BY ( product_hierarchy_type string, month_id string ) -- 替换成对应的数据存储格式:文本数据用 STORED AS TEXTFILE,列式存储用 PARQUET/ORC STORED AS PARQUET LOCATION '/kylin/retailer/qi_basket_brand_bucket_fact/';
3. 让Hive识别已有的分区
表创建好之后,Hive还不知道HDFS上已经存在这些分区目录,需要执行同步命令来加载分区信息:
MSCK REPAIR TABLE qi_basket_brand_bucket_fact;
如果你的Hive版本较旧(低于3.0)或者MSCK命令无法正常工作,也可以手动添加单个分区(适合分区数量较少的场景):
ALTER TABLE qi_basket_brand_bucket_fact ADD PARTITION (product_hierarchy_type='CI', month_id='201601') LOCATION '/kylin/retailer/qi_basket_brand_bucket_fact/product_hierarchy_type=CI/month_id=201601';
4. 验证分区是否加载成功
执行下面的命令查看表的分区列表,确认所有分区都被Hive识别到:
SHOW PARTITIONS qi_basket_brand_bucket_fact;
之后你就可以直接查询分区数据了,比如:
SELECT * FROM qi_basket_brand_bucket_fact WHERE product_hierarchy_type='CI' AND month_id='201601';
内容的提问来源于stack exchange,提问作者Mukesh Gupta
相关产品推荐
相关产品推荐

