4.1 数据源

4.1.1 简介

  建数据主要的目的是创建数据集,但是数据集的创建需要依赖于数据源,数据源顾名思义,既是数据的来源。

  数据的来源是多种多样的,我们根据数据来源的不同,把数据源分成了分为三大类:文件数据源、数据库以及大数据引擎数据源和第三方接口数据源。目前在DataViz中,支持30多种常见的数据源。如下图所示。 datasource/datasource-1

  • 文件数据源2种,包括:Excel数据源和CSV数据源;
  • 数据库数据源17种,包括:MySQL,MariaDB,Oracle,Oracle ADW,SQLServer,PostgreSQL,Greenplum,DB2,Informix,Gbase,人大金仓,达梦,神通,GaussDB,Huawei DWS,H2和Druid;
  • 大数据数据源10种,包括:Kylin,Cloudera Impala,Hive,MemSQL,Presto,MongoDB,Phoenix,Amazon Athena,ArgoDB和ClickHouse;
  • 第三方接口数据3种,包括:OData,Rest和DataInsight;

  数据源属于用户资源,同一用户下的数据源,在该用户的任何项目中都可以使用,但不能跨用户使用。

4.1.2 文件数据源

  文件数据源需要上传存储数据的文件,并且如果要更新数据源中的数据,在文件中修改数据后,需要重新上传数据文件。另外,文件数据源还需要遵循一定的格式,过于复杂的数据格式是无法解析的。

4.1.2.1 Excel数据源

  Excel数据源支持多Sheet页,每个Sheet页都会被解析成一个表;Sheet页第一行作为表头,表头中的每个单元格的内容不能为空, 表头会被解析成表中字段的名称;而字段的数据类型会根据每列中字段单元格格式和正则匹配进行解析,因此Excel中每列的单元格格式要求统一。标准的格式如下图: datasource/datasource-2

【注意】当字段格式中出现不统一的情况时,虽然在Excel中设置了单元格格式为时间类型,但由于DataViz是遍历当前列的所有单元格来最终决定该列的数据类型,因此当检查到存在非时间格式的单元格时,会将该列的数据类型最终认定为字符串类型。这样,就无法利用时间相关的计算函数参与计算。如下图所示,假设在“订单日期”一列中存在非时间格式的单元格,Dataviz会将这一列数据归属为文本类型,而非时间类型。

datasource/datasource-3

datasource/datasource-4

​ 目前可以识别的日期类型格式为:日期,日期+时间,时间,例如:

  • 日期类型:2020年1月1日,2020年01月01日,2020/1/1,2020/01/01,2020-1-1,2020-01-01;
  • 日期+时间:2020年1月1日 12:00:00,2020/1/1 12:00:00,2020-01-01 12:00:00;
  • 时间:12:00:00;

4.1.2.2 CSV数据源

  CSV数据源要求每列内容必须被封闭在双引号("")内,每行数据中各个列的内容用半角逗号(,)分隔,第一行会作为表头,表头中列的内容不能为空,表头被解析为列名,文件内容的字符编码最好是UTF8,可以避免乱码的出现,具体格式如下图所示。

datasource/datasource-5

4.1.2.3 将Excel数据源写入到MySQL数据库(V5.5.06版本及以后支持该功能)

​ 为了应对Excel文件过多时,从内存数据库中读取数据将会大量占用系统内存,导致查询缓慢等问题,Saca Dataviz 新增了将Excel文件数据源的数据写入到MySQL数据库的功能。

如需开启这一功能,请在配置文件:/dataviz-service/WEB-INF/conf/fileDataSourceConfig.properties中逐项设置如下内容:

# 文件数据源上传时将数据保存至MySQL数据库的相关配置

# 总开关,设置为true时表示功能开启
fileDataSource.saveToMysql=true

# 驱动,目前只支持mysql
fileDataSource.driverClass=com.mysql.cj.jdbc.Driver

# Mysql数据库jdbc url,请配置为希望保存数据的Mysql数据库的jdbc url
fileDataSource.jdbcUrl=jdbc:mysql://localhost:3306/file_data_source_upload?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=GMT%2B8

# Mysql用户名
fileDataSource.user=root
# Mysql密码
fileDataSource.pwd=root

# 一次插入行数,为了防止Mysql配置导致不能一次插入大量数据,可在此调整每次插入的数据条数
fileDataSource.MAX_INSERT_ROW = 10000

完成各配置项的设置后,运行后端服务,即可将从此开始上传的excel文件数据源保存至MySQL数据库的指定库中。

4.1.3 数据库及大数据引擎数据源

  数据库和大数据引擎数据源都是基于JDBC(Java DataBase Connectivit,java数据库连接,是一种用于执行SQL语句的Java API, 可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序)进行对接和实现。所以,针对支持JDBC,但不在产品中列出的数据库产品,可以联系产品团队进行技术对接。

  使用数据库进行数据源的创建、编辑、删除等操作,请参见第4.1.5节。需要特别说明的是,对于DataViz内置的Imapla和Phoenix数据源,需要注意:

  1. Impala本身不支持中文元数据,这里借由hive读取,需要配置internalConfig.properties 中的如下内容:

     internal.hiveHost=master  
     internal.hivePort=10000
    
  2. Phoenix数据源

    • DataViz所在服务器的hosts文件添加配置,如果Phoenix服务Zookeeper的hostname为master,那么添加如下内容:

        10.4.53.163    master
      
    • 替换DataViz的 guava-xxx.jar 版本范围是12~16。
    • 开启数据库schema,需要的在hbase服务的配置文件hbase-site.xml和dataviz服务中phoenix客户端jar包中的 hbase-defualt.xml中添加如下配置内容:

        <property>
            <name>phoenix.schema.isNamespaceMappingEnabled</name>
            <value>true</value>
        </property>
        <property>
            <name>phoenix.schema.mapSystemTablesToNamespace</name>
            <value>true</value>
        </property>
      

4.1.4 第三方接口数据源

  第三方接口数据源目前支持支OData、Rest和DataInsight数据源,并支持OAuth2.0权限校验。我们把从接口数据源中获取的数据放置在一个内存数据库中,数据的更新时间间隔默认是30分钟,可以在配置文件internalConfig.properties中进行设置,最小间隔单位1分钟,如果需要实时刷新可以设置为0。配置如下:

internal.oDataInterval=30

4.1.4.1 OData数据源

  可以把OData数据源接口当作一个指定数据返回格式的Rest。接口返回的数据为Json格式,并且要以value关键字作为数据列表的名称。具体格式参考如下:

{
    "value": [{
        "orderId": "2016010313265448",
        "orderDate": "2016-01-03",
        "category": "食品",
        "goods": "面包",
        "count": 2,
        "cost": 2.8,
        "payment": 8.8,
        "buyer": "徐先生",
        "province": "江西省",
        "city": "南昌市"
    }, {
        "orderId": "2016011352714789",
        "orderDate": "2016-01-13",
        "category": "服装",
        "goods": "男士T恤",
        "count": 1,
        "cost": 41.0,
        "payment": 180.0,
        "buyer": "胡先生",
        "province": "辽宁省",
        "city": "大连市"
    }]
}

4.1.4.2 Rest数据源

  rest数据源是通过一个http的网络接口来获取数据,需要准备的信息如下图: datasource/datasource-29

4.1.4.2.1 请求地址

  rest数据源支持GET和POST两种请求,要根据填入的接口地址来确认具体的请求方法。

4.1.4.2.2 请求参数

  对于GET请求,用户可携带Params和Headers类型的参数;对于POST请求,用户可携带Params、Headers和Body类型的参数。 Params和Headers参数可以选择参数的值的类型:固定值,动态参数和系统变量,其中动态参数就是我们在项目中定义的SQL参数,我们可以通过填入SQL参数的标识来引用SQL参数的值。 sql参数的定义请参考 《6.7 SQL参数》

