1. 背景:
最近公司将数据库从阿里云的adb转换到maxcompute,这次是介绍如何将本地的anaconda环境的python,通过pyodps包连接maxcompute(以下简称mc)
2. 需要内容:
- 运维给到的mc账号信息:
""" 用户登录名称 niubi@22333333837828675.onaliyun.com 登录密码 hduishcuisbbcsyu{}hauiidhiauhs AccessKey ID dschuivdsbyfydgywycsbb AccessKey Secret sgdhsdhus{sahud}lihaihlihai """
- 电脑本地安装anaconda,然后再安装pyodps包: pip install pyodps
3. 在jupyter或者python文件中使用:
import pandas as pd
from odps import ODPS
odps = ODPS(access_id="dschuivdsbyfydgywycsbb",
secret_access_key="sgdhsdhus{sahud}lihaihlihai",
project="datawarehouse_bu",
endpoint="http://service.cn-shanghai.maxcompute.aliyun.com/api")
1. 上面的endpoint对应的地址可以从阿里云这个网站去找:Endpoint - MaxCompute - 阿里云 (aliyun.com) 【各地域Endpoint对照表(外网连接方式)】板块
2. project这个对应的字段是叫做【项目名称】,可以在dataworks里面查看。
4. 将mc的查询结果保存到pandas中:
问了官方人员,pyopds目前没有类似于pandas的read_sql_query函数,我们可以自己写一个函数。
# 写一个函数
def read_sql_query(odps, sql):
"""
:param odps:
:param sql:
:return: pandas DataFrame
"""
try:
readers_ = odps.execute_sql(sql).open_reader()
col_name = [i.name for i in readers_.schema]
data = pd.concat([pd.DataFrame({column: [value] for column, value in zip(col_name, reader.values)}) for reader in readers_])
except Exception as e:
data = pd.DataFrame({'info':[e]})
print(e)
finally:
return data
# test function
read_sql_query(odps=odps,sql="""
SELECT *
FROM datawarehouse.dwd_log_detail ld
WHERE ld.visitday = '2021-07-26'
AND ld.pt = '20210726'
LIMIT 10000
""")
5.更多操作:
还有很多别的函数,我可能用不到,这里先不列出来,我也是刚摸索。后面遇到了相关问题,再做记录