Hive分区表表结构发生变动可能带来的问题?

  首先,由于业务场景的需求调整可能会需要修改一些已经存在的表结构,比如增加字段、修改字段类型等,所以可能会有一些隐藏因素导致后续查询和插入数据报错;

  原始数据表结构

create external table ordercount
(
	channel string,
	platform string,
	whetherornotbuy int,
	headcount int,
	order_count int,
	order_time string
)
partitioned by (dt string comment '分区')
ROW FORMAT SERDE
	'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
	'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
	'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
location 
	'hdfs://path/ordercount';
alter table ordercount change cloumns order_count order_count string cascade

  后期由于业务需求变更需要将表结构进行变更,此时如果为空表可以直接删除该表,清除HDFS相应数据,并重新创建,避免各种未知问题;如果该表已经存有数据,则需要使用cascade指令强制新的分区元数据和旧的分区元数据保持一致,具体查看cascade的使用,否则会导致后续查数据或者插数据出现问题;

  还有可能遇到的问题的业务场景是:直接用hadoop命令复制删除hive存储数据后,需要add partition或alter来同步源数据信息,否则drop表等操作时会查询元数据metastore,查到metastore信息和hdfs信息不一致,会报错。这个也可算是hive的bug,尚未修复,但也可以理解为初衷不建议直接操作hdfs数据。,具体解决方案查看使用MSCK命令修复Hive表分区;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中,分区表是指根据数据的某个特定属性将中的数据分成多个分区存储的。这些分区可以被认为是的子集,每个分区都有一个特定的目录,这些目录存储有关分区的元数据以及该分区中的数据。Hive分区表的作用是使数据的查询和管理更加高效,可以更快地对数据进行查询和过滤,同时也能够更容易地管理和维护数据。 举个例子,假设我们有一个包含销售数据的,其中包含了销售日期、销售员、销售地点等属性。如果我们将这个定义为一个分区表,可以根据销售日期来分区存储数据。这样,每个分区都包含了一个特定日期的销售数据,可以通过查询特定的分区来快速查询和分析数据。例如: ``` CREATE TABLE sales ( sales_date DATE, sales_person STRING, sales_location STRING, sales_amount DOUBLE ) PARTITIONED BY (sales_date DATE) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; INSERT INTO sales PARTITION (sales_date='2021-01-01') VALUES ('John Doe', 'New York', 1000.0); INSERT INTO sales PARTITION (sales_date='2021-01-02') VALUES ('Jane Smith', 'Los Angeles', 2000.0); INSERT INTO sales PARTITION (sales_date='2021-01-03') VALUES ('Bob Johnson', 'Chicago', 1500.0); ``` 上述代码定义了一个名为sales的分区表,根据sales_date属性进行分区。然后,我们向该中插入了三条数据,分别属于2021-01-01、2021-01-02和2021-01-03这三个分区。这样,每个分区都有一个特定的目录,存储有关该分区的元数据和该分区中的数据。我们可以使用类似以下的SQL语句来查询特定分区的数据: ``` SELECT sales_person, sales_location, sales_amount FROM sales WHERE sales_date='2021-01-01'; ``` 这样就可以快速查询2021-01-01这个分区的销售数据。同时,如果我们需要删除某个特定日期的销售数据,也可以直接删除该分区,而无需删除整个。这样可以避免不必要的数据移动和复制,提高数据的管理和维护效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值