python学习之路:python连接阿里云ODPS

python学习之路:python连接阿里云ODPS

前言

本人最近在学习使用ODPS,希望把学习过程记录下来,方便自己查阅。

1、安装ODPS
pip install ODPS
2、连接阿里云odps

确认下载好后,连接odps,账号密码自备。

from odps import ODPS

o = ODPS(
   access_id='user', #登陆账号
   secret_access_key='password', #登陆密码
   project='project', #odps上的项目名称
   endpoint='http://service.cn-hangzhou-xxx:80/api') #官方提供的接口
3、执行sql

3.1、简单执行sql

with o.execute_sql('desc tablename').open_reader() as reader:
        print(reader.raw) 

3.2、通过odps内置DataFrame读取,该方法读取的数据结构类型为odps.df.expr.core.DataFrame

def get_odps_table(tb_name):
   data = DataFrame(o.get_table(tb_name))
   data['ds'] = data['ds'].astype('int')
return data
rdata = get_odps_table('tb_name') #获取表数据实例

3.3、封装成函数连接

直接输入sql就可进行增删改查

def exe_sql(sql):
    from datetime import datetime
    import pandas as pd
    st_time = datetime.now()
    data = []
    with o.execute_sql(sql).open_reader() as reader:
        d = defaultdict(list)  # collection默认一个dict
        # 解析record中的每一个元组,存储方式为(k,v),以k作为key,存储每一列的内容;
        for record in reader:
            for res in record:
                d[res[0]].append(res[1])  
        data = pd.DataFrame.from_dict(d, orient='index').T  # 转换为数据框,并转置,不转置的话是横条数据
    ed_time = datetime.now()
    print('总耗时:', ed_time - st_time ) # 输出sql运行时间,方便sql修改、维护
    return data
4、将sql结果转换为excle
test = exe_sql('输入sql')
test.to_excel('./表名', index=False, encoding='gbk')
5、遇到的问题

问题1: 假如每天要执行同一个sql,并将输出的datafram进行merge操作,那么遇到sql跑出的数据为空时,就回发现merge报错。因为merge无法合并空的datafram,至少需要列名信息和合并主列名。

Empty DataFrame
Columns: []
Index: []

解决方案1:每次执行完sql,进行一个空值判断,判断sql是否为空

解决方案2:全部写一个sql里面,但是修改麻烦

相关链接

Python3 读取odps数据库数据_uuddoop的博客-CSDN博客_odps数据库

python连接阿里云ODPS,进行基本操作_冧_恣的博客-CSDN博客_odps python

PYTHON数据分析与处理全过程

数据预处理之数据清洗案例_sereasuesue的博客-CSDN博客_数据清洗案例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值