開發與維運

【最佳實踐】Transforms數據透視讓Elasticsearch數據更易分析

image.png

準備數據

在今天的練習中,我們將以 eCommerce 訂單的樣本例子來做練習。
首先,準備阿里雲elasticsearch 6.7 版本環境,並使用創建的賬號密碼登錄Kibana,將數據導入到 Elasticsearch 中:

image.png
image.png

點擊 Add data 按鈕:

image.png

這樣我們就完成了 eCommerce 數據的導入。如果您還不熟悉kibana_sample_data_ecommerce索引,請使用Kibana中的 Revenue儀表板瀏覽數據。 考慮一下你可能想從此電子商務數據中獲得什麼見解:

image.png
image.png

使用各種選項進行分組和彙總

透視數據涉及使用至少一個字段對其進行分組並應用至少一項聚合。 你可以預覽轉換後的數據,然後繼續進行操作!

例如,你可能想按產品ID對數據進行分組,並計算每種產品的銷售總數及其平均價格。 另外,你可能希望查看單個客戶的行為,並計算每個客戶總共花費了多少以及他們購買了多少種不同類別的產品。 或者,你可能需要考慮貨幣或地理位置。 轉換和解釋這些數據最有趣的方式是什麼?

下面,我們來做一個練習。打開 Kibana:

image.png

我們點擊上面的 Create your firset transform:

image.png

點擊上面的 [eCommerce] Orders:

image.png

我們在上面進行一些感興趣的項進行選擇:

image.png

我們在屏幕的右方可以看到 Transform pivot preview。它顯示的就像是一個表格的形式,而裡面的數據是我們原始的數據裡沒的信息,比如它含有 products.quantity 的總和等。

我們點擊當前頁面的 Next 按鈕:

image.png

點擊上面的 Next:

image.png

我們點擊上面的 Create and start 按鈕:

image.png

上面的 progress 顯示 transform 的進度。已經完成100%了。點擊上面的紅色框,我們就可以回到 Transform 的管理頁面了。

image.png

在上面,它顯示我們的 Transform 已經完成了。狀態是 stopped。這是因為我們的數據量還不是很大的緣故。我們點擊上面的向下的擴展箭頭:

image.png

我們可以看到所有的轉換的細節。
我們接下來到 Discover 中去查看我們最新生產的一個索引:ecommerce-customer-sales

image.png

我們選中 ecommerce-customer-sales 索引:

image.png

在上面,我們可以看到有3321個文檔,而且每個文檔裡含有的信息如上所示。它顯示了當前用戶的花費信息。我們可以針對這個所以來進行搜索。這些數據在很多時候非常有用,比如在進行機器學習時,我們可以生產這樣的索引,對數據進行分析。

使用 API 來完成 transform

上面我們使用了 Kibana 中的 GUI 來完成這個工作。實際上我們也可以使用 API 的方式來完成這個工作。
我們先定義一個需要被使用的 pipeline:

PUT _ingest/pipeline/add_timestamp_pipeline
{
  "description": "Adds timestamp to documents",
  "processors": [
    {
      "script": {
        "source": "ctx['@timestamp'] = new Date().getTime();"
      }
    }
  ]
}

執行上面的指令。然後執行下面的指令:

PUT _transform/ecommerce_transform
{
  "source": {
    "index": "kibana_sample_data_ecommerce",
    "query": {
      "term": {
        "geoip.continent_name": {
          "value": "Asia"
        }
      }
    }
  },
  "pivot": {
    "group_by": {
      "customer_id": {
        "terms": {
          "field": "customer_id"
        }
      }
    },
    "aggregations": {
      "max_price": {
        "max": {
          "field": "taxful_total_price"
        }
      }
    }
  },
  "description": "Maximum priced ecommerce data by customer_id in Asia",
  "dest": {
    "index": "kibana_sample_data_ecommerce_transform",
    "pipeline": "add_timestamp_pipeline"
  },
  "frequency": "5m",
  "sync": {
    "time": {
      "field": "order_date",
      "delay": "60s"
    }
  }

在上面,我們定義了一個 持續 transform,也就是說每隔5分鐘的時間,它會檢查最新的數據,並進行轉換。這個在 frequency 裡有定義。當我們執行上面的命令後,我們可以在 transform 的管理頁面看到:

image.png

我們看到一個新的 Transform 已經生產,而且它是一個 continuous 的 transform。我們可以點擊 Start 按鈕來執行它。我們也可以使用如下的 API 來啟動這個 transform:
POST _transform/ecommerce_transform/_start

當我們執行完上面的命令後,我們再次查看 transform 的管理頁面:

image.png

從上面我們可以看出來這個 transform 已經被啟動,而且是一種在運行的狀態。我們可以點擊 Stop 來停止這個 transform,如果我們不想運行的話。

由於上面的命令沒有為新創建的索引 kibana_sample_data_ecommerce_transform 創建一個index pattern,我們需要自己手動來創建一個 index pattern。等我們創建完後,打開 Discover 來查看新的 transform 索引:

image.png

image.png

從上面我們可以看到有 13 個文檔,這是因為我們只關心 Asia 的數據。所有的數據是以 customer_id 來分組的。它顯示了這個 customer 的最大價格。在上面我們看到我們也有一個通過 pipeline 寫入的當前時間。

有興趣的開發者,可以嘗試寫入一個新的文檔到 kibana_sample_data_ecommerce 索引,並且是 Asia 的,我們可以看看是否有多一個文檔在 kibana_sample_data_ecommerce_transform 索引中。

我們可以通過如下的 API 來刪除這個 transform:

POST _transform/ecommerce_transform/_stop
DELETE _transform/ecommerce_transform

聲明:本文由原文作者“Elastic 中國社區佈道師——劉曉國”授權轉載,對未經許可擅自使用者,保留追究其法律責任的權利。
出處鏈接:https://elasticstack.blog.csdn.net/.


image.png

阿里雲Elastic Stack】100%兼容開源ES,獨有9大能力,提供免費X-pack服務(單節點價值$6000)

相關活動


更多折扣活動,請訪問阿里雲 Elasticsearch 官網

阿里雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里雲 Logstash 2核4G首月免費


image.png

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *