Hive获取最新分区

2018-11-08  本文已影响0人  DDDDavid

为了增加代码健壮性,有时候获取数据表分区不能写死固定的时间,或者sysdate(-1)。

因此需要获取表的最新分区,然后取该分区的数据。

1、show partitions table_name;

只能看有啥分区,不能应用;

2、select dt from table_name where dt >= sysdate( - 10) group by dt order by dt desc limit 1;

限制一段时间,先分组group by,再排序order by desc,最后输出limit 1,测试速度略慢于方法3;

3、select max(dt) from app.p_sku_to_age_4cate where dt >= sysdate( - 10)

限制一段时间,取分区最大的,主要缺点是需要扫描全部分区的数据进行比较,但代码简便;

4、python 调shell 再调hive 执行showpartitions。

import subprocess
def get_table_info(last_day, table_name):
    cmd = """
        hive -e "show partitions """+table_name+"""" | sort -n -r | awk '{print $1}'
        """
    info = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
    dtinfo=info.communicate()[0]
    dtlist=str(dtinfo,encoding = "utf-8").split("\n")
    pt=dtlist[0].split("/")
    dt=[dt.split("=")[1] for dt in pt if 'dt=' in dt][0]
    return dt[:10]
pv_dt = get_table_info(last_day, "table_name")
上一篇 下一篇

猜你喜欢

热点阅读