Consultas de clave de fila estructuradas
Si una tabla tiene un esquema de clave de fila que define claves de fila estructuradas, puedes usar SQL para consultar los segmentos individuales (o columnas) de la clave de fila.
Las vistas materializadas continuas, incluidos los índices secundarios globales, generan claves de fila estructuradas de forma predeterminada. También puedes definir una clave de fila estructurada para cualquier tabla de Bigtable que desees consultar con SQL. Para ello, crea un esquema de clave de fila para la tabla. Para obtener más información, consulta Administra clave de fila de fila.
Claves
En una tabla de Bigtable sin un esquema de clave de fila estructurado, cada fila se indexa según una sola clave de fila. Cuando consultas la tabla con SQL, la clave de fila es una columna llamada _key
que SQL usa como clave primaria. No es una seudocolumna, por lo que se muestran los valores de la columna _key
cuando ejecutas una consulta SELECT *
en la tabla.
Por otro lado, en una tabla que tiene un esquema de clave de fila, la clave de fila (clave primaria) es la combinación de todas las columnas denominadas como campos en el esquema de clave de fila. Cuando agregas un esquema de clave de fila a una tabla, la columna _key
se convierte en una seudocolumna, lo que significa que no aparecerá en una consulta SELECT *
, pero puedes seleccionarla de forma explícita con una instrucción SELECT _key
.
Consultas de muestra
En los ejemplos de esta sección, se supone que una tabla llamada sales
tiene el siguiente esquema:
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 tabla sales
contiene los siguientes datos. La familia de columnas product
tiene dos columnas.
clave de fila | producto | |
---|---|---|
product_type | product_name | |
"user1#2025-05-20#abcd1233" | "teléfono" | "iPhone16_pro_max" |
"user1#2025-05-20#abcd1235" | "zapatos" | "nike_hyperdunk" |
"user2#2025-05-24#defg456" | "headphones" | "sony_wh_1000mx5" |
Resultados de la consulta de clave de fila estructuradas
Debido a que la tabla sales
tiene claves de fila estructuradas, si consultas la tabla con una instrucción SELECT *
, la consulta devuelve cada segmento de la clave de fila como una columna independiente. Al igual que en cualquier consulta en SQL a una tabla de Bigtable, las columnas de una familia de columnas se expresan como mapas.
SELECT * from sales
Los resultados se ven de la siguiente manera:
user_id | purchase_date | order_number | producto |
---|---|---|---|
usuario1 | 2025-05-20 | "abcd1233" | { product_type: "phone", product_name: "iPhone16_pro_max" } |
usuario1 | 2025-05-20 | "abcd1235" | { product_type: "shoes", product_name: "nike_hyperdunk" } |
usuario2 | 2025-05-24 | "defg456" | { product_type: "headphones", product_name: "sony_wh_1000mx5" } |
También puedes especificar las columnas de clave de fila en tu consulta, como se muestra en el siguiente ejemplo:
SELECT
product[product_type] AS product_type,
product[product_name] AS product_name
FROM sales
WHERE user_id = b"user1"
Los resultados se ven de la siguiente manera:
product_type | product_name |
---|---|
"teléfono" | "iphone16_pro_max" |
"zapatos" | "nike_hyperdunk" |
Filtros
Puedes filtrar las columnas del esquema de clave de fila con funciones de SQL. En el siguiente ejemplo, se supone que CURRENT_DATE()
devuelve 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"
Los resultados son los siguientes:
user_id | product_name |
---|---|
usuario2 | "sony_wh_1000mx5" |
Consultas agregadas
En el siguiente ejemplo, se muestra cómo usar una consulta de agregación en campos de clave de fila estructurados:
SELECT
user_id,
product[product_type] AS product_type,
count(*) AS count
FROM sales
GROUP BY 1, 2
Los resultados de la búsqueda son los siguientes:
user_id | product_type | count |
---|---|---|
usuario1 | teléfono | 1 |
usuario1 | zapatos | 1 |
usuario2 | audífonos | 1 |
Clave de fila original
Para recuperar la clave de fila original en una tabla con claves de fila estructuradas, especifica la columna _key
en tu consulta.
SELECT
_key, user_id
FROM sales
La consulta muestra lo siguiente:
_key | user_id |
---|---|
"user1#2025-05-20#abcd1233" | usuario1 |
"user1#2025-05-20#abcd1235" | usuario1 |
"user2#2025-05-24#defg456" | usuario2 |