主頁 > 資料庫 > es筆記七之聚合操作之桶聚合和矩陣聚合

es筆記七之聚合操作之桶聚合和矩陣聚合

2023-05-26 14:56:57 資料庫

本文首發于公眾號:Hunter后端
原文鏈接:es筆記七之聚合操作之桶聚合和矩陣聚合

桶(bucket)聚合并不像指標(metric)聚合一樣在欄位上計算,而是會創建資料的桶,我們可以理解為分組,根據某個欄位進行分組,將符合條件的資料分到同一個組里,

桶聚合可以有子聚合,意思就是在分組之后,可以在每個組里再次進行聚合操作,聚合的資料就是每個組的資料,

以下是本篇筆記目錄:

  1. 基本桶聚合操作
  2. 過濾聚合
  3. 多桶過濾聚合
  4. 全域聚合
  5. 直方圖聚合
  6. 嵌套聚合
  7. 范圍聚合
  8. 稀有詞聚合
  9. 矩陣聚合

1、基本桶聚合操作

我們可以簡單的先來進行一下桶聚合的操作,比如我們根據 age 欄位對資料進行分組操作:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "bucket_age": {
      "terms": {
        "field": "age",
        "size": 20
      }
    }
  }
}

回傳的資料如下:

{
  ...
  "aggregations" : {
    "bucket_age" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 35,
      "buckets" : [
        {
          "key" : 31,
          "doc_count" : 61
        },
        {
          "key" : 39,
          "doc_count" : 60
        },
        {
          "key" : 26,
          "doc_count" : 59
        },
        ...
      ]
    }
  }
}     

所有的資料在 aggregations.bucket_age.buckets 下,這是一個陣列,key 的內容為 age 的值,doc_count 為該 age 值的資料條數,

其中,bucket_age 為我們定義的桶聚合的名稱,

接下來我們介紹桶聚合和指標聚合的其他操作,

2、過濾聚合

如果我們想針對某特定的資料進行聚合,那么就涉及資料的過濾,篩選出特定的資料進行聚合,

比如我們想篩選出 gender 的值為 "F" 的資料,然后對其進行取平均數的操作,我們可以使用 filter 來如下操作:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "bucket_gender": {
      "filter": {"term": {"gender.keyword": "F"}},
      "aggs": {
        "avg_balance": {"avg": {"field": "balance"}}
      }
    }
  }
}

aggs.bucket_gender 我們使用 filter 對資料進行了一個過濾,篩選出 gender 的值為 "F" 的資料,

注意,在這里,因為我們寫入資料前,沒有預先定義欄位的型別,所以 es 中將其自動轉化成 text 屬性的欄位,所以在查詢的時候用到的是 gender.keyword,意思是對 gender 欄位的內容作為整體進行篩選,

如果本身是 keyword 屬性,就不用加 .keyword 來操作,

與 filter 同級的 aggs,進行針對篩選出的資料進行聚合的操作,這里我們用到的是平均值,

回傳的資料如下:

  ...
  "aggregations" : {
    "bucket_gender" : {
      "doc_count" : 493,
      "avg_balance" : {
        "value" : 25623.34685598377
      }
    }
  }
}

3、多桶過濾聚合

在上一點我們過濾的是單個條件,gender='F' 的情況,如果我們想要實作多個過濾來操作,可以使用 filters,使用方法也不一樣,

比如我們想分別對 gender 的值為 F 和 M 的資料進行均值操作,我們可以一步步來操作,我們先來通過 filters 實作兩個桶的聚合:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "bucket_gender": {
      "filters": {
        "filters": {
          "female": {"term": {"gender.keyword": "F"}},
          "male": {"term": {"gender.keyword": "M"}}
        }
      }
    }
  }
}

回傳的資料就是兩個桶,包含了兩類資料的總數:

  ...
  "aggregations" : {
    "bucket_gender" : {
      "buckets" : {
        "female" : {
          "doc_count" : 493
        },
        "male" : {
          "doc_count" : 507
        }
      }
    }
  }
}

如果想在此基礎上接著對其進行均值計算,和前面的 filter 操作一樣,在第一個 filters 同級的地方,加上我們的指標聚合操作:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "bucket_gender": {
      "filters": {
        "filters": {
          "female": {"term": {"gender.keyword": "F"}},
          "male": {"term": {"gender.keyword": "M"}}
        }
      },
      "aggs": {
        "avg_balance": {"avg": {"field": "balance"}}
      }
    }
  }
}

這樣,在回傳的桶的資料之內,還包含了一個均值的結果:

  ...
  "aggregations" : {
    "bucket_gender" : {
      "buckets" : {
        "female" : {
          "doc_count" : 493,
          "avg_balance" : {
            "value" : 25623.34685598377
          }
        },
        "male" : {
          "doc_count" : 507,
          "avg_balance" : {
            "value" : 25803.800788954635
          }
        }
      }
    }
  }
}

這里我們因為 gender 只有 F 和 M 兩個值,所以沒有第三類資料,對于其他資料,比如 age,有很多值,除了某幾種特定的值外,我們還想獲取剩下的值的資訊,如何操作呢?

這里使用到 other_bucket_key 這個引數,比如我們除了定義的 female 和 male,我們還定義一個 non_gender 欄位來統計非 M 和 F 的值,我們可以這樣操作:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "bucket_gender": {
      "filters": {
        "other_bucket_key": "non_gender", 
        "filters": {
          "female": {"term": {"gender.keyword": "F"}},
          "male": {"term": {"gender.keyword": "M"}}
        }
      }
    }
  }
}

回傳的值如下:

  ...
  "aggregations" : {
    "bucket_gender" : {
      "buckets" : {
        "female" : {
          "doc_count" : 493,
          "avg_balance" : {
            "value" : 25623.34685598377
          }
        },
        "male" : {
          "doc_count" : 507,
          "avg_balance" : {
            "value" : 25803.800788954635
          }
        },
        "non_gender" : {
          "doc_count" : 0,
          "avg_balance" : {
            "value" : null
          }
        }
      }
    }
  }
}

4、全域聚合

如果我們要在限定的范圍內進行聚合,但是又想在全域范圍內獲取聚合資料進行比對,

比如說,我們在 gender='F' 的范圍進行聚合操作:

GET /bank/_search
{
  "size": 0, 
  "query": {"match": {"gender.keyword": "F"}},
  "aggs": {
    "female_balance_avg": {
      "avg": {
        "field": "balance"
      }
    }
  }
}

這里通過 query 操作篩選 gender='F' 的資料,然后對 balance 欄位進行聚合,如果同時我們想要獲取所有資料的 balance 的平均值,我們可以使用 global 來操作,如下:

GET /bank/_search
{
  "size": 0, 
  "query": {"match": {"gender.keyword": "F"}},
  "aggs": {
    "total_balance_avg": {
      "global": {},
      "aggs": {
        "avg_balance": {
          "avg": {"field": "balance"}
        }
      }
    },
    "female_balance_avg": {
      "avg": {
        "field": "balance"
      }
    }
  }
}

這樣就有兩個資料來比對,結果如下:

  ...
  "aggregations" : {
    "female_balance_avg" : {
      "value" : 25623.34685598377
    },
    "total_balance_avg" : {
      "doc_count" : 1000,
      "avg_balance" : {
        "value" : 25714.837
      }
    }
  }
}

5、直方圖聚合

這是個類似于直方圖的區間桶的聚合操作,

比如對于 age 欄位,我們想以 5 為步長進行聚合,如果 age 欄位在 20-50 之間,那么回傳的資料就會類似于 20-24,25-29,30-34... 以及落在這些區間的資料的數量,

而回傳的每條資料并不會是一個區間,而是一個開始的資料,也就是說上面的例子會回傳的 key 是 20,25,30 等,

比如我們想對 age 欄位進行直方圖聚合,步長為 5,用到的聚合的欄位為 histogram,示例如下:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_histogram": {
      "histogram": {
        "field": "age",
        "interval": 5
      }
    }
  }
}

在 histogram 聚合欄位下,field 欄位為我們要進行直方圖聚合的欄位,這里是 age 欄位,interval 欄位為進行劃分的區間,我們定義為 5,

回傳的資料如下:

  ...
  "aggregations" : {
    "age_histogram" : {
      "buckets" : [
        {
          "key" : 20.0,
          "doc_count" : 225
        },
        {
          "key" : 25.0,
          "doc_count" : 226
        }
        ...
    ]
  }
}    

注意: 如果我們進行聚合的區間,比如說 25-29 之間聚合的資料是 0,那么 es 還是會回傳這個區間,不過 doc_count 是 0,不會存在不回傳這個區間 key 的情況,

最小 count 回傳資料

前面我們說了就算區間 count 數是0,這個區間也會回傳,但同時我們也可以規定 min_doc_count 這個引數來回傳只有當區間 count 數大于等于這個值的時候才回傳資料,

假設 age 的區間資料如下:

20-24:5

25-29:0

30-34:2
...

如果我們設定 min_doc_count=2,那么回傳的區間 25-29則不會被回傳,使用示例如下:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_histogram": {
      "histogram": {
        "field": "age",
        "interval": 5,
        "min_doc_count": 2
      }
    }
  }
}

回傳資料:

  ...
  "aggregations" : {
    "age_histogram" : {
      "buckets" : [
        {
          "key" : 20.0,
          "doc_count" : 5
        },
        {
          "key" : 30.0,
          "doc_count" : 2
        },
        ...
     ]
   }
 }

指定回傳區間

前面介紹的示例中,如果資料在 20-50 之間,那么回傳的區間資料就從 20 開始計數(具體的 key 會根據 interval 的設定不一樣,比如設定 Interval=5,key 就會是 20, 25, 30...,如果是設定 Interval=3,那么 key 就會是 18, 21, 24...),

如果我們想從 0 開始計數,即便是 0-20 之間的計數為 0,也想要回傳20之前 0-4,5-9 的數,或者想要回傳 50 之后的資料,包括 50-54,55-59 這種,我們可以使用extended_bounds.minextended_bounds.max 來限定回傳資料的最大最小值,示例如下:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_histogram": {
      "histogram": {
        "field": "age",
        "interval": 5,
        "extended_bounds": {
          "min": 0,
          "max": 90
        }
      }
    }
  }
}

這樣回傳的資料的區間就會在 0-90 之間,即便在全量資料的范圍之外,

注意: 因為在資料區間之外的資料為 0,想要擴展的區間回傳顯示,記得要將最小回傳計數值 min_doc_count 置為 0,

6、嵌套聚合

嵌套聚合,這里針對的是 es 中資料欄位為陣列,陣列元素里又嵌套為物件的情況,官方檔案舉了個例子,新建一個 products 的 index,資料結構如下:

PUT /products
{
    "mappings": {
        "properties" : {
            "resellers" : { 
                "type" : "nested",
                "properties" : {
                    "reseller" : { "type" : "text" },
                    "price" : { "type" : "double" }
                }
            }
        }
    }
}

接下來我們往里添加兩條條資料:

PUT /products/_doc/0
{
  "name": "LED TV", 
  "resellers": [
    {
      "reseller": "companyA",
      "price": 350
    },
    {
      "reseller": "companyB",
      "price": 500
    }
  ]
}

PUT /products/_doc/1
{
  "name": "LED TV", 
  "resellers": [
    {
      "reseller": "companyA",
      "price": 400
    },
    {
      "reseller": "companyB",
      "price": 250
    }
  ]
}

然后我們想要在這兩條資料里的 resellers 陣列欄位里的四個元素里獲取 price 欄位最小值,可以通過 nested.path 來指定 resellers 欄位,然后進行聚合,使用示例如下:

GET /products/_search
{
    "size": 0, 
    "query" : {
        "match" : { "name" : "led tv" }
    },
    "aggs" : {
        "resellers" : {
            "nested" : {
                "path" : "resellers"
            },
            "aggs" : {
                "min_price" : { "min" : { "field" : "resellers.price" } }
            }
        }
    }
}

7、范圍聚合

范圍聚合,即 range 聚合,我們可以通過指定范圍來回傳各個桶的資料,這個操作和直方圖聚合是類似的,不過這個操作更靈活,聚合的范圍不會寫死,

如果是希望步長固定,我們可以使用直方圖聚合,比如0-4,5-9 這種,如果我們直接想要自定義的 0-7,8-19 這種我們想要定義的可以使用范圍聚合,

還是使用 age 欄位來操作,比如我們想要獲取 小于27,28-35,大于36 這個范圍,我們可以如下操作:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_range": {
      "range": {
        "field": "age",
        "ranges": [
          {"to": 27},
          {"from": 27, "to": 35},
          {"from": 35}
        ]
      }
    }
  }
}

需要注意的是,from 的引數是開區間的,比如我們這里 from=27,那么邏輯就是 >27,如果區間兩邊沒有限制,不填寫相應的 from 和 to 引數即可,回傳的 key 也會是 *-27 這種形式,

