当前位置: 首页 > 知识库问答 >
问题:

Hive ALTER命令删除值超过24个月的分区

汤兴生
2023-03-14

我有一个配置单元表(consumer_data),其分区列'val_dt',这是一个字符串列,其值为日期格式'yyyy-mm'。

beeline --hivevar var_drop_date="$(date -d "24 months ago" '+%Y-%m')" -e 'ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= date "${hivevar:var_drop_date}")'
Partition present before running the query:
val_dt=2016-01
val_dt=2017-01
val_dt=2019-01
val_dt=2020-01

Partitions present after running the query:
None 

Required output: 
val_dt=2019-01
val_dt=2020-01

共有1个答案

邢飞昂
2023-03-14

使用-e选项时不需要hivevar,变量可以直接替换。另外,在分区规范中不需要额外的date函数如果分区是yyyy-mm格式,则只需使用shell就可以计算所需格式的日期。另外,'yyyy-mm'应该在引号中,因为分区是字符串,如下所示:val_dt<='2018-05'

试试这个:

beeline -e "ALTER TABLE consumer_data DROP IF EXISTS PARTITION(val_dt <= '$(date -d "24 months ago" '+%Y-%m')')"
 类似资料:
  • 我有以下Log4J配置,我如何删除超过一个月的日志? log=log/ log4j.appender.file.datePattern='.'YYYY-MM-DD-A log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%m%n

  • 问题内容: 我在SQL中使用简单的DELETE语句遇到意外结果时遇到了麻烦,似乎将单词添加到列表中了。一定是愚蠢的东西!但我看不到,尝试了几种不同的方式。所有相同的结果非常令人困惑。 问题答案: 尝试删除单引号。另外,为什么还要将SQL字符串与连接对象()连接起来???? 尝试这样: 还要注意,由于连接被包装在using块中,因此您无需在语句中将其关闭。Dispose方法将自动调用.Close方法

  • 问题内容: 我有一张桌子,我只按ID顺序显示最新的30行。 我正在尝试通过使用以下查询删除30个最新行之后的任何行。 我不断收到以下错误 我究竟做错了什么? 问题答案: 试试这个

  • 我已经根据日期yyyy-mm-dd对配置单元表进行了分区。我想每天运行一个脚本,可以删除所有超过30天的分区,但在这种情况下,我不想超过日期。我希望它采取系统日期和删除超过30天的分区。

  • 问题内容: 如何删除SQL Server中在10分钟后创建的所有行。谢谢。 问题答案: 假设您具有存储时间戳的列名称Date_column。您可以这样尝试,其中mi是分钟的缩写:

  • 我已经通过使用MAVEN/maven/bin/mvn-X-e从命令行将工件上传到Sonatype Nexus:部署文件-Durl=http://maven-nexus.com/nexus/content/repositories/xyz-DrepositoryId=xyz-DgroupId=com.kumar-DartifactId=Peshu-Dversion=1.0.12-D包装=war-Df