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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Comando SELECT no Amazon QLDB

No Amazon QLDB, use o comando SELECT para recuperar dados de uma ou mais tabelas. No QLDB, cada consulta SELECT é processada em uma transação e está sujeita a um Limite de tempo de espera de transações.

A ordem dos resultados não é específica e pode variar para cada consulta SELECT. Você não deve confiar na ordem dos resultados de nenhuma consulta no QLDB.

Para aprender a controlar o acesso para executar este comando do PartiQL em tabelas específicas, consulte Introdução ao modo de permissões padrão no Amazon QLDB.

Atenção

Quando você executa uma consulta no QLDB sem uma pesquisa indexada, ela invoca uma verificação completa da tabela. O partiQL suporta essas consultas porque é compatível com SQL. No entanto, não execute varreduras de tabela para casos de uso de produção no QLDB. Verificações de tabela podem causar problemas de performance em tabelas grandes, incluindo conflitos de simultaneidade e tempos limite de transação.

Para evitar verificações de tabelas, você deve executar instruções com uma WHERE cláusula de predicado usando um operador de igualdade em um campo indexado ou em uma ID do documento, por exemplo, WHERE indexedField = 123 ou WHERE indexedField IN (456, 789). Para obter mais informações, consulte Otimizar a performance da consulta.

Sintaxe

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

Parâmetros

VALUE

Um qualificador para sua expressão que faz com que a consulta retorne o valor do tipo de dados bruto, em vez de o valor ser encapsulado em uma estrutura de tuplo.

expressão

Uma projeção formada a partir do curinga * ou uma lista de projeção de um ou mais campos de documentos do conjunto de resultados. Uma expressão pode consistir em chamadas para Funções PartiQL ou campos que são modificados por operadores PartiQL.

AS field_alias

(Opcional) Um alias temporário definido pelo usuário para o campo usado no conjunto de resultados final. A palavra-chave AS é opcional.

Se você não especificar um alias para uma expressão que não for um nome de campo simples, o conjunto de resultados aplicará um nome padrão à coluna.

DE origem

Uma origem a ser consultada. As únicas origens atualmente suportadas são nomes de tabelas, junções internas entre tabelas, consultas SELECT aninhadas (sujeitas aLimitações de consulta aninhada) e chamadas de função de histórico para uma tabela.

Você deve especificar pelo menos uma origem. Várias origens devem ser separadas por vírgulas.

COMO source_alias

(Opcional) Um alias definido pelo usuário que varia em uma origem a ser consultada. Todos os aliases de origem usados na cláusula SELECT OU WHERE devem ser declarados na cláusula FROM. A palavra-chave AS é opcional.

AT idx_alias

(Opcional) Um alias definido pelo usuário que se vincula ao número de índice (ordinal) de cada elemento em uma lista da origem. O alias deve ser declarado na cláusula FROM usando a palavra-chave AT.

BY id_alias

(Opcional) Um alias definido pelo usuário que se vincula ao campo de metadados id de cada documento no conjunto de resultados. O alias deve ser declarado na cláusula FROM usando a palavra-chave BY. Isso é útil quando você deseja projetar ou filtrar a ID do documento ao consultar a visualização padrão do usuário. Para obter mais informações, consulte Usando a cláusula BY para consultar a ID do documento.

WHERE condição

Os critérios de seleção e os critérios de junção (se aplicável) para a consulta.

nota

Se você omitir a cláusula WHERE, todos os documentos na tabela serão restaurados.

Junções

No momento, há suporte apenas para junções internas. Você pode escrever consultas de junção interna usando a cláusula INNER JOIN explícita, da seguinte maneira. Nessa sintaxe, JOIN deve estar emparelhado com ON, e a palavra-chave INNER é opcional.

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

Ou você pode escrever junções internas usando a sintaxe implícita, da seguinte maneira.

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

Limitações de consulta aninhada

Você pode escrever consultas aninhadas (subconsultas) dentro de SELECT expressões e origens FROM. A principal restrição é que somente a consulta mais externa pode acessar o ambiente de banco de dados global. Por exemplo, suponha que você tenha um ledger com tabelas VehicleRegistration e Person. A consulta aninhada a seguir não é válida porque a interna SELECT tenta acessar Person.

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

Já a consulta aninhada a seguir é válida.

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

Exemplos

A consulta a seguir mostra um caractere curinga SELECT básico com uma cláusula de predicado WHERE padrão que usa o operado IN.

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

A seguir, são mostradas projeções SELECT com um filtro de string de caracteres.

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

O exemplo a seguir mostra uma subconsulta correlacionada que nivela os dados aninhados. Observe que o caractere @ é tecnicamente opcional aqui. Mas isso indica explicitamente que você deseja a estrutura Owners que está aninhada emVehicleRegistration, não nome da coleção Owners diferente (se houver). Para obter mais contexto, consulte Dados aninhados no capítulo Trabalhar com dados e histórico.

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

Veja a seguir uma subconsulta na lista SELECT que projeta dados aninhados, além de uma junção interna.

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')

O exemplo a seguir mostra uma junção 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')

Veja a seguir uma projeção do campo de id metadados do documento, usando a cláusula BY.

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

O exemplo usa a cláusula BY para unir as tabelas DriversLicense e Person em seus PersonId e campos do documento id, respectivamente.

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

O exemplo usa Visão confirmada para unir as tabelas DriversLicense e Person em seus PersonId e campos do documento id, respectivamente.

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

O exemplo a seguir retorna o número de índice PersonId e (ordinal) de cada pessoa na lista Owners.SecondaryOwners para um documento na tabela VehicleRegistration.

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

Executando programaticamente usando o driver

Para saber como executar programaticamente essa instrução usando o driver QLDB, consulte os seguintes tutoriais em Conceitos básicos do driver: