Query con chiave di riga strutturate

Se una tabella ha uno schema di chiavi di riga che definisce chiavi di riga strutturate, puoi utilizzare SQL per eseguire query sui singoli segmenti o colonne della chiave di riga.

Le viste materializzate continue, inclusi gli indici secondari globali, generano chiavi di riga strutturate per impostazione predefinita. Puoi anche definire una chiave di riga strutturata per qualsiasi tabella Bigtable che vuoi interrogare con SQL creando uno schema della chiave di riga per la tabella. Per saperne di più, consulta Gestire chiave di riga riga.

Chiavi

In una tabella Bigtable senza uno schema di chiave di riga strutturato, ogni riga è indicizzata da una singola chiave di riga. Quando esegui una query sulla tabella con SQL, la chiave di riga è una colonna denominata _key che SQL utilizza come chiave primaria. Non è una pseudocolonna, quindi i valori nella colonna _key vengono restituiti quando esegui una query SELECT * sulla tabella.

D'altra parte, in una tabella con uno schema di chiave di riga, la chiave di riga (chiave primaria) è la combinazione di tutte le colonne denominate come campi nello schema della chiave di riga. Quando aggiungi uno schema di chiave di riga a una tabella, la colonna _key diventa una pseudocolonna, il che significa che non verrà visualizzata in una query SELECT *, ma puoi selezionarla in modo esplicito con un'istruzione SELECT _key.

Query di esempio

Gli esempi in questa sezione presuppongono che una tabella denominata sales abbia lo schema seguente:

  field {
    field_name: "user_id"
    type: { bytes_type { encoding { raw {} } } }
  }
  field {
    field_name: "purchase_date"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  field {
    field_name: "order_number"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  encoding {
    delimited_bytes { delimiter "#" }
  }

La tabella sales contiene i seguenti dati. La famiglia di colonne product ha due colonne.

chiave riga prodotto
  product_type product_name
"user1#2025-05-20#abcd1233" "phone" "iPhone16_pro_max"
"user1#2025-05-20#abcd1235" "scarpe" "nike_hyperdunk"
"user2#2025-05-24#defg456" "cuffie" "sony_wh_1000mx5"

Risultati della query sulla chiave di riga strutturata

Poiché la tabella sales ha chiavi di riga strutturate, se esegui una query sulla tabella con un'istruzione SELECT *, la query restituisce ogni segmento della chiave di riga come colonna separata. Come in qualsiasi query SQL a una tabella Bigtable, le colonne in una famiglia di colonne sono espresse come mappe.

  SELECT * from sales

I risultati sono simili ai seguenti:

user_id purchase_date order_number prodotto
utente1 2025-05-20 "abcd1233" { product_type: "phone", product_name: "iPhone16_pro_max" }
utente1 2025-05-20 "abcd1235" { product_type: "shoes", product_name: "nike_hyperdunk" }
utente2 2025-05-24 "defg456" { product_type: "headphones", product_name: "sony_wh_1000mx5" }

Puoi anche specificare le colonne chiave di riga nella query, come mostrato nell'esempio seguente:

  SELECT
    product[product_type] AS product_type,
    product[product_name] AS product_name
  FROM sales
  WHERE user_id = b"user1"

I risultati sono simili ai seguenti:

product_type product_name
"phone" "iphone16_pro_max"
"scarpe" "nike_hyperdunk"

Filtri

Puoi filtrare le colonne dello schema della chiave di riga utilizzando le funzioni SQL. Il seguente esempio presuppone che CURRENT_DATE() restituisca 2025-05-24:

  SELECT
    user_id,
    product["product_name"] AS product_name
  FROM
    sales
  WHERE
    PARSE_DATE("YYYY-MM-DD", purchase_date) = CURRENT_DATE()
    AND user_id = b"user2"

I risultati sono i seguenti:

user_id product_name
utente2 "sony_wh_1000mx5"

Query di aggregazione

L'esempio seguente mostra come utilizzare una query aggregata sui campi della chiave di riga strutturata:

  SELECT
    user_id,
    product[product_type] AS product_type,
    count(*) AS count
  FROM sales
  GROUP BY 1, 2

I risultati della query sono i seguenti:

user_id product_type conteggio
utente1 telefono 1
utente1 scarpe 1
utente2 cuffie 1

Chiave di riga originale

Per recuperare la chiave di riga originale in una tabella con chiavi di riga strutturate, specifica la colonna _key nella query.

  SELECT
    _key, user_id
  FROM sales

La query restituisce quanto segue:

_key user_id
"user1#2025-05-20#abcd1233" utente1
"user1#2025-05-20#abcd1235" utente1
"user2#2025-05-24#defg456" utente2

Passaggi successivi