指定Python脚本元素的元数据字段
基于元数据字段,构建Python脚本的业务数据
用户需要在继承的struct类中,定义该脚本元素可用的元数据字段。
支持的数据类型包括:
Text ,文本
Date,日期
Number,数字
SmartList,值列表
Dimension,维度
指定元数据时,各类型数据需要包含信息示例如下:
class TableX(Struct):
# Text,Date,Number,SmartList,Dimension类型:字段描述description(非必填,图表组件需要,建议赋值)
channelType: Text = Text(description='channelType_description')
time: Date = Date(description='time_description')
cost: Number = Number(description='cost_description')
# SmarList类型的必填字段:element_name,path
# 业务必填字段:value_field(前端组件需要),含义为该字段对应的值列表,例:value_field=['已读','未读']
read: SmartList = SmartList(element_name='read_sml', path='/yjx',value_field=value_field,
description=description)
# Dimension类型的必填字段:element_name,path
# 业务必填字段:value_key(前端组件需要),含义为:该字段对应的维度表达式,例:value_key="staff{IDescendant(#root,0)}"
staff: Dimension = Dimension(element_name='staff_dim', path='/yjx',value_key=value_key,
description=description)
@as_datasource(struct=TableX)
在定义好元数据字段后,用户需要基于元数据字段,构建业务数据。
业务数据可以是来自先胜云平台的数据表、财务模型、业务模型,也可以是来自其它非结构化数据的读入。
但是,构建的业务数据字段必须与元数据中定义字段相同,可用的平台Python API 参见平台Python API。
def main(p1, p2):
new_cube = DataTableMySQL(element_name='Order_detail',path='/map_dimension/zhouliufab/Demo_data/Demo_data/yewu/Data')
df = new_cube.select(columns=['orderdate','cost','number','sales'])
print("数据库查询出来的信息为:", df)
# warnings!!!:df 必须是DataFrame格式
return df
场景示例1:读取数据表中部分字段
class TableX(Struct):
orderdate: Date = Date(description='订单日期')
cost: Number = Number(description='成本')
number: Number = Number(description='数量')
sales: Number = Number(description='销售额')
@as_datasource(struct=TableX)
def main(p1, p2):
new_cube = DataTableMySQL(element_name='Order_detail',path='/map_dimension/zhouliufab/Demo_data/Demo_data/yewu/Data')
df = new_cube.select(columns=['orderdate','cost','number','sales'])
print("数据库查询出来的信息为:", df)
# warnings!!!:df 必须是DataFrame格式
return df
场景示例2:读取数据表中全部字段
salary_model = BusinessModel(element_name='New_Cube1', path='/A_Python')
dict_fields = {}
for col in salary_model.meta.logicTable.columns:
print("=====================")
print(col.logicInfo)
if not col.logicInfo:
continue
value_type = col.logicInfo.get('valueType')
if value_type == 8: # Dimension
# field_name = col.logicInfo.get('elementDetail').get('elementName')
field_name = col.baseInfo.name
element_name = col.logicInfo.get('dimensionName')
path = col.logicInfo.get('elementDetail').get('path')
description = col.baseInfo.description
dict_fields[field_name]: Dimension = Dimension(element_name=element_name, path=path, description=description)
elif value_type == 3: # SmartList
# field_name = col.logicInfo.get('elementDetail').get('elementName')
field_name = col.baseInfo.name
element_name = col.logicInfo.get('valueKey')
path = col.logicInfo.get('elementDetail').get('path')
description = col.baseInfo.description
dict_fields[field_name]: SmartList = SmartList(element_name=element_name, path=path, description=description)
elif value_type == 15: # Number
field_name = col.baseInfo.name
description = col.baseInfo.description
dict_fields[field_name]: Number = Number(field_name, description=description)
elif value_type == 1: # Text
field_name = col.baseInfo.name
description = col.baseInfo.description
dict_fields[field_name]: Text = Text(field_name, description=description)
elif value_type == 11: # Date
field_name = col.baseInfo.name
description = col.baseInfo.description
dict_fields[field_name]: Date = Date(field_name, description=description)
Table = StructMeta('TableX', (), dict_fields)
@as_datasource(struct=Table)
def main(p1, p2):
new_cube = DataTableMySQL(element_name='table_68e3',path='/A_Python')
df = new_cube.select()
print("数据库查询出来的信息为:", df)
# warnings!!!:df 必须是DataFrame格式
return df
回到顶部
咨询热线