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á.
SELECTcomando na Amazon QLDB
Importante
Aviso de fim do suporte: os clientes existentes poderão usar a Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte Migrar um Amazon QLDB Ledger para o Amazon Aurora Postgre
Na AmazonQLDB, use o SELECT
comando para recuperar dados de uma ou mais tabelas. Cada SELECT
consulta QLDB é processada em uma transação e está sujeita a um limite de tempo limite de transação.
A ordem dos resultados não é específica e pode variar para cada consulta SELECT
. Você não deve confiar na ordem dos resultados para qualquer consulta emQLDB.
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 na Amazon QLDB.
Atenção
Quando você executa uma consulta QLDB sem uma pesquisa indexada, ela invoca uma verificação completa da tabela. O partiQL suporta essas consultas porque é compatível. SQL No entanto, não execute varreduras de tabela para casos de uso de produção emQLDB. 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 cláusula de predicado WHERE
usando um operador de igualdade em um campo indexado ou em um ID de documento, por exemplo, WHERE indexedField = 123
ou WHERE indexedField IN (456, 789)
. Para ter mais informações, consulte Otimizar a performance da consulta.
Tópicos
Sintaxe
SELECT [ VALUE ]
expression
[ ASfield_alias
] [,expression
, ... ] FROMsource
[ ASsource_alias
] [ ATidx_alias
] [ BYid_alias
] [,source
, ... ] [ WHEREcondition
]
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.
expression
-
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.
- FROM
source
-
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.
- AS
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
OUWHERE
devem ser declarados na cláusulaFROM
. A palavra-chaveAS
é 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-chaveAT
. - 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áusulaFROM
usando a palavra-chaveBY
. Isso é útil quando você deseja projetar ou filtrar o ID do documento ao consultar a visualização padrão do usuário. Para ter mais informações, consulte Usar a cláusula BY para consultar o ID do documento. - WHERE
condition
-
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 em VehicleRegistration
, não uma coleção com um nome 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'
Executar programaticamente usando o driver
Para saber como executar programaticamente essa instrução usando o QLDB driver, consulte os seguintes tutoriais em Introdução ao driver: