连接ODPS
from odps import ODPS odps = ODPS('**your-access-id**', '**your-secret-access-key**', '** your-default-project**', endpoint='**your-end-point**')
your-default-project**', endpoint='**your-end-point**')
这两个可省略,通过get_project命令获取到某个项⽬空间
创建非分区表data_temp:table_name,data_count,time 三个字段
table = odps.create_table('data_temp','table_name string, data_count bigint, time datetime',if_not_exists=True)
操作表
t = odps.get_table('data_temp')
插入数据,使用列表的形式
records = [['lrb', 344322, '2020-04-28 14:09:37'], ['zcfzb', 4343434, '2020-04-28 14:09:37'], ['xjllb', 21142232, '2020-04-28 14:09:37'], ['test', 343242, '2020-04-28 14:09:37']]
odps.write_table('data_temp', records)
读取表中数据
with t.open_reader() as reader: count = reader.count for record in reader: #处理每一条数据
使用dataframe
df = t.to_df()
注:dataframe是maxCompute自己的,不具备pandas的dataframe一些功能(如:to_csv)
可以转成pandas的dataframe
pd_df = df.to_pandas()
打印如下
table_name data_count time 0 lrb 344322 2020-04-28 14:09:37 1 zcfzb 4343434 2020-04-28 14:09:37 2 xjllb 21142232 2020-04-28 14:09:37 3 test 343242 2020-04-28 14:09:37
介于此,我们可以将数据直接导入MYSQL
from sqlalchemy import create_engine connect = create_engine('mysql+pymysql://root:mysql@172.20.10.12:3306/odps?charset=utf8') pd_df.to_sql("data_sync", connect, if_exists='append', index=False)
其中data_sync是mysql对应的表名,connect是mysql连接
由于我的Mysql表没有建立主键,所以当代码重复执行后,会写入多次。
需要注意的是:ODPS的表名和MYSQL的表名尽量保持一致,不然会报错。解决办法是导入mysql之前,更改dataframe列名即可。