数据导出服务

数据导出服务能将区块链上特定的区块、交易、合约事件导出到外部的数据库中,导出过程中保证事件的完整性,符合条件的事件会被推送到外部数据库至少一次。数据导出服务支持导出指定区块高度区间内的所有事件,也支持持续运行模式,准实时地将链上数据写入到外部数据库中。

说明

只有企业版支持数据导出服务的能力,专业版不支持。

功能入口

主链功能入口

  1. 登录阿里云BaaS控制台,单击左侧导航栏上的蚂蚁区块链 > 合约链,进入我的联盟

  2. 在联盟列表中,选择目标联盟,单击目标联盟所在行右侧操作栏下的管理

  3. 联盟内的链列表下选择目标联盟链,单击其所在行右侧操作栏下的主链管理

  4. 单击左侧导航栏上的数据导出服务,即可进入数据导出服务控制台。

子链功能入口

  1. 登录阿里云BaaS控制台,单击左侧导航栏上的蚂蚁区块链 > 合约链,进入我的联盟

  2. 在联盟列表中,选择目标联盟,单击目标联盟所在行右侧操作栏下的管理

  3. 联盟内的链列表下选择目标联盟链,单击其所在行右侧操作栏下的子链管理

  4. 子链管理的列表下,单击目标子链所在行右侧操作栏下的管理

  5. 单击左侧导航栏上的数据导出服务,进入数据导出服务控制台。

创建导出任务

进入数据导出服务控制台,单击页面左上角的新建导出,开始导出任务创建流程。

向导1. 导出数据设置

参数

说明

任务名称

自定义填写该导出任务的名称,长度限制在32个字符,可以是大小写字母,数字,汉字,下划线。

任务描述

选填项,可对此新建的导出任务做一个简短的描述,长度限制在128个字符。

告警地址

选填项,配置后,当导出任务遇到无法处理的数据或导出任务完成时,会发送告警通知到钉钉,关于如何配置,请参见钉钉自定义机器人接入 ;如果告警地址为空,则默认使用钉钉自定义机器人回调地址, 如 https://oapi.dingtalk.com/robot/send?access_token=XXX

注意:配置钉钉自定义机器人时,请在 自定义关键词 中添加参数 Data

导出类型

选择您需要导出的数据类型,可选择的数据类型如下:

  • 合约事件:由交易收据(Receipt)中所有 Log构成的事件

  • 交易事件:由链上交易(Rransaction+Receipt)构成的事件

  • 原生存证事件:由链上原生存证交易构成的事件

  • 自定义交易事件:由链上交易(Transaction+Receipt)构成的事件

  • 自定义区块事件:由链上区块构成的事件

  • 自定义合约事件:由交易收据(Receipt)中的所有 Log构成的事件

说明

自定义事件可以使用 Jq 语法过滤数据, 不带自定义的事件只支持特定规则下的匹配,具体看下行列表中的导出规则。

导出规则

配置导出数据的过滤规则,根据选择的不同数据类型,导出规则含义如下:

  • 合约事件:导出Log中Topic名称与规则相同的合约Log

  • 交易事件:导出交易的类型名称与规则相同的交易,例如”CALL_CONTRACT”导出合约调用交易

  • 原生存证事件:导出交易发起者地址与规则相同的原生存证交易

  • 自定义交易事件:对事件进行过滤,语法参考 Jq Filter 表达式

  • 自定义区块事件:对事件进行过滤,语法参考 Jq Filter 表达式

  • 自定义合约事件:对事件进行过滤,语法参考 Jq Filter 表达式

开始块高

配置导出数据的开始块高(含)

结束块高

配置导出数据的结束块高(不含);持续运行表示准实时写入数据到数据库

导出预览

单击生成预览,从链上获取符合”导出类型”和”导出规则”的事件;如果数据不存在,则展示样例数据

向导2. 导出目标设置

目前只支持将数据导出到MySQL。

参数

说明

导出目标

请选择MySQL,请使用5.6以上版本的MySQL数据库。

数据库地址

配置数据库的连接地址

端口号

数据库的连接端口

数据库名称

数据库的库名

数据库用户名

访问数据库使用的用户名,至少需要具有 INSERT 和 UPDATE 权限

数据库密码

访问数据库的用户密码

表名称

导出数据的目标表名,留空则随机生成表名

向导3. 表映射关系设置

