Schema
备注
Schema 属于 MaxCompute 的公测功能,需要通过 新功能测试申请 开通。使用 Schema 需要 PyODPS 0.11.3 以上版本。
Schema 是 MaxCompute 介于项目和表 / 资源 / 函数之间的概念,对表 / 资源 / 函数进行进一步归类。
Schema 基本操作
你可以使用 exist_schema
判断 Schema 对象是否存在:
print(o.exist_schema("test_schema"))
使用 create_schema
创建一个 Schema 对象:
schema = o.create_schema("test_schema")
print(schema)
使用 delete_schema
删除一个 Schema 对象:
schema = o.delete_schema("test_schema")
使用 get_schema
获得一个 Schema 对象并打印 Schema Owner:
schema = o.get_schema("test_schema")
print(schema.owner)
使用 list_schema
列举所有 Schema 对象并打印名称:
for schema in o.list_schema():
print(schema.name)
操作 Schema 中的对象
在开启 Schema 后,MaxCompute 入口对象默认操作的 MaxCompute 对象都位于名为 DEFAULT
的 Schema 下。为操作其他 Schema 下的对象,需要在创建入口对象时指定 Schema,例如:
import os
from odps import ODPS
# 保证 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret
# 不建议直接使用 Access Key ID / Access Key Secret 字符串
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='**your-project**',
endpoint='**your-endpoint**',
schema='**your-schema-name**',
)
也可以为不同对象的操作方法指定 schema
参数。例如,下面的方法列举了 test_schema
下所有的表:
for table in o.list_tables(schema='test_schema'):
print(table)
下列方法给出了如何从 test_schema
获取表 dual
并输出表结构:
table = o.get_table('dual', schema='test_schema')
print(table.table_schema)
在执行 SQL 时,可以指定默认 Schema:
o.execute_sql("SELECT * FROM dual", default_schema="test_schema")
对于表而言,如果项目空间没有启用 Schema,get_table
方法对于 x.y
形式的表名,默认按照
project.table
处理。如果当前租户开启了租户级语法开关,get_table
会将 x.y
作为 schema.table
处理,否则依然按照 project.table
处理。如果租户上没有配置该选项,可以配置 options.enable_schema = True
,此后所有 x.y
都将被作为 schema.table
处理:
from odps import options
options.enable_schema = True
print(o.get_table("myschema.mytable"))
备注
options.enable_schema
自 PyODPS 0.12.0 开始支持,低版本 PyODPS 需要使用
options.always_enable_schema
。