Spring Cloud Spring Cloud Spanner 高級(jí)讀取

2024-01-11 14:55 更新

過時(shí)的閱讀

默認(rèn)情況下,所有讀取和查詢均為強(qiáng)讀取。一個(gè)強(qiáng)大的讀取 是在當(dāng)前時(shí)間戳的讀取,并保證地看到,一直致力于直到這個(gè)讀開始的所有數(shù)據(jù)。一個(gè)閱讀陳舊,另一方面在過去的時(shí)間戳被讀取。Cloud Spanner允許您確定讀取數(shù)據(jù)時(shí)數(shù)據(jù)的最新程度。使用SpannerTemplate,您可以通過將SpannerQueryOptionsSpannerReadOptions上的Timestamp設(shè)置為適當(dāng)?shù)淖x取或查詢方法來指定:

讀:

// a read with options:
SpannerReadOptions spannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.now());
List<Trade> trades = this.spannerTemplate.readAll(Trade.class, spannerReadOptions);

查詢:

// a query with options:
SpannerQueryOptions spannerQueryOptions = new SpannerQueryOptions().setTimestamp(Timestamp.now());
List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT * FROM trades"), spannerQueryOptions);

從二級(jí)索引讀取

可以通過模板API 使用輔助索引進(jìn)行讀取,也可以通過SQL for Queries隱式使用 輔助索引 。

下面顯示了如何通過在SpannerReadOptions上設(shè)置index 來使用二級(jí)索引從表中讀取行

SpannerReadOptions spannerReadOptions = new SpannerReadOptions().setIndex("TradesByTrader");
List<Trade> trades = this.spannerTemplate.readAll(Trade.class, spannerReadOptions);

讀取偏移量和限制

限制和偏移量?jī)H受查詢支持。以下將僅獲取查詢的前兩行:

SpannerQueryOptions spannerQueryOptions = new SpannerQueryOptions().setLimit(2).setOffset(3);
List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT * FROM trades"), spannerQueryOptions);

請(qǐng)注意,以上等效于執(zhí)行SELECT * FROM trades LIMIT 2 OFFSET 3。

排序

按鍵讀取不支持排序。但是,對(duì)Template API的查詢支持通過標(biāo)準(zhǔn)SQL以及Spring Data Sort API進(jìn)行排序:

List<Trade> trades = this.spannerTemplate.queryAll(Trade.class, Sort.by("action"));

如果提供的排序字段名稱是域類型屬性的名稱,則將在查詢中使用與該屬性對(duì)應(yīng)的列名稱。否則,假定給定的字段名稱是Cloud Spanner表中列的名稱。可以忽略大小寫,對(duì)Cloud Spanner類型STRING和BYTES的列進(jìn)行排序:

Sort.by(Order.desc("action").ignoreCase())

部分閱讀

僅在使用查詢時(shí)才可以進(jìn)行部分讀取。如果查詢返回的行的列少于要映射到的實(shí)體的列,則Spring Data將僅映射返回的列。此設(shè)置也適用于嵌套結(jié)構(gòu)及其相應(yīng)的嵌套POJO屬性。

List<Trade> trades = this.spannerTemplate.query(Trade.class, Statement.of("SELECT action, symbol FROM trades"),
    new SpannerQueryOptions().setAllowMissingResultSetColumns(true));

如果設(shè)置設(shè)置為false,則查詢結(jié)果中缺少列時(shí)將引發(fā)異常。

查詢與讀取的選項(xiàng)摘要

Feature

Query supports it

Read supports it

SQL

yes

no

Partial read

yes

no

Limits

yes

no

Offsets

yes

no

Secondary index

yes

yes

Read using index range

no

yes

Sorting

yes

no

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)