通过Transforms处理和分析数据

Elasticsearch的Transforms功能是一种数据处理和分析工具,用于对数据进行预处理、聚合和转换等操作,Transforms功能可以在不影响原始数据的情况下,对数据进行加工处理,更好地满足数据分析和可视化的需求。本文通过Transforms功能对投篮数据进行转换,并查看转换后的数据。

备工作

  1. 下载样例数据。本文使用Kaggle上的数据集NBA shot logs,该数据集中包含投篮时间、投篮者、投篮点、最近的防守球员、最近的防守球员距离投篮者的距离等投篮数据。下载地址,请参见shot_logs.csv

  2. 创建阿里云Elasticsearch实例。具体操作,请参见创建阿里云Elasticsearch实例。本文使用7.10.0版本Elasticsearch实例。

    说明

    暂不支持8.5版本Elasticsearch实例。

  3. 登录Kibana控制台。具体操作,请参见登录Kibana控制台

  4. 导入数据nba_short_logs,并创建索引。

    1. 在Kibana页面的左上角,选择菜单.png > Kibana > Machine Learning

    2. 单击Data Visualizer页签。

    3. Import data区域,单击Upload file

    4. 单击image.png图标。

    5. 选择shot_logs文件。

    6. 在页面右下角,单击Import

    7. Simple页签下,输入Index name(索引名称)为nba_short_logs,选中Create index pattern(创建索引)。

    8. 单击Import

      数据导入成功后的界面如下图所示。

      image.png

操作步骤

本文通过三种方式实现数据的转换和查看。

方法一:通过Kibana创建转换并查看数据

  1. 在Kibana页面的左上角,选择菜单.png > Management > Stack Management

  2. 在左侧菜单栏,单击Data > Transforms

  3. 单击Create your first transform

  4. 选择nba_short_logs索引。

  5. Configuration区域,Group by选择histogram(GAME_ID),Aggregations选择DRIBBLES.sum、DRIBBLES.avg和DRIBBLES.max。

    image.png
    说明
    • Group by GAME_ID:按比赛ID进行分组。

    • DRIBBLES.sum:每场比赛中所有球员运球的总次数。

    • DRIBBLES.avg:每场比赛中每个球员的平均运球次数。

    • DRIBBLES.max:每场比赛中运球次数最多的球员的运球次数。

  6. Configuration区域右下角,单击Next

  7. Transform details区域,填写Transform ID和Destination index(目的地索引),然后在页面右侧单击Next

  8. Create区域,单击Create and start

    说明

    Progress的进度条变为100%,表示创建完成。

  9. 单击Discover,查看Destination index数据。

    image.png

方法二:通过API创建转换并查看数据

  1. 在Kibana页面的左上角,选择菜单.png > Management > Dev Tools

    1. Console页签中,执行以下命令,通过transform创建转换。

      PUT _transform/test2_nba_shot_logs
      {
          "source": {
          "index": "nba_short_logs"
        },
        "dest" : { 
          "index" : "test2_nba_short_logs"
        },
        "pivot": {
          "group_by": { 
            "game_id": { "terms": { "field": "GAME_ID" }}
          },
          "aggregations": {
            "dribbles_sum": { "sum": { "field": "DRIBBLES" }},
            "dribbles_avg": { "avg": { "field": "DRIBBLES" }},
            "dribbles_max": { "cardinality": { "field": "DRIBBLES" }}
          }
        }
      }
    2. 执行以下命令,通过preview查看转换后的数据。

      POST _transform/_preview
      {
        "source": {
          "index": "nba_shot_logs"
        },
        "dest" : { 
          "index" : "test2_nba_shot_logs"
        },
        "pivot": {
          "group_by": { 
            "game_id": { "terms": { "field": "GAME_ID" }}
          },
          "aggregations": {
            "dribbles_sum": { "sum": { "field": "DRIBBLES" }},
            "dribbles_avg": { "avg": { "field": "DRIBBLES" }},
            "dribbles_max": { "cardinality": { "field": "DRIBBLES" }}
          }
        }
      }

方法三:通过API创建转换并通过Discover查看数据

  1. 创建并启动Transform。

    1. 在Kibana页面的左上角,选择菜单.png > Management > Dev Tools

    2. Console页签中,执行以下命令,创建Transform。

      PUT _transform/test2_nba_shot_logs
      {
          "source": {
          "index": "nba_short_logs"
        },
        "dest" : { 
          "index" : "test2_nba_short_logs"
        },
        "pivot": {
          "group_by": { 
            "game_id": { "terms": { "field": "GAME_ID" }}
          },
          "aggregations": {
            "dribbles_sum": { "sum": { "field": "DRIBBLES" }},
            "dribbles_avg": { "avg": { "field": "DRIBBLES" }},
            "dribbles_max": { "cardinality": { "field": "DRIBBLES" }}
          }
        }
      }
    3. 启动Transform。

      POST _transform/test2_nba_shot_logs/_start
      说明

      Transform默认是关闭的。

  2. 创建索引模式。

    说明

    在Discover中查看数据之前需要先创建索引模式。

    1. 在Kibana页面的左上角,选择菜单.png > Management > Stack Management

    2. 在左侧菜单栏,单击Kibana > Index Patterns

    3. 在页面右上角,单击Create index pattern

    4. Index pattern name中输入转换后的目标索引,即test2_nba_short_logs,单击Next step。

    5. 单击Create index pattern

  3. 通过Discover查看数据。

    1. 在Kibana页面的左上角,选择菜单.png > Kibana > Discover

    2. 选择转换后的目标索引,查看转换后的数据。