全部產品
Search
文件中心

Elasticsearch:通過Transforms處理和分析資料

更新時間:Jun 30, 2024

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. 選擇轉換後的目標索引,查看轉換後的資料。