本文为您介绍组件的定义、构成以及如何创建组件。
组件的定义
组件是一种带有多个输入参数和输出参数的SQL代码过程模板,SQL代码过程的处理过程通常是引入1到多个源数据表,通过过滤、连接和聚合等操作,加工出新的业务需要的目标表。
组件的价值
在业务实践中,有大量的SQL代码过程很类似,过程中输入表和输出表的结构一致,或是类型兼容而名称不同。此时,组件的开发者可以抽象SQL过程为一个SQL组件节点,抽象可变的输入表为输入参数,输出表为输出参数,即可实现SQL代码的复用。
在使用SQL组件节点时,您只需要从组件列表中选择和自己业务处理过程类似的组件,为这些组件配置上自己业务中特定的输入表和输出表,不用再重复复制代码,就可以直接生成新的组件SQL节点。从而极大地提升开发效率,避免重复开发。SQL组件节点生成后的发布与调度的操作方法都和普通的SQL节点一样。
组件的构成
一个组件就和一个函数的定义一样,由输入参数、输出参数和组件代码过程构成。
组件的输入参数
- 表类型的参数:指定组件过程中要引用到的表,在使用组件时,组件的使用者可以为该参数填入其特定业务需要的表。
- 字符串类型的参数:指定组件过程中需要变化的控制参数。例如,指定过程的结果表只输出每个区域的头N个城市的销售额,您可以通过字符串类型的参数控制N的值。
例如,指定过程的结果表要输出哪个省份的销售总额。您可以设置一个省份字符串参数,指定不同的省份,即可获得指定省份的销售数据。
- 参数描述:描述该参数在组件过程中发挥的作用。
- 参数定义:是表结构的一个文本定义,仅表类型的参数需要。指定组件的使用者需要为该参数提供的和该表参数定义的名字一致并且类型兼容的输入表,组件过程才会正确运行。否则,组件的过程运行时,会因为找不到输入表中指定的字段名而报错。该输入表必须具有该表参数定义中指定的字段名和类型,顺序不限,不禁止多余字段。参数定义仅供您参考。
- 建议定义表参数的格式如下。
字段1名 字段1类型 字段1注释 字段2名 字段2类型 字段2注释 字段n名 字段n类型 字段n注释
示例如下。area_id string ‘区域id’ city_id string ‘城市id’ order_amt double ‘订单金额’
组件的输出参数
- 组件的输出参数具有参数名、参数类型、参数描述和参数定义等属性,参数类型只有表类型(table),字符串类型的输出参数没有逻辑意义。
- 表类型的参数:指定组件过程中最终产出的表。使用组件的,组件的使用者可以为该参数填入其特定业务下通过该组件过程要产出的结果表。
- 参数描述:描述该参数在组件过程中发挥的作用。
- 参数定义:是表结构的一个文本定义。组件的使用者需要为该参数的和该表参数定义的数目一致、并且类型兼容的输出表,组件过程才会正确运行。否则,运行的时候会因为字段个数不匹配或类型不兼容而报错。对于输出表的字段名,不要求和表参数定义的字段名必须一致。参数定义仅供您参考。
- 建议定义表参数的格式如下所示。
字段1名 字段1类型 字段1注释 字段2名 字段2类型 字段2注释 字段n名 字段n类型 字段n注释
示例如下。area_id string ‘区域id’ city_id string ‘城市id’ order_amt double ‘订单金额’ rank bigint ‘排名’
组件的过程体
在过程体中参数的引用格式为:@@{参数名}
。
过程体通过编写抽象的SQL加工过程,将指定的输入表按照输入参数进行控制加工出有业务价值的输出表。
组件过程的开发具有一定的技巧,组件过程的代码需要巧妙的利用输入参数和输出参数,使得组件过程能够在使用时填入不同的输入参数和输出参数,也能生成正确的可运行的SQL代码。
创建组件
- 登录DataWorks控制台,单击相应工作空间后的进入数据开发。
- 单击左侧导航栏中组件管理。
- 鼠标悬停至
,单击 。
- 在新建组件对话框中,输入组件名称和描述,并选择目标文件夹。
- 配置完成后,单击提交。
原始表结构定义
字段名称 | 字段类型 | 字段描述 |
---|---|---|
order_id | varchar | 订单编号 |
report_date | datetime | 订单日期 |
customer_name | varchar | 客户名称 |
order_level | varchar | 订单等级 |
order_number | double | 订单数量 |
order_amt | double | 订单金额 |
back_point | double | 折扣点 |
shipping_type | varchar | 运输方式 |
profit_amt | double | 利润金额 |
price | double | 单价 |
shipping_cost | double | 运输成本 |
area | varchar | 区域 |
province | varchar | 省份 |
city | varchar | 城市 |
product_type | varchar | 产品类型 |
product_sub_type | varchar | 产品小类 |
product_name | varchar | 产品名称 |
product_box | varchar | 产品包箱 |
shipping_date | datetime | 运输日期 |
组件的业务含义
组件的名字:get_top_n
通过指定的销售明细数据表作为输入参数(表类型)和取前多少名作为输入参数(字符串),按照城市销售总额的大小作为排名依据。通过该组件过程,组件的使用者可以轻松获取到各个区域下,指定的前多少名的城市排行。
组件的参数定义
- 参数名:myinputtable
- 类型:table
- 参数名:topn
- 类型:string
- 参数名:myoutput
- 类型:table
- area_id string
- city_id string
- order_amt double
- rank bigint
CREATE TABLE IF NOT EXISTS company_sales_top_n
(
area STRING COMMENT '区域',
city STRING COMMENT '城市',
sales_amount DOUBLE COMMENT '销售额',
rank BIGINT COMMENT '排名'
)
COMMENT '公司销售排行榜'
PARTITIONED BY (pt STRING COMMENT '')
LIFECYCLE 365;
定义组件过程举例
INSERT OVERWRITE TABLE @@{myoutput} PARTITION (pt='${bizdate}')
SELECT r3.area_id,
r3.city_id,
r3.order_amt,
r3.rank
from (
SELECT
area_id,
city_id,
rank,
order_amt_1505468133993_sum as order_amt ,
order_number_150546813****_sum,
profit_amt_15054681****_sum
FROM
(SELECT
area_id,
city_id,
ROW_NUMBER() OVER (PARTITION BY r1.area_id ORDER BY r1.order_amt_1505468133993_sum DESC)
AS rank,
order_amt_15054681****_sum,
order_number_15054681****sum,
profit_amt_1505468****_sum
FROM
(SELECT area AS area_id,
city AS city_id,
SUM(order_amt) AS order_amt_1505468****_sum,
SUM(order_number) AS order_number_15054681****_sum,
SUM(profit_amt) AS profit_amt_1505468****_sum
FROM
@@{myinputtable}
WHERE
SUBSTR(pt, 1, 8) IN ( '${bizdate}' )
GROUP BY
area,
city )
r1 ) r2
WHERE
r2.rank >= 1 AND r2.rank <= @@{topn}
ORDER BY
area_id,
rank limit 10000) r3;
组件的分享范围
组件的分享范围包括组件和公共组件。
组件发布后,默认在本工作空间内的其它用户可见且可用。组件的开发者通过单击公开组件,即可将具有全局通用性的组件发布到整个租户内,所有租户内的用户都能看到该公共组件并可以进行使用。

使用组件
组件开发完成后的使用方法请参见使用组件。
组件的引用记录

在文档使用中是否遇到以下问题
更多建议
匿名提交