pyodps分区表

1.需求分析

​ 为了获得****odps****空间下的所有表的信息(部门、表名、表注释、表记录统计、表字节大小、写入时间),如下脚本可以实现该需求,表为分区表。

2.脚本编辑
"""
-- 获得****_odps_****空间下的所有表的信息
|dept|stg_name|stg_comment|tb_count|tb_size|rksj|   (dt)
"""

import time
import datetime

from odps import ODPS
import sys
import io
reload(sys)
sys.setdefaultencoding("utf-8")

# 连接odps
odps = ODPS('x***********9Y', 'cc***************os', 'xsdc_odps_prod',
            endpoint='*****************')
print("正常连接到odps({})的项目空间----".format('****_odps_****'))

# 1.遍历信息,获取数据
tableNameList = odps.list_tables(project='****_odps_****',prefix='')

table_data = [];
dept  = ''
print("阶段1:数据读取中")
i = 0 
for each in tableNameList:
    try:
        #表
        tb_name = each.name
        #表注释
        tb_comment = each.comment
        countsql = "select count(*) from ****_odps_****.{}".format(each.name)
        t = odps.execute_sql(countsql).open_reader();
        #表统计量
        tb_num = t[0]["_c0"]
        #字节
        tb_size = each.size
        #入库时间
        now = datetime.datetime.now()
        aim_data  = (dept,tb_name,tb_comment,str(tb_num),str(tb_size),str(now.strftime('%Y-%m-%d %H:%M:%S')))
        table_data.append(aim_data)
        i += 1
        print(">>> {} :第 {} 条数据 {} 读取完成!".format(now,i,tb_name))
    except :pass

print(">>>阶段1完成:共获取stg层{}条数据".format(i))

# 2.获取数据落表

#获取分区日期
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
yest_dt = yesterday.strftime('%Y%m%d')
print(yest_dt)

#获取目标表
aim_tb = odps.get_table('stg_count_001',project='****_odps_****')
#如果分区存在就删除
aim_tb.delete_partition("dt='%s'"%yest_dt, if_exists=True)
# #写入分区数据
with aim_tb.open_writer(partition="dt='%s'"%yest_dt,create_partition=True) as writer:
    for j in range(len(table_data)):
        writer.write(table_data[j])
        now2 = datetime.datetime.now()
        print(">>> {} : 第{}条数据写入完成".format(now2,j+1))
print("阶段2:目标注释信息已经写入表stg_count_001")

# over
3.运行结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值