在向导1中,如果有生成预览数据,则该步会默认生成一套映射关系,您可以在此基础上进行修改。

参数

说明

导出数据字段

Jq Filter 表达式,从导出数据中选择出数据库该列对应的数据

字段名称

数据库该列的名称

字段类型

选择数据库该列的数据类型

字段大小

数据库该列的数据大小

字段描述

可选,数据库该列的描述

向导4. 完成创建

单击下一步,即可完成导出任务的创建。

导出任务管理

任务查看

进入数据导出服务控制台,在任务列表下,您可以看到当前区块链实例上的所有导出任务。平台会根据创建任务时,导出数据设置中对结束块高的设置,来区分任务是一次性任务还是持续性任务。

  • 如果自定义设置了结束块高,则任务创建成功后,在一次性任务页签下展示。

    1-1
  • 如果准实时写入数据到数据库,则任务创建成后,在持续性任务页签下展示。

    1-2

导出任务的状态可以有以下几种状态:

  • 运行中:数据正在导出中

  • 已停止:任务被人为停止

  • 已完成:导出任务已经执行完成

  • 失败:导出任务运行失败,可以单击启动重启失败的任务。

    说明

    导出到数据库的事件失败达到一定限制时,导出任务的状态会被标记为失败,具体限制规则,可联系蚂蚁区块链团队的技术人员进行确认。

查看/修改任务详情

  • 查看任务详情

    数据导出服务列表页,单击目标服务操作栏下的详情,可在任务详情页中查看任务的详情信息。

  • 修改任务详情

    任务详情页,单击右上角的编辑按钮,可以在侧边抽屉式弹窗中,对该任务的任务名称任务描述告警地址进行修改。修改完成后,单击确认,即可保存修改后的信息。

暂停/恢复导出任务

创建导出任务后,当数据正在导出中,状态显示运行中,此时,如果您想中断导出任务,可以单击操作栏下的暂停按钮。暂停任务后,您也可以重新恢复数据导出任务,继续导出数据到外部数据库。

删除任务

如果导出任务已完成,或不需要继续导出数据到该任务,您可以清理任务列表中的任务。单击操作栏下的删除按钮即可删除该任务。

查询、重试失败记录

对于存在报错的信息的导出任务,单击该任务所在行右侧操作栏下的错误日志,可以查看该导出任务的所有报错日志。

针对每一条失败记录,您可以选择忽略忽略该事件或重试重新尝试将该事件写入到目标数据库。如果重试仍然出现了错误,日志状态会保持待处理,您可以通过错误原因进行问题定位,调整之后再次单击重试按钮进行重试。

Jq Filter 表达式

通过 Jq 的表达式,您可以对导出数据的字段进行筛选及重组,以下是一些示例,更多语法可以参考 Jq 官方文档

获取指定字段

可以通过 “.<Object Key>” 读取 JSON Object (即输入事件)指定字段的值。 “.foo” 它会给出”foo”键的值,如果没有这个key则给出null。如果键里含有关键字符,就要用双引号括起来,例如:“.foo$”。

原始事件:
{
  "name": "demo-event",
  "content": {
    "block_num": 78,
    "input": "invoke"
  }
}
过滤表达式:
.content.input
过滤结果:
"invoke"

对字段进行筛选

可以通过 “select(<boolean_expression>)” 方法对 JSON Object (即输入事件)进行筛选。可以通过 获取指定字段 来获取特定的字段,并使用逻辑表达式 “==”, “<”, “>”, “<=”, “>=”, “!=” 来判断结果;当有多个条件表达式时,使用 “and”, “or” 进行连接。

原始事件:
{
  "name": "demo-event",
  "content": {
    "block_num": 78,
    "input": "invoke"
  }
}
过滤表达式1:
select( .content.input == "invoke" and .content.block_num > 50 )
过滤结果1:
{"name": "demo-event", "content": { "block_num": 78, "input": "invoke"}}
过滤表达式2:
select( .content.input == "invoke" and .content.block_num < 50 )
过滤结果2:
null

对字段类型进行转换

可以通过 “ | tostring” 将 获取指定字段 的内容转换成字符串类型

原始事件:
{
  "name": "demo-event",
  "content": {
    "block_num": 78,
    "input": "invoke"
  }
}
过滤表达式:
(.content | tostring )
过滤结果:
"{\"block_num\": 78, \"input\": \"invoke\"}}"