Elasticsearch的Transforms介紹


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

准備數據

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

 

 

 

 

 

 點擊 Add data 按鈕:

 

 

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

 

 

 

 

 

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

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

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

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

 

 

 我們點擊上面的 Create your first 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 索引:

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM