簡體   English   中英

DISTINCT ON 如何在 GCP 數據存儲中工作

[英]How does DISTINCT ON work in GCP datastore

假設我有一個名為“審計”的種類,它有以下條目:

租戶ID 跟蹤標識 事件ID
租戶1 traceId1 事件1
租戶1 traceId1 事件2
租戶1 traceId2 事件3
租戶1 traceId2 事件4

我需要獲取 traceId 上唯一的所有行,以第一個條目為准,因此查詢應導致:

租戶ID 跟蹤標識 事件ID
租戶1 traceId1 事件1
租戶1 traceId2 事件3

對於以上內容,我使用select distinct on(traceId) * from audit

盡管這是一個簡單的查詢,但隨着條目的增加,我擔心的是該查詢的性能。 我將在數據存儲中擁有數十萬個條目,但其中 50% 可能在 traceId 上是唯一的。

我讀過數據存儲不用於聚合。 所以,我的問題是:

  1. 在考慮聚合查詢時是否不同?
  2. distinct on 在索引掃描上工作嗎?
  3. distinct on 會增加我的閱讀成本嗎?
  4. 內置索引會處理 distinct on 還是我們應該定義復合索引?

在考慮聚合查詢時是否不同?

distinct on子句確保只返回指定屬性的每個不同值組合的第一個結果。 所以它不被視為聚合查詢。 此外,Datastore 不支持聚合查詢。

基於索引的查詢機制支持廣泛的查詢,適用於大多數應用。 但是,它不支持其他數據庫技術中常見的某些類型的查詢:特別是,Datastore 模式查詢引擎不支持連接和聚合查詢。

您可以在本文檔中閱讀相關信息

distinct on在索引掃描上工作嗎?

是的, distinct on適用於索引掃描,您不能將distinct on應用於任何未索引的屬性。

distinct on會增加我的閱讀成本嗎?

如果您正在使用投影查詢,那么使用distinct on將增加成本,因為它會使查詢超出此處提到的小操作。 如果您不使用投影查詢,那么它將根據實體讀取收費。

內置索引會處理 distinct on 還是我們應該定義復合索引?

如果您將distinct on應用於單個屬性,即select distinct on(traceId) * from audit ,那么它將使用在實體創建期間創建的內置索引。 如果您將distinct on應用於多個屬性,即select distinct on(traceId,eventId) * from audit那么它將不適用於內置索引,您必須創建一個復合索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM