Elasticsearch的Transforms介紹

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

準備數據

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

 

 

 

 

 

 點擊 Add data 按鈕:ubuntu

 

 

 這樣咱們就完成了 eCommerce 數據的導入。若是您還不熟悉kibana_sample_data_ecommerce索引,請使用Kibana中的 Revenue儀表板瀏覽數據。 考慮一下你可能想今後電子商務數據中得到什麼看法:elasticsearch

 

 

 

 

 

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

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

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

下面,咱們來作一個練習。打開 Kibana:
ide

 

 

 咱們點擊上面的 Create your first transformui

 

 

 點擊上面的 [eCommerce] Orders:spa

 

 

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

 

 

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

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

 

 

 點擊上面的 Next:

 

 

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

 

 

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

 

 

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

 

 

 

咱們能夠看到全部的轉換的細節。

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

 

 

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

 

 

 使用 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


原文連接:https://blog.csdn.net/ubuntutouch/java/article/details/106261158

相關文章
相關標籤/搜索