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

Apache配置单元使用alter table语句添加时间戳分区

孙成益
2023-03-14

随着分区的增长,对于一个表来说,这个语句所花费的时间要长得多(有些时候超过5分钟)。我知道它会扫描和解析s3中的所有分区(我的数据就在那里),然后将最新的分区添加到hive Messagore中。

我想用ALTER TABLE ADD PARTITION语句替换MSCK REPAIR。MSCK修复在添加最新分区时工作得非常好,但是我在使用ALTER TABLE ADD partition时遇到了分区中的时间戳值问题。

我有一个包含四个分区的表(part_dt字符串、part_src字符串、part_src_file字符串、part_ldts时间戳)

hive> show partitions hub_cont;
OK
part_dt=20181016/part_src=asfs/part_src_file=kjui/part_ldts=2019-05-02 06%3A30%3A39
hive> alter table hub_cont add partition(part_dt='20181016',part_src='asfs',part_src_file='kjui',part_ldts='2019-05-02 06:30:39');
OK
Time taken: 1.595 seconds
hive> show partitions hub_cont;
OK
part_dt=20181016/part_src=asfs/part_src_file=kjui/part_ldts=2019-05-02 06%3A30%3A39.0
Time taken: 0.128 seconds, Fetched: 1 row(s)

有没有办法添加有时间戳值的parition而不在末尾添加这个零。我不知道MSCK修复是如何处理这种情况的ALTER TABLE语句不能。

共有1个答案

燕元明
2023-03-14

如果您插入动态分区,也会发生同样的情况,它将用.0创建新的分区,因为默认的时间戳字符串表示格式包括毫秒部分,repair table查找新的文件夹并将分区添加到转移体中,并且工作正确,因为没有毫秒的时间戳字符串与时间戳相当兼容...

解决方案是使用string而不是timestamp并显式删除毫秒。

但是首先要仔细检查一下,在单个分区中确实有数百万行,并且确实需要时间戳颗粒分区,而不是日期,并且这个分区列确实很重要(例如,如果它在功能上依赖于另一个分区列part_src_file,那么您可以完全摆脱它)。分区过多会导致性能下降。

 类似资料:
  • 我正试图将数据从Oracle加载到Hive作为parquet。每次我将带有日期/时间戳列的表加载到hive时,它都会自动将这些列转换为BIGINT。可以使用sqoop将时间戳/日期格式加载到hive中,并作为一个parquet文件吗? 已经尝试过首先在hive中创建表,然后使用impala将数据加载到parquet文件中。< br >仍然失败,出现错误 "文件XX的第XX列有不兼容的拼花模式:时间

  • 嗨,我是Hive的新手,我想把当前的时间戳和一行数据一起插入到我的表中。 我得到的错误是: 如果有人能帮忙,那就太好了,非常感谢frostie

  • 本文向大家介绍sqlite时间戳转时间语句(时间转时间戳),包括了sqlite时间戳转时间语句(时间转时间戳)的使用技巧和注意事项,需要的朋友参考一下 下面是具体的实现代码:

  • 我在一个小型LINUX项目中工作,计算CURL和远程网站的请求延迟。 所以我做了一个外壳脚本来自动向远程Apache Webserver发送GET请求。在访问Apache的access.log时,我只找到来自CURL的请求仅由apache接收的时间。 是否也可以将CURL请求的日期发送到apache服务器?(时间戳) 谢谢

  • 失败:执行错误,从org.apache.hadoop.hive.ql.exec.FunctionTask返回代码1。配置单元仓库是非本地的,但是/home/hduser/hadoop-tutorial/hadoop-book-master/ch17-hive/src/main/java/com/hadoopbook/Hive/strip.jar指定本地文件系统中的文件。非本地仓库上的资源应指定非本