上面的命令回傳的資料如下:r

  ...
  "aggregations" : {
    "age_range" : {
      "buckets" : [
        {
          "key" : "*-27.0",
          "to" : 27.0,
          "doc_count" : 326
        },
        {
          "key" : "27.0-35.0",
          "from" : 27.0,
          "to" : 35.0,
          "doc_count" : 384
        },
        {
          "key" : "35.0-*",
          "from" : 35.0,
          "doc_count" : 290
        }
      ]
    }
  }
}

如果想要回傳的資料以 key:{} 的形式回傳,可以加上 keyed=true 引數:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_range": {
      "range": {
        "field": "age",
        "keyed": true,
        "ranges": [
          {"to": 27},
          {"from": 27, "to": 35},
          {"from": 35}
        ]
      }
    }
  }
}

桶的子指標聚合

在上面的桶聚合操作之后,我們還可以對每個桶進行子指標聚合,比如說最大最小值,平均值,或者統計值等,以下是個操作示例:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "age_range": {
      "range": {
        "field": "age",
        "ranges": [
          {"to": 27},
          {"from": 27, "to": 35},
          {"from": 35}
        ]
      },
      "aggs": {
        "age_stats": {
          "stats": {
            "field": "age"
          }
        }
      }
    }
  }
}

進行指標聚合的范圍是分到每個桶的資料,

8、稀有詞聚合

rare terms aggregation,這個的概念大概是這樣的,比如我們根據 age 欄位進行聚合,統計他們在檔案中出現的次數,我們想要獲取出現次數最少的幾個,或者指定出現次數少于 50 的 age 值,就可以用到這個操作,

接下來我們對 age 欄位進行這樣的操作,只獲取出現次數少于 50 的資料,示例如下:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "rare_age": {
      "rare_terms": {
        "field": "age",
        "max_doc_count": 50
      }
    }
  }
}

這個的關鍵字是 rare_terms,rare_age 是我們指定的聚合名稱,其下 field 是我們進行聚合欄位,在這里是 age 欄位,max_doc_count 則是我們指定的出現次數最大的值,

回傳的資料會按照 doc_count 正序排列回傳,大致如下:

  ...
  "aggregations" : {
    "rare_age" : {
      "buckets" : [
        {
          "key" : 29,
          "doc_count" : 35
        },
        {
          "key" : 27,
          "doc_count" : 39
        },
        {
          "key" : 38,
          "doc_count" : 39
        },
        ...

范圍過濾

我們還可以使用過濾的方式來指定或者排除某些值,這個操作是支持正則的,但經過測驗,發現按照官方檔案使用正則的 * 來篩選資料并不能真正起作用,所以這里我們介紹使用串列來實作過濾,

比如我們指定的 age 范圍是 [29, 27, 24],使用 include:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "rare_age": {
      "rare_terms": {
        "field": "age",
        "max_doc_count": 51,
        "include": [29, 27, 24]
      }
    }
  }
}

如果我們要排除的 age 范圍是 [29, 27, 24],使用 exclude:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "rare_age": {
      "rare_terms": {
        "field": "age",
        "max_doc_count": 51,
        "exclude": [29, 27, 24]
      }
    }
  }
}

9、矩陣聚合

矩陣聚合是很小的一部分,這里直接介紹一下,

前面在指標聚合的介紹中,有一個聚合統計匯總,其中介紹了一個引數是 stats,會回傳對應欄位的最大值、最小值、總數等資料,矩陣聚合 matrix 可以理解成是多個欄位的 stats 的集合,會缺少一些統計值,但是回傳的值更偏統計學方面的用途,

使用示例如下:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "field_statis": {
      "matrix_stats": {
        "fields": ["age", "balance"]
      }
    }
  }
}

回傳的資料如下:

  ...
  "aggregations" : {
    "field_statis" : {
      "doc_count" : 1000,
      "fields" : [
        {
          "name" : "balance",
          "count" : 1000,
          "mean" : 25714.837000000014,
          "variance" : 1.9757153733576667E8,
          "skewness" : -0.009992486755643138,
          "kurtosis" : 1.8088323899074914,
          "covariance" : {
            "balance" : 1.9757153733576667E8,
            "age" : -2845.650777777781
          },
          "correlation" : {
            "balance" : 1.0,
            "age" : -0.033676422195874786
          }
        },
        {
          "name" : "age",
          "count" : 1000,
          ...
        }
    ...

其中,各引數的釋義如下:

count: 總數

mean: 平均值

variance: 方差

skewness: 偏度

kurtosis: 峰度

covariance: 協方差

correlation: 與其他欄位的相關性,比如 age 到 age 欄位的相關性就是 1.0

如果想獲取更多后端相關文章,可掃碼關注閱讀:
image

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553482.html

標籤:其他

上一篇:快速上手kettle(一)壺之簡介

下一篇:返回列表

標籤雲
其他(159754) Python(38169) JavaScript(25456) Java(18129) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7213) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5341) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1948) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • es筆記七之聚合操作之桶聚合和矩陣聚合

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記七之聚合操作之桶聚合和矩陣聚合](https://mp.weixin.qq.com/s/SFiLEtnUqxncL-ZQj1zqgg) 桶(bucket)聚合并不像指標(metric)聚合一樣在欄位上計算,而是會創建資料的桶,我們可以理 ......

    uj5u.com 2023-05-26 14:56:57 more
  • 快速上手kettle(一)壺之簡介

    ### 一、前言 最近由于作業需要,需要用到kettle工具進行資料遷移轉換。特意找資料學習了一下,kettle基本操作算是學會了。 所學的也結合實際作業進行了驗證。為了防止以后用到忘記了,便寫了幾篇文章記錄一下。 ![快速上手kettle](https://img2023.cnblogs.com/ ......

    uj5u.com 2023-05-26 14:56:03 more
  • Elasticsearch 之 join 關聯查詢及使用場景

    在Elasticsearch這樣的分布式系統中執行類似SQL的join連接是代價是比較大的,然而,Elasticsearch卻給我們提供了基于水平擴展的兩種連接形式 ......

    uj5u.com 2023-05-26 14:55:19 more
  • SQL Server:分頁查詢

    ## 一、分頁查詢 ? 需求描述:客戶端查詢資料庫資料并顯示在表格中。在資料庫中進行一次查詢,查詢結果有1050條記錄,但表格row上限: 100,這時需要給本次查詢記錄分配 `?` 頁用來顯示? 可以通過固定公式進行計算(c偽代碼): ```c # define TABLE_SHOW_ROW 10 ......

    uj5u.com 2023-05-26 14:55:09 more
  • 4)DML操作

    DML操作: Data Manipulation Language,資料操縱語言;包含insert、update、delete操作; 1、單行插入資料格式: insert into 表名【欄位串列】 values(值串列); 向教師表插入: insert into teacher values('0 ......

    uj5u.com 2023-05-26 14:40:52 more
  • 2萬多條茶文化網站文章內容ACCESS資料庫

    這是從一個完整的茶文化網站采集下來的完整的內容,2萬多條的記錄數幾乎包含了關于茶資訊的所有內容,而且內容格式經過嚴謹的整理不會顯示亂七八遭而是統一干爽的格式。憑此資料庫可以創建一個內容建全的茶網站。 模塊包含:茶的種類(497)、茶具知識(139)、茶農資料(1568)、茶葉技術(3437)、茶藝茶 ......

    uj5u.com 2023-05-26 14:36:16 more
  • es筆記七之聚合操作之桶聚合和矩陣聚合

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記七之聚合操作之桶聚合和矩陣聚合](https://mp.weixin.qq.com/s/SFiLEtnUqxncL-ZQj1zqgg) 桶(bucket)聚合并不像指標(metric)聚合一樣在欄位上計算,而是會創建資料的桶,我們可以理 ......

    uj5u.com 2023-05-26 14:35:59 more
  • Elasticsearch 之 join 關聯查詢及使用場景

    在Elasticsearch這樣的分布式系統中執行類似SQL的join連接是代價是比較大的,然而,Elasticsearch卻給我們提供了基于水平擴展的兩種連接形式 ......

    uj5u.com 2023-05-26 14:35:40 more
  • 實體講解Spring boot動態切換資料源

    摘要:本文模擬一下在主庫查詢訂單資訊查詢不到的時候,切換資料源去歷史庫里面查詢。 本文分享自華為云社區《springboot動態切換資料源》,作者:小陳沒煩惱 。 前言 在公司的系統里,由于資料量較大,所以配置了多個資料源,它會根據用戶所在的地區去查詢那一個資料庫,這樣就產生了動態切換資料源的場景。 ......

    uj5u.com 2023-05-26 14:20:35 more
  • 4)DML操作

    DML操作: Data Manipulation Language,資料操縱語言;包含insert、update、delete操作; 1、單行插入資料格式: insert into 表名【欄位串列】 values(值串列); 向教師表插入: insert into teacher values('0 ......

    uj5u.com 2023-05-26 14:12:06 more