Consultar Ion con PartiQL - 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.

Consultar Ion con PartiQL

Cuando consulta datos en Amazon QLDB, escribe declaraciones en formato PartiQL, pero QLDB devuelve los resultados en formato Amazon Ion. Se pretende que PartiQL sea compatible con SQL, mientras que Ion es una extensión de JSON. Esto lleva a diferencias sintácticas entre la forma en que anota los datos en sus declaraciones de consulta y la forma en que se muestran los resultados de la consulta.

En esta sección se describe la sintaxis y la semántica básicas para ejecutar instrucciones PartiQL de forma manual mediante laConsola QLDBo elShell QLDB.

sugerencia

Cuando se ejecutan consultas PartiQL mediante programación, la práctica recomendada es utilizar instrucciones parametrizadas. Puede utilizar un signo de interrogación (?) como un marcador de posición de variable de enlace en sus instrucciones para evitar estas reglas sintácticas. Esto también es más seguro y eficiente.

Para obtener más información, consulte los siguientes tutoriales enIntroducción al conductor:

Sintaxis y semántica

Cuando se usa la consola de QLDB o el shell de QLDB para consultar datos de Ion, la sintaxis y la semántica fundamentales de PartiQL son las siguientes:

Sensibilidad de mayúsculas y minúsculas

Todos los nombres de objeto del sistema QLDB, incluidos los nombres de campo, los nombres de tabla y los nombres de libro mayor, distinguen entre mayúsculas y minúsculas.

Valores de cadena

En Ion, comillas dobles ("...") denotan uncadena.

En PartiQL, las comillas simples ('...') denotan una cadena.

Símbolos e identificadores

En Ion, comillas simples ('...') denotan unsymbol. Un subconjunto de símbolos en Ion llamadoIdentificadores dese representan con texto sin comillas.

En PartiQL, comillas dobles ("...") denotan un identificador PartiQL citado, como unPalabra reservadaque se usa como nombre de tabla. El texto sin comillas representa un identificador PartiQL normal, como un nombre de tabla que no es una palabra reservada.

Literales Ion

Cualquier literal de Ion se puede indicar con acentos graves (`...`) en una instrucción PartiQL.

Nombres de los campos

Los nombres de campo iónico son símbolos que distinguen entre mayúsculas PartiQL le permite denotar nombres de campo con comillas simples en una sentencia DML. Esta es una alternativa abreviada al uso de PartiQLcastfunción para definir un símbolo. También es más intuitivo que usar acentos graves para denotar un símbolo Ion literal.

Literales

Los literales del lenguaje de consulta PartiQL corresponden a los tipos de datos de Ion, de la siguiente manera:

Escalares

Siga la sintaxis de SQL cuando corresponda, como se describe enMapeo de tipos de iones parcialessección. Por ejemplo:

  • 5

  • 'foo'

  • null

Structs

También se conocen como tuplas u objetos en muchos formatos y otros modelos de datos.

Denotado por llaves ({...}) constructelementos separados por comas.

  • { 'id' : 3, 'arr': [1, 2] }

Lists

También conocido como arreglos.

Indicado por corchetes ([...]) con elementos de lista separados por comas.

  • [ 1, 'foo' ]

Bolsos

Colecciones desordenadas en PartiQL.

Indicado por corchetes angulares dobles (<<...>>) con elementos de la bolsa separados por comas. En QLDB, una mesa se puede concebir como una bolsa. Sin embargo, una bolsa no se puede anidar dentro de los documentos de una tabla.

  • << 1, 'foo' >>

Ejemplo

A continuación se muestra un ejemplo de la sintaxis de unINSERTcon varios tipos de iones.

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` }

.

PartiQL cubre completamente todos los tipos de datos de Ion, por lo que puede escribir cualquier declaración sin usar acentos graves. Pero hay casos en los que esta sintaxis literal de Ion puede hacer que sus declaraciones sean más claras y concisas.

Por ejemplo, para insertar un documento con valores de símbolo y marca de tiempo de Ion, puede escribir la siguiente declaración utilizando únicamente la sintaxis PartiQL.

INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }

Esto es bastante detallado, por lo que, en su lugar, puede usar acentos inversos para simplificar su declaración.

INSERT INTO myTable VALUE { 'myTimestamp': `2019-09-04T`, 'mySymbol': `foo` }

También puede incluir toda la estructura en acentos graves para ahorrar unas cuantas pulsaciones de teclas más.

INSERT INTO myTable VALUE `{ myTimestamp: 2019-09-04T, mySymbol: foo }`
importante

Las cadenas y los símbolos son clases diferentes en PartiQL. Esto significa que aunque tengan el mismo texto, no son iguales. Por ejemplo, las siguientes expresiones PartiQL se evalúan en diferentes valores de Ion.

'foo'
`foo`

Navegación por rutas

Al escribir instrucciones de consulta o lenguaje de manipulación de datos (DML), puede acceder a los campos dentro de las estructuras anidadas mediante pasos de ruta. PartiQL admite la notación de puntos para acceder a los nombres de campo de una estructura principal. En el siguiente ejemplo se accede alModelcampo de un padreVehicle.

Vehicle.Model

Para acceder a un elemento específico de una lista, puede usar el operador de corchetes para indicar un número ordinal basado en cero. En el siguiente ejemplo se accede al elemento deSecondaryOwnerscon un número ordinal de2. En otras palabras, este es el tercer elemento de la lista.

SecondaryOwners[2]

Alias de)

QLDB admite contenido y esquema abiertos. Por lo tanto, cuando accedes a campos concretos de una declaración, la mejor manera de asegurarte de obtener los resultados esperados es usar alias. Por ejemplo, si no especificas un alias explícito, el sistema genera uno implícito para tuFROMOrígenes.

SELECT VIN FROM Vehicle --is rewritten to SELECT Vehicle.VIN FROM Vehicle AS Vehicle

Sin embargo, los resultados son impredecibles para los conflictos de nombres de campo. Si hay otro campo llamadoVINexiste en una estructura anidada dentro de los documentos, elVINlos valores devueltos por esta consulta pueden sorprenderle. Como práctica recomendada, escriba la siguiente instrucción en su lugar. Esta consulta declaravcomo un alias que abarca elVehiclemesa. LaASes opcional.

SELECT v.VIN FROM Vehicle [ AS ] v

El uso de alias es particularmente útil cuando se aplican rutas a colecciones anidadas dentro de un documento. Por ejemplo, la siguiente instrucción declara:ocomo un alias que abarca toda la colecciónVehicleRegistration.Owners.

SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o

La@es opcional desde el punto de visto técnico. Sin embargo, indica explícitamente que usted quiere elOwnersEstructura dentroVehicleRegistration, no una colección diferente llamadaOwners(si existiera alguno).

Especificación PartiQL

Para obtener más información acerca del lenguaje de consulta PartiQL, consulte laEspecificación PartiQL.