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

Consulta de Ion con PartiQL en Amazon QLDB

Cuando consulta datos en Amazon QLDB, escribe instrucciones en formato PartiQL, pero QLDB devuelve los resultados en formato Amazon Ion. PartiQL está pensado para ser compatible con SQL, mientras que Ion es una extensión de JSON. Esto genera diferencias sintácticas entre la forma de anotar los datos en las instrucciones de consulta y la forma en que se muestran los resultados de la consulta.

En esta sección se describen la sintaxis y la semántica básicas para ejecutar instrucciones de PartiQL manualmente mediante la consola de QLDB o el intérprete de comandos de QLDB.

sugerencia

Al ejecutar consultas de PartiQL mediante programación, la mejor práctica es utilizar instrucciones parametrizadas. Puede utilizar un signo de interrogación (?) como marcador de posición de una variable de enlace en sus instrucciones para evitar estas reglas de sintaxis. Esto también es más seguro y eficiente.

Para obtener más información, consulte los siguientes tutoriales en introducción al controlador:

Sintaxis y semántica

Cuando se utiliza la consola de QLDB o el intérprete de comandos 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 objetos del sistema de QLDB, incluidos los nombres de campos, tablas y libros mayores, distinguen mayúsculas de minúsculas.

Valores de cadena

En Ion, las comillas dobles ("...") indican una cadena.

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

Símbolos e identificadores

En Ion, las comillas simples ('...') indican un símbolo. En Ion, un subconjunto de símbolos denominados identificadores se representa mediante texto sin comillas.

En PartiQL, las comillas dobles ("...") indican identificadores PartiQL entre comillas, como una palabra reservada que se usa como nombre de tabla. El texto sin comillas representa un identificador de PartiQL normal, como el nombre de una tabla que no es una palabra reservada.

Literales de Ion

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

Nombres de los campos

Todos los nombres de campo en Ion distinguen entre mayúsculas y minúsculas. PartiQL permite indicar los nombres de los campos con comillas simples en una instrucción DML. Esta es una alternativa abreviada al uso de la función cast de PartiQL para definir un símbolo. También es más intuitivo que usar acentos graves para denotar un símbolo literal de Ion.

Literales

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

Escalares

Siga la sintaxis SQL cuando proceda, como se describe en la sección Mapeo de tipo PartiQL-Ion. Por ejemplo:

  • 5

  • 'foo'

  • null

Structs

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

Se indican mediante paréntesis ({...}) con los elementos struct separados por comas.

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

Lists

También se conocen como matrices.

Se indican mediante paréntesis ([...]) con los elementos de lista separados por comas.

  • [ 1, 'foo' ]

Bags

Colecciones desordenadas en PartiQL.

Se indican mediante corchetes de doble ángulo (<<...>>) con los elementos de lista separados por comas. En QLDB, una tabla se puede concebir como un bag. Sin embargo, no se puede anidar un bag dentro de los documentos de una tabla.

  • << 1, 'foo' >>

Ejemplo

A continuación, se muestra un ejemplo de la sintaxis de una instrucción INSERT con diversos 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` }

Notación con acentos graves

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

Por ejemplo, para insertar un documento con valores de marca de tiempo y símbolo de Ion, puede escribir la siguiente instrucción utilizando únicamente la sintaxis de 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 utilizar acentos graves para simplificar la instrucción.

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

También puede incluir toda la estructura entre acentos graves para ahorrar algunas pulsaciones del teclado 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 de PartiQL se evalúan en valores de Ion diferentes.

'foo'
`foo`

Navegación de rutas

Al escribir un lenguaje de manipulación de datos (DML) o instrucciones de consulta, puede acceder a los campos dentro de estructuras anidadas mediante pasos de ruta. PartiQL es compatible con la notación de puntos, que permite acceder a los nombres de campo de una estructura principal. En el siguiente ejemplo se accede al campo Model de un Vehicle principal.

Vehicle.Model

Para acceder a un elemento específico de una lista, puede utilizar el operador de corchetes para indicar un número ordinal de base cero. En el ejemplo siguiente se accede al elemento de SecondaryOwners con un número ordinal de 2. En otras palabras, este es el tercer elemento de la lista.

SecondaryOwners[2]

Uso de alias

QLDB admite contenido y esquema abiertos. Por lo tanto, cuando accede a campos concretos de una instrucción, la mejor manera de asegurarse de obtener los resultados esperados es utilizar alias. Por ejemplo, si no especifica un alias explícito, el sistema generará uno implícito para sus orígenes FROM.

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

Sin embargo, los resultados son impredecibles en caso de conflictos de nombres de campo. Si existe otro campo con el nombre VIN en una estructura anidada dentro de los documentos, los valores VIN devueltos por esta consulta pueden sorprenderle. Como práctica recomendada, escriba la siguiente instrucción en su lugar. Esta consulta declara v como un alias que se extiende por encima de la tabla Vehicle. La palabra clave AS es opcional.

SELECT v.VIN FROM Vehicle [ AS ] v

El uso de alias resulta especialmente útil cuando se crea una ruta a colecciones anidadas dentro de un documento. Por ejemplo, la siguiente instrucción declara o como un alias que abarca toda la colección VehicleRegistration.Owners.

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

En este caso, el carácter @ es técnicamente opcional. Sin embargo, indica de forma explícita que desea la estructura Owners dentro de VehicleRegistration y no una recopilación diferente denominada Owners (si existiera).

Especificación de PartiQL

Para obtener más información acerca del lenguaje de consultas de PartiQL, consulte la especificación de PartiQL.