记录工作中的点点滴滴

数据开放实验室平台介绍

数据开放实验室平台介绍

实验室简介

禧云数据开放平台(数据开放实验室),是一套安全、高效、自助式的数据开放平台,实验室在不暴露隐私数据的前提下,通过多种安全机制实现数据授权,为使用人员提供SQL交互式查询分析、数据定制下载能力,对分析结果提供自助式报表配置功能。

实验室项目分为两个平台:

  • 一个是供数据分析人员使用的(数据开放实验室),可以进行SQL交互式查询分析、数据定制;
  • 另一个是供实验室管理人员使用的(实验室管控端),可以对数据进行授权,然后开放给数据分析人员使用。

数据开放实验室

1.数据列表

数据分析人员登录成功后,可以查看给自己授权的数据列表的相关元数据信息:
Alt text

2.查询分析

数据分析人员可以通过数状展示的数据列表查看表、表字段信息,还可以手写SQL 语句,支持语法高亮,语法报错检查:
Alt text

用到的技术
  • 前端

    1. el-tree:树状展示表、字段数据;
    2. vue-codemirror-liteSQL交互式查询;
    3. websocket-heartbeat-js:实时显示查询日志、显示查询结果。
  • 服务端

    1. WebSocketListener WebSocket 服务端;
    2. SQL 语句规则校验;
      • 是否选择库;
      • 表是否授权过;
      • 字段是否授权过;
      • 不能有 delete、update、truncate等关键字;
      • 检查是否使用limit,是否在限定的范围之内。
    3. 使用多线程启动查询任务;
    4. 实时向客户端发送查询结果。

3.发布API

SQL语句有查询结果时,可以发布API
Alt text

支持一次发送、周期性发送邮件:
Alt text

服务端主要处理逻辑:

  1. 创建hive表;
  2. 向新建的hive表导入数据;
  3. 创建mysql表;
  4. 将hive表的数据导入到mysql表,实现数据加速。

4.API列表

4.1 数据定制

API保存成功后,可以在API列表里查看创建成功的API数据。为避免数据量过大影响网络,我们对数据做了批次限制:
Alt text
点击【确定】按钮,可以对数据进行定制。定制成功后,邮件通知:
Alt text

服务端主要处理逻辑:

  1. 使用线程池异步下载数据;
  2. 根据API从 对应的mysql表读取数据,写入CSV文件:
    • 数据小于指定阈值,则一次性写入 CSV文件;
    • 数据大于指定阈值,则分批次写入 CSV文件。
  3. 将文件上传至HDFS指定路径;
  4. 获取API收件人的邮箱地址,给收件人发送邮箱,提示收件人数据定制完毕。
    4.2 数据下载
    数据定制完毕,可以对数据进行下载:
    Alt text
    Alt text

服务端主要处理逻辑:

  1. 判断HDFS上是否有该文件;
  2. 将文件从HDFS上下载到部署实验室服务所在的服务器上:
    • 如果服务器上存在该文件,则先删除再下载;
  3. 循环数据,将指定的字节写入输出流,返回给浏览器下载。

三. 数据开放实验室管理后台功能

管理后台供实验室管理人员使用,主要提供账号开通、数据授权功能。

仓库管理

管理员可以查看当前仓库列表、新增仓库,同步元数据:
Alt text

服务端处理逻辑:

  1. 获取数据仓库的mysql元数据库表,将元数据同步至实验室平台的mysql库。

仓库表管理

Alt text

服务端处理逻辑:

  1. 可以对单个表进行重新初始化。

账号开通

打开企业列表,点击【新增企业】,可以开通账号。在弹窗里录入企业信息:
Alt text

数据授权

从企业列表里找到要操作的账号,在操作栏里点击【授权数据表】按钮:
Alt text

在该界面可以看到该账号已经授权的数据表和未授权的数据表:
Alt text

该界面会列出该表的所有字段,勾选将要授权的字段,设置授权规则:
Alt text

对该字段设置原样复制:
Alt text

对该字段设置脱敏规则,取值范围限制:
Alt text

对字段设置完授权规则后,点击保存:
Alt text

服务端保存成功后,数据分析人员登录【数据开放实验室】就可以看到刚刚授权成功的数据表了:
Alt text

点击初始化数据按钮:

  1. 调用Spark SQLThriftServer服务,为指定的表导入数据;
    服务端主要处理逻辑:
  2. 保存该企业与当前数据表、字段设置规则相关数据;
  3. 使用线程池,来创建表对应的hive表;

重要功能点:

  1. 可以为该企业授权多个数据表;
  2. 可以区分该企业已经授权的表和尚未授权的表;
  3. 可以将要授权的某个表的字段进行授权;
  4. 可以对将要授权的字段进行规则设置,比如是原样复制,还是脱敏设置、取值范围设置。

四、遇见的难点及解决办法

1. 数据授权

  1. 由于每个企业可以定制多个数据表,那么就存在多个企业都需要定制同一个数据表的可能,由于每个企业对数据表的需求可能不一致,所以设置规则就有可能不一样,那么怎么去设计企业定制的数据表呢?

解决办法:为每个企业授权一个表的同时,后台其实会做一个拷贝的动作,创建出来一个与源表结构一致的新表。

2. 授权字段规则设置

处于数据安全的角度考虑,有些表的字段可能需要进行脱敏处理、数据可能需要取值范围限制。

解决办法:

  • 建一个字段表,存放该字段的授权规则。分别有 加密方法、加密参数、过滤方法、过滤参数(json字符串)等字段;
  • 如果该字段选择原样复制,不加任何规则限制,则对应的加密方法、加密参数、过滤方法、过滤参数都插入空值。

3. 数据分析人员数据查询校验

实验室管理员在给数据分析人员授权数据表、字段之后,怎么去保证数据分析人员在自己的权限范围内查询数据呢?
解决办法:

  • 对用户提交的SQL语句进行规则校验;
    • SQL语句不能为空;
    • 去掉该SQL语句最后的分号;
    • 判断SQL语句内部是否包含分号,如果包含分号,则不允许查询;
    • 不能有delete、update、truncate、insert、alert、create、drop、rename等关键字;
    • 是否选择了数据库;
    • 表是否授过权;
    • 字段是否授过权;
    • 是否有必备的关键词比如:select、 from
    • 是否使用了limit
    • limit 是否在限制的范围之内。