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 |