Comando SELECT en Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Comando SELECT en Amazon QLDB

En Amazon QLDB, utilice el comando SELECT para recuperar datos de una o más tablas. En QLDB, cada consulta SELECT se procesa en una transacción y está sujeta a un límite de tiempo de espera de la transacción.

El orden de los resultados no es específico y puede variar para cada consulta SELECT. No debe confiar en el orden de los resultados para ninguna consulta en QLDB.

Para obtener información sobre cómo controlar el acceso para ejecutar este comando PartiQL en tablas específicas, consulte Introducción al modo de permisos estándar en Amazon QLDB.

aviso

Cuando ejecuta una consulta en QLDB sin una búsqueda indexada, se invoca un escaneo completo de la tabla. PartiQL admite este tipo de consultas porque es compatible con SQL. Sin embargo, no ejecute escaneados de tablas para casos de uso de producción en QLDB. Los escaneados de tablas pueden provocar problemas de rendimiento en tablas grandes, como conflictos de concurrencia y tiempos de espera de las transacciones.

Para evitar el escaneado de tablas, debe ejecutar las instrucciones con una cláusula de predicado WHERE usando un operador de igualdad en un campo indexado o en un ID de documento, por ejemplo WHERE indexedField = 123 o WHERE indexedField IN (456, 789). Para obtener más información, consulte Optimizar el rendimiento de las consul‎tas‎.

Sintaxis

SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ] FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ] [ WHERE condition ]

Parámetros

VALUE

Un calificador para la expresión que hace que la consulta devuelva el valor del tipo de datos sin procesar, en lugar de incluir el valor en una estructura de tupla.

expression

Una proyección formada a partir del comodín * o una lista de proyección de uno o más campos de documentos del conjunto de resultados. Una expresión puede consistir en llamadas a Funciones de PartiQL o campos modificados por Operadores PartiQL.

AS field_alias

(Opcional) Un alias temporal definido por el usuario para el campo que se utiliza en el conjunto de resultados finales. La palabra clave AS es opcional.

Si no se especifica un alias para una expresión que no sea un nombre de campo simple, el conjunto de resultados aplica un nombre predeterminado a ese campo.

FROM source

Un origen que se va a consultar. Los únicos orígenes admitidos actualmente son los nombres de las tablas, las combinaciones internas entre tablas, las consultas SELECT anidadas (sujetas a Limitaciones de consultas anidadas) y las llamadas a las funciones del historial de una tabla.

Debe especificar al menos un origen. Los múltiples orígenes deben ir separados por comas.

AS source_alias

(Opcional) Un alias definido por el usuario que se extiende a lo largo de del origen que se va a consultar. Todos los alias de origen que se utilizan en las cláusulas SELECT O WHERE deben declararse en la cláusula FROM. La palabra clave AS es opcional.

AT idx_alias

(Opcional) Un alias definido por el usuario que enlaza con el número de índice (ordinal) de cada elemento de una lista del origen. El alias debe declararse en la cláusula FROM mediante la palabra clave AT.

BY id_alias

(Opcional) Un alias definido por el usuario que se enlaza con el campo id de metadatos de cada documento del conjunto de resultados. El alias debe declararse en la cláusula FROM mediante la palabra clave BY. Esto resulta útil cuando se desea proteger o filtrar por identificador del documento al consultar la vista de usuario predeterminada. Para obtener más información, consulte Uso de la cláusula BY para consultar el identificador del documento.

WHERE condition

Los criterios de selección y los criterios de combinación (si procede) de la consulta.

nota

Si omite la cláusula WHERE, se recuperarán todos los elementos de la tabla.

combinaciones;

Actualmente solo se admiten combinaciones internas. Puede escribir consultas de combinación internas mediante la cláusula INNER JOIN explícita, de la siguiente manera. En esta sintaxis, JOIN debe combinarse con ON y la palabra clave INNER es opcional.

SELECT expression FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element = t2.element

O bien, puede escribir combinaciones internas mediante la sintaxis implícita, de la siguiente manera.

SELECT expression FROM table1 AS t1, table2 AS t2 WHERE t1.element = t2.element

Limitaciones de consultas anidadas

Puede escribir consultas anidadas (subconsultas) dentro de las expresiones SELECT y los orígenes FROM. La principal restricción es que solo la consulta más externa puede acceder al entorno de base de datos global. Por ejemplo, suponga que tiene un libro mayor con tablas VehicleRegistration y Person. La siguiente consulta anidada no es válida porque SELECT interno intenta acceder a Person.

SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r

Mientras que la siguiente consulta anidada es válida.

SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r

Ejemplos

La siguiente consulta muestra un comodín básico SELECT todos con una cláusula de predicado WHERE estándar que utiliza el operador IN.

SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

A continuación se muestran las proyecciones SELECT con un filtro de cadena.

SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'

En el siguiente ejemplo, se muestra una subconsulta correlacionada que aplana datos anidados. En este caso, el carácter @ es técnicamente opcional. Sin embargo, indica de forma explícita que desea la estructura Owners que está anidada en VehicleRegistration, y no una recopilación diferente denominada Owners (si existiera). Para obtener más contexto, consulte Datos anidados en el capítulo Cómo trabajar con datos e historial.

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

A continuación, se muestra una subconsulta de la lista SELECT que proyecta datos anidados, además de una combinación interna implícita.

SELECT v.Make, v.Model, (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

A continuación, se muestra una combinación interna explícita.

SELECT v.Make, v.Model, r.Owners FROM VehicleRegistration AS r JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

A continuación, se muestra una proyección del campo de metadatos id del documento, utilizando la cláusula BY.

SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = 'documentId'

A continuación, se utiliza la cláusula BY para combinar las tablas DriversLicense y Person en sus campos PersonId y id del documento, respectivamente.

SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = 'documentId'

A continuación, se utiliza Vista confirmada para combinar las tablas DriversLicense y Person en sus campos PersonId y id del documento, respectivamente.

SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = 'documentId'

Lo siguiente devuelve el PersonId y el número de índice (ordinal) de cada persona de la lista Owners.SecondaryOwners de un documento de la tabla VehicleRegistration.

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'

Ejecución mediante programación con el controlador

Para aprender a ejecutar esta instrucción mediante programación con el controlador de QLDB, consulte los siguientes tutoriales en Introducción al controlador: