Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del 1 de noviembre de 2025. Si desea utilizar las UDF de Python, créelas antes de esa fecha. Las UDF de Python existentes seguirán funcionando con normalidad. Para obtener más información, consulte la publicación del blog
Ejemplos de UNNEST
UNNEST es un parámetro de la cláusula FROM que expande los datos anidados en columnas que contienen los elementos no anidados de los datos. Para obtener información sobre cómo anular el anidamiento de los datos, consulte Consulta de datos semiestructurados.
La siguiente instrucción crea y rellena la tabla orders
, que contiene una columna products
con matrices de ID de productos. En los ejemplos de esta sección se utilizan los datos de ejemplo de esta tabla.
CREATE TABLE orders ( order_id INT, products SUPER ); -- Populate table INSERT INTO orders VALUES (1001, JSON_PARSE('[ { "product_id": "P456", "name": "Monitor", "price": 299.99, "quantity": 1, "specs": { "size": "27 inch", "resolution": "4K" } } ] ')), (1002, JSON_PARSE(' [ { "product_id": "P567", "name": "USB Cable", "price": 9.99, "quantity": 3 }, { "product_id": "P678", "name": "Headphones", "price": 159.99, "quantity": 1, "specs": { "type": "Wireless", "battery_life": "20 hours" } } ] '));
A continuación se muestran algunos ejemplos de consultas de anulación de anidamiento con los datos de ejemplo mediante la sintaxis PartiQL.
Anulación del anidamiento de una matriz sin una columna OFFSET
La siguiente consulta anula el anidamiento de las matrices SUPER en la columna products, donde cada fila representa un elemento del pedido en order_id
.
SELECT o.order_id, unnested_products.product FROM orders o, UNNEST(o.products) AS unnested_products(product);
order_id | product ----------+----------------------------------------------------------------------------------------------------------------------------- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} (3 rows)
La siguiente consulta encuentra el producto más caro de cada pedido.
SELECT o.order_id, MAX(unnested_products.product) FROM orders o, UNNEST(o.products) AS unnested_products(product);
order_id | product ----------+----------------------------------------------------------------------------------------------------------------------------- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} (2 rows)
Anulación del anidamiento de una matriz con una columna OFFSET implícita
La siguiente consulta utiliza el parámetro UNNEST ... WITH OFFSET
para mostrar la posición basada en cero de cada producto en la matriz de pedidos.
SELECT o.order_id, up.product, up.offset_col FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);
order_id | product | offset_col ----------+-----------------------------------------------------------------------------------------------------------------------------+------------ 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} | 0 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} | 0 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} | 1 (3 rows)
Dado que la instrucción no especifica un alias para la columna de desplazamiento, Amazon Redshift le asigna el nombre predeterminado offset_col
.
Anulación del anidamiento de una matriz con una columna OFFSET explícita
La siguiente consulta también utiliza el parámetro UNNEST ... WITH OFFSET
para mostrar los productos en las matrices de pedidos. La diferencia entre esta consulta y la del ejemplo anterior es que designa explícitamente la columna de desplazamiento con el alias idx
.
SELECT o.order_id, up.product, up.idx FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);
order_id | product | idx ----------+-----------------------------------------------------------------------------------------------------------------------------+----- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} | 0 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} | 0 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} | 1 (3 rows)