通过 pig 脚本删除 hive 表分区

Posted

技术标签:

【中文标题】通过 pig 脚本删除 hive 表分区【英文标题】:drop hive table partition through pig script 【发布时间】:2016-05-30 07:42:44 【问题描述】:

目前我们每天都删除表格并运行将数据加载到表格中的脚本。脚本需要 3-4 小时,在此期间数据将不可用。所以现在我们的目标是让分析师可以使用旧的配置单元数据,直到新的数据加载执行完成。

我在 hql 脚本中通过将每日数据加载到按 load_year、load_month 和 load_day 分区的配置单元表并通过删除分区删除昨天的数据来实现这一点。 但是,猪脚本可以实现相同的选择是什么?我们可以通过 pig 脚本更改表格吗?我不想在猪之后执行另一个 hql 来删除分区。 谢谢

【问题讨论】:

Pig 用于数据流......所以在为过程图片正确数据挑选数据时...... 对不起。我没有得到你。我的问题与拾取数据无关,它与将数据存储在pig中以及通过pig存储删除旧数据之后。 【参考方案1】:

从 HDP 2.3 开始,您可以在 Pig 脚本中使用 HCatalog 命令。因此,您可以使用 HCatalog 命令删除 Hive 表分区。以下是删除 Hive 分区的示例:

-- Set the correct hcat path 
set hcat.bin /usr/bin/hcat;
-- Drop a table partion or execute other any Hcatalog command
sql ALTER TABLE midb1.mitable1 DROP IF EXISTS PARTITION(activity_id = "VENTA_ALIMENTACION",transaction_month = 1);

另一种方法是在 Pig Script 中使用 sh 命令执行。但是,我在转义 ALTER 命令中的特殊字符时遇到了一些问题。所以,我认为第一个是最好的选择。

问候, 罗伯托·塔迪奥

【讨论】:

以上是关于通过 pig 脚本删除 hive 表分区的主要内容,如果未能解决你的问题,请参考以下文章

hive外部表分区

删除与分区相关的hdfs文件后无法联系hive表分区

怎么判断hive表是分区表,并拿到分区列的列名

Hive管理表分区的创建,数据导入,分区的删除操作

从 hive 外部表中的分区中删除列

HIve通过mysql元数据表删除分区