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á.
Consultando o Ion com o PartiQL 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
Ao consultar dados na AmazonQLDB, você escreve declarações no formato partiQL, mas QLDB retorna os resultados no formato Amazon Ion. O partiQL foi projetado para ser SQL compatível, enquanto o Ion é uma extensão do. JSON Isso leva a diferenças sintáticas entre a forma como você anota os dados em suas instruções da consulta e a forma como os resultados da consulta são exibidos.
dica
Quando você executa consultas partiQL programaticamente, a prática recomendada é usar instruções parametrizadas. Você pode usar um ponto de interrogação (?
) como um espaço reservado para a variável de associação em suas instruções para evitar essas regras de sintaxe. Isso também é mais seguro e eficiente.
Para saber mais, consulte os seguintes tutoriais em Conceitos básicos do driver:
Sintaxe e semântica
Ao usar o QLDB console ou o QLDB shell para consultar dados do Ion, veja a seguir a sintaxe e a semântica fundamentais do partiQL:
- Diferenciação de letras maiúsculas e minúsculas
-
Todos os nomes de objetos QLDB do sistema, incluindo nomes de campos, nomes de tabelas e nomes de livros contábeis, diferenciam maiúsculas de minúsculas.
- Valores de string
-
Em Ion, aspas duplas (
"..."
) denotam uma string. No PartiQL, aspas simples (
'...'
) denotam uma string. - Símbolos e identificadores
-
Em Ion, aspas simples (
'...'
) denotam um símbolo. Um subconjunto de símbolos em Ion chamados identificadores é representado por texto sem aspas. Em PartiQL, aspas duplas (
"..."
) denotam identificadores entre aspas, como uma palavra reservada usada como nome de tabela. O texto sem aspas representa um identificador PartiQL regular, como um nome de tabela que não é uma palavra reservada. - Literais de Ion
-
Qualquer literal de Ion pode ser indicado com acentos graves (
`...`
) em uma instrução partiQL. - Nomes de campos
-
Todos os nomes de campos são símbolos que fazem distinção entre maiúsculas e minúsculas O partiQL permite indicar nomes de campo com aspas simples em uma declaração. DML Essa é uma alternativa abreviada ao uso da função
cast
de PartiQL para definir um símbolo. Também é mais intuitivo do que usar acentos graves para indicar um símbolo literal de Ion.
Literais
Os literais da linguagem de consulta partiQL correspondem aos tipos de dados Ion, da seguinte forma:
- Escalares
-
Siga a SQL sintaxe quando aplicável, conforme descrito na Mapeamento do tipo de PartiQL-Ion seção. Por exemplo: .
-
5
-
'foo'
-
null
-
- Structs
-
Também conhecidos como tuplos ou objetos em vários formatos e outros modelos de dados.
Indicado por chaves (
{...}
) comstruct
elementos separados por vírgulas.-
{ 'id' : 3, 'arr': [1, 2] }
-
- Listas
-
Também conhecidas como matrizes.
Indicada por colchetes (
[...]
) com elementos separados por vírgulas.-
[ 1, 'foo' ]
-
- Bolsas
-
Coleções não ordenadas no PartiQL.
Indicada por maior e menor duplos (
<<...>>
) com elementos separados por vírgulas. DentroQLDB, uma mesa pode ser considerada uma bolsa. No entanto, uma sacola não pode ser aninhada em documentos em uma tabela.-
<< 1, 'foo' >>
-
Exemplo
Veja a seguir um exemplo da sintaxe de uma instrução INSERT
com vários tipos de Ion.
INSERT INTO VehicleRegistration VALUE { 'VIN' : 'KM8SRDHF6EU074761', --string 'RegNum' : 1722, --integer 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, --decimal 'Owners' : { --nested struct 'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ --list of structs { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' }, { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' } ] }, 'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision 'ValidToDate' : `2020-06-25T` }
Notação de acento grave
O partiQL abrange totalmente todos os tipos de dados Ion, para que você possa gravar qualquer instrução sem usar acentos graves. Porém, há casos em que essa sintaxe literal do Ion pode tornar suas instruções mais claras e concisas.
Por exemplo, para inserir um documento com valores de timestamp e símbolo Ion, você pode escrever a seguinte instrução usando somente a sintaxe partiQL.
INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }
Isso é bastante detalhado, então, em vez disso, você pode usar acentos graves para simplificar sua instrução.
INSERT INTO myTable VALUE { 'myTimestamp': `2019-09-04T`, 'mySymbol': `foo` }
Você também pode colocar toda a estrutura em acentos graves para economizar mais algumas teclas.
INSERT INTO myTable VALUE `{ myTimestamp: 2019-09-04T, mySymbol: foo }`
Importante
Strings e símbolos são classes diferentes no PartiQL. Isso significa que, mesmo que tenham o mesmo texto, não são iguais. Por exemplo, as seguintes expressões PartiQL são avaliadas com valores de Ion diferentes.
'foo'
`foo`
Navegação por caminhos
Ao escrever linguagem de manipulação de dados (DML) ou instruções de consulta, você pode acessar campos em estruturas aninhadas usando etapas de caminho. O PartiQL suporta anotação de pontos para acessas os nomes dos campos de uma estrutura principal. O exemplo a seguir acessa o campo Model
de um Vehicle
principal.
Vehicle.Model
Para acessar um elemento específico de uma lista, você pode usar o operador de colchetes para indicar um número ordinal baseado em zero. O exemplo a seguir acessa o elemento de SecondaryOwners
com um número ordinal de 2
. Em outras palavras, esse é o terceiro elemento da lista.
SecondaryOwners[2]
Aliases
QLDBoferece suporte a conteúdo e esquema abertos. Portanto, quando você está acessando campos específicos em uma instrução, a melhor maneira de garantir que você obtenha os resultados esperados é usar aliases. Por exemplo, se você não especificar um alias explícito, o sistema gera um implícito para suas fontes FROM
.
SELECT VIN FROM Vehicle
--is rewritten to
SELECT Vehicle.VIN FROM Vehicle AS Vehicle
Mas os resultados são imprevisíveis para conflitos de nomes de campos. Se outro campo chamado VIN
existir em uma estrutura aninhada nos documentos, os valores VIN
retornados por essa consulta podem surpreendê-lo. Como prática recomendada, escreva a seguinte instrução em vez disso. Essa consulta declara v
como um alias que varia sobre a tabela Vehicle
. A palavra-chave AS
é opcional.
SELECT v.VIN FROM Vehicle [ AS ] v
O uso de aliases é particularmente útil ao criar caminhos em coleções aninhadas em um documento. Por exemplo, a instrução a seguir declara o
como um alias que abrange toda a coleção VehicleRegistration.Owners
.
SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o
O caractere @
é tecnicamente opcional aqui. Mas isso indica explicitamente que você deseja a estrutura Owners
em VehicleRegistration
, não uma coleção com um nome Owners
diferente (se houver).
Especificação PartiQL
Para obter mais informações sobre a linguagem de consulta PartiQL, consulte a Especificação PartiQL