PyODPS快速起步

PyODPS是MaxCompute的Python版本的SDK:

  • 简单方便的Python编程接口:

    • 编写MaxCompute作业

    • 查询MaxCompute表和视图

    • 管理MaxCompute资源

PyODPS支持在本地环境、DataWorks、PAI Notebooks中使用:

安装PyODPS

pip install pyodps
  • 安装以后通过以下命令检查验证是否安装成功,没有报错信息则表示成功:

验证 PyODPS 安装
python -c "from odps import ODPS"

简单查询

官方文档提供了一个简单的查询案例,我简单复述如下:

验证odps查询的python案例
import os
from odps import ODPS

def main():
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    o = ODPS(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        #os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        #os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
        project='project', # 项目名
        endpoint='http://service.cn-hangzhou-xxx:80/api' # 官方接口
    )

    result = o.execute_sql('SELECT * FROM my_table LIMIT 3')
    with result.open_reader() as reader:
        for record in reader:
            print(record)

if __name__ == "__main__":
    main()

这里我运行案例遇到一个报错:

验证odps查询的python案例报错
...
TypeError: `access_id` and `secret_access_key` should be provided.

这个报错有点迷惑,但是实际上通过一条条命令排查,会发现实际上 Python os.environ 对象 和 os.getenv() 方法 返回的指定环境变量 ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET 是空的( Non )

原因说来很简单,原来在 bash~/.bash_profile 中缺少 export 命令来明确输出环境变量就会导致 Python 的 Python os.environ 对象 和 os.getenv() 方法 无法获得该环境变量,所以一定要规范配置环境变量:

ODPS相关环境变量设置
ALIBABA_CLOUD_ACCESS_KEY_ID="my_id"
ALIBABA_CLOUD_ACCESS_KEY_SECRET="my_secret"

# 必须明确 export 环境变量,否则Python os模块的 getenv() 或 environ 无法获得
export ALIBABA_CLOUD_ACCESS_KEY_ID ALIBABA_CLOUD_ACCESS_KEY_SECRET

参考