Body参数目前只支持json格式。我们也可以在json中通过固定的写法来引用SQL参数和系统变量。SQL参数可以通过${参数标识}来引用; 系统变量也可以通过${系统变量name}引用,也可以通过[系统变量caption]来引用系统变量。如下图:

datasource/datasource-29

4.1.4.2.3 刷新间隔

  数据刷新的设置决定了我们每次使用rest数据源的数据时是重新从接口中获取还是使用上次从接口中获取的数据:实时获取会让我们每次都重新从接口中获取数据,这无疑会增加网络负担并且还会造成性能的降低,但是这会保证我们数据的实时性。 刷新间隔时间越长,我们从接口获取一次数据后间隔下次从接口获取数据的时间就越久。

4.1.4.2.4 数据解析

  数据解析决定的我们如何解析接口返回的数据,通过指定解析路径的方式可以解析Json格式并带有列表/数组的接口返回结果: 解析路径默认值是一个正斜线“/”,这种情况下表示接口返回的json格式是一个数组,格式如下:

[{
    "orderId": "2016010313265448",
    "orderDate": "2016-01-03",
    "category": "食品",
    "goods": "面包",
    "count": 2,
    "cost": 2.8,
    "payment": 8.8,
    "buyer": "徐先生",
    "province": "江西省",
    "city": "南昌市"
}, {
    "orderId": "2016011352714789",
    "orderDate": "2016-01-13",
    "category": "服装",
    "goods": "男士T恤",
    "count": 1,
    "cost": 41.0,
    "payment": 180.0,
    "buyer": "胡先生",
    "province": "辽宁省",
    "city": "大连市"
}]

如果请求返回的数据格式为:

{
    "responseCode": "200",
    "responseMsg": "success",
     "responseValue": [{
        "orderId": "2016010313265448",
        "orderDate": "2016-01-03",
        "category": "食品",
        "goods": "面包",
        "count": 2,
        "cost": 2.8,
        "payment": 8.8,
        "buyer": "徐先生",
        "province": "江西省",
        "city": "南昌市",
        }, {
        "orderId": "2016011352714789",
        "orderDate": "2016-01-13",
        "category": "服装",
        "goods": "男士T恤",
        "count": 1,
        "cost": 41.0,
        "payment": 180.0,
        "buyer": "胡先生",
        "province": "辽宁省",
        "city": "大连市"
    }]
}

那么解析路径的值应该是“/responseValue”

  通过指定解析路径的方式可以解析Json格式并带有列表/数组的接口返回结果,如果接口返回的结果不是json格式或者需要一定逻辑处理那么可以选择二次开发,通过自定义解析类解析数据。 可参考:二次开发扩展-REST数据源指定数据解析类

4.1.4.2.5 用户认证

  目前认证的方式只支持OAuth 2.0的客户端模式(Client Credentials)。

4.1.5 数据源管理

  在项目资源页面,点击“建数据”,进入数据源管理页面,如下图所示。

datasource/datasource-6

4.1.5.1 创建数据源

  点击上方的“数据源”,创建数据源,进入数据源类型选择页面:

datasource/datasource-7

4.1.5.1.1 文件数据源

  选择文件数据源后弹出页面:

datasource/datasource-8

​ 考虑到服务器的资源占用情况,目前文件数据源支持最大20M文件上传。

​ 如果需要调整需要修改Dataviz后台服务中dataviz-chartdata.jar内的datasourceType.yaml配置文件,该文件位于:dataviz-service/WEB-INF/lib中。修改内容如下:

datasource/datasource-9

​ 上传文件后,确认保存。

4.1.5.1.2 数据库数据源

​ 选择数据库数据源后弹出页面:

datasource/datasource-10

​ 输入数据源信息后,点击测试连接可以测试数据源是否正常连接,然后确认保存。

​ 如果需要多个数据库关联使用,可以勾选“跨schema”,然后再勾选需要使用的数据库。这样在数据集制作页面就可以看到选中的数据库中的表了。

​ 跨schema配置如下:

datasource/datasource-11

注意:DataViz中用户可以通过SQL查询数据源中的数据,产品本身不会限制用户的SQL查询范围,所以数据源的创建者要在数据库中限制数据源链接中的账户权限,不要使用管理员账户,避免数据的泄露。

4.1.5.1.3 第三方数据源

​ 选择第三方OData和Rest数据源后弹出页面:

datasource/datasource-12

​ 输入接口请求地址,选择授权方式并填写授权信息,然后保存数据源。

​ 数据源保存成功后会直接进入到数据集页面,如下图所示。

datasource/datasource-13

4.1.5.2 编辑数据源

​ 对于文件数据源(Excel数据源和CSV数据源)可以通过编辑重新上传数据文件,达到更新数据源数据的目的。  

​ 对于数据库数据源,将鼠标悬浮在数据源上,点击编辑按钮,在弹出数据源编辑页面中修改数据源的信息,如下图所示。

datasource/datasource-14

4.1.5.3 删除数据源

  在数据源管理页面,将鼠标悬浮在数据源上,点击删除按钮可以删除单个数据源,如下图所示。

datasource/datasource-15

​ 如果需要批量删除数据源,点击页面右上角的删除图标,然后选择要删除的数据源,点击页面下的删除按钮进行批量删除,如下图所示。

datasource/datasource-16

​ 当数据源被数据集使用时,则无法删除,会给出提示信息。

4.1.5.4 数据源重命名

  在数据源管理页面,将鼠标悬浮在数据源上,点击重命名按钮即可进行数据源的重命名,如下图所示。

datasource/datasource-17

4.1.5.5 数据源排序

​ 在数据源数量较多时,可以对数据源进行排序,将鼠标悬浮在数据源上,点击排序向前、排序向后按钮即可调整数据源顺序。

4.1.5.6 文件数据源导出

  如果需要将文件数据源的数据导出,可将鼠标悬浮在文件数据源上,点击导出按钮可以导出数据源数据,如下图所示。

datasource/datasource-18

4.1.5.7 数据集迁移

  如果需要将某个数据源下的数据集迁移到另一个数据源,可将鼠标悬浮在数据源上,点击数据集迁移按钮,在弹出的窗口中按项目和数据集进行选择。如下图所示。

datasource/datasource-19

datasource/datasource-20

【注意】数据集迁移需要保证两个数据源中的表结构完全一致,包含:表名,字段名以及字段类型等。

4.1.5.8 数据过滤

​ 数据源的数据过滤功能可以通过用户设置的过滤字段与系统变量的联系,将原始数据进行过滤。将鼠标悬浮在数据源上,点击数据源右上角的数据过滤按钮,即可在弹出窗口中进行设置,如下图所示。详细的说明请参见第4.4节。

datasource/datasource-21

datasource/datasource-22

4.1.5.9 数据源链接信息加密(V5.6.01版本及以后支持该功能)

  在创建数据源时,用户可以选择对数据源的信息进行加密,并在页面中输入加密后的信息,同时勾选“数据库链接信息已加密”。在后台获取数据源链接信息时,根据“数据库链接信息已加密”标识,通过解密方法对加密信息进行解密,连接池使用解密后的信息连接数据源。

  可以进行加密的数据库链接信息包括:数据库地址,数据库端口,数据库/ODBC,用户名,密码;

datasource/datasource-27

  如果用户选择自定义URL,则连接数据库URL也需要进行加密。

datasource/datasource-28

密文的生成方法请参考 单点部署中的《4.1.2 密文的生成》

如果要修改DataViz默认的加密解密方法,可以参考《敏感信息加密、解密扩展方法》

results matching ""

    No results matching ""

    results matching ""

      No results matching ""