Elasticsearch:Transforms 介紹

Transforms 使您能夠從 Elasticsearch 索引中檢索信息,對其進行轉換並將其存儲在另一個索引中。 使您能夠透視數據並創建以實體爲中心的索引,這些索引可以彙總實體的行爲。 這會將數據組織成易於分析的格式。讓我們使用Kibana示例數據來演示如何使用變換來透視和彙總數據。

準備數據

在今天的練習中,我們將以 eCommerce 訂單的樣本例子來做練習。首先,我們來把數據導入到 Elasticsearch 中:

點擊 Add data 按鈕:

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

 

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

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

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

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

我們點擊上面的 Create your firset transform

點擊上面的 [eCommerce] Orders:

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

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

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

點擊上面的 Next:

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

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

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

我們可以看到所有的轉換的細節。

我們接下來到 Discover 中去查看我們最新生產的一個索引:ecommerce-customer-sales

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

在上面,我們可以看到有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 的管理頁面看到:

 

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

POST _transform/ecommerce_transform/_start

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

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

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

從上面我們可以看到有 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

參考:

【1】https://www.elastic.co/guide/en/elasticsearch/reference/7.7/ecommerce-transforms.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章