Het gebruik bestaat om te ontdekken of een product met een specifieke SKU bestaat

exists(array<T>, function<T, boolean>): boolean

In het bovenstaande fragment wordt de functie exists toegepast op elk element van de array en wordt een booleaanse waarde geretourneerd. De booleaanse waarde geeft aan of er een of meer elementen in de array zijn die aan een opgegeven voorwaarde voldoen. In dit geval wordt bevestigd of een product met een specifieke SKU bestaat.

Voorbeeld

In het onderstaande SQL-voorbeeld haalt de query productListItems op van de geometrixxx_999_xdm_pqs_1batch_10k_rows -tabel en evalueert deze of een element met een SKU gelijk aan 123679 in de productListItems -array bestaat. Vervolgens worden de resultaten gefilterd op basis van een specifieke reeks tijdstempels en worden de uiteindelijke resultaten beperkt tot tien rijen.

SELECT productListItems
FROM geometrixxx_999_xdm_pqs_1batch_10k_rows
WHERE EXISTS( productListItems, value -> value.sku == 123679)
AND timestamp > to_timestamp('2017-11-01 00:00:00')
AND timestamp < to_timestamp('2017-11-02 00:00:00')limit 10;

Resultaat

De resultaten voor deze SQL zouden vergelijkbaar zijn met die hieronder worden weergegeven.

productListItems
-----------------
{(123679, NULL,NULL)}
{(123679, NULL, NULL)}
{(123679, NULL, NULL), (150196, NULL, NULL)}
{(123679, NULL, NULL), (150196, NULL, NULL)}
{(123679, NULL, NULL), (150196, NULL, NULL)}
{(123679, NULL, NULL)}
{(123679, NULL, NULL)}
{(123679, NULL, NULL)}
{(123679, NULL,NULL)}
{(123679,NULL, NULL)}

(10 rows)

Filter gebruiken om producten te zoeken waarbij de SKU > 100000

filter(array<T>, function<T, boolean>): array<T>

Deze functie filtert een array met elementen op basis van een bepaalde voorwaarde die elk element als een booleaanse waarde evalueert. Vervolgens wordt een nieuwe array geretourneerd die alleen elementen bevat waar de voorwaarde een werkelijke waarde heeft geretourneerd.

Voorbeeld

Met de onderstaande query wordt de kolom productListItems geselecteerd, wordt een filter toegepast om alleen elementen met een SKU groter dan 100000 op te nemen en wordt de resultaatset beperkt tot rijen binnen een specifiek tijdstempelbereik. De gefilterde array wordt vervolgens als _filter in de uitvoer gealiased.

SELECT productListItems,
    Filter(productListItems, value -> value.sku > 100000) AS _filter
FROM geometrixxx_999_xdm_pqs_1batch_10k_rows
WHERE timestamp > To_timestamp('2017-11-01 00:00:00')
AND timestamp < To_timestamp('2017-11-02 00:00:00')
LIMIT 10;

Resultaat

De resultaten voor deze SQL zouden vergelijkbaar zijn met die hieronder worden weergegeven.

productListItems | _filter
-----------------+---------
(123679, NULL, NULL) (123679, NULL, NULL)
(1346, NULL, NULL) |
(98347, NULL, NULL) |
(176015, NULL, NULL) | (176015, NULL, NULL)

(10 rows)

Samenvoegen gebruiken om de SKU's van alle items in de productlijst die aan een specifieke id zijn gekoppeld, op te tellen en het resulterende totaal te verdubbelen

aggregate(array<T>, A, function<A, T, A>[, function<A, R>]): R

Deze statistische bewerking past een binaire operator toe op een begintoestand en alle elementen in de array. Het vermindert ook veelvoudige waarden tot één enkele staat. Na deze reductie wordt de uiteindelijke status omgezet in het uiteindelijke resultaat met behulp van een afwerkingsfunctie. De afwerkingsfunctie neemt de laatste status verkregen na het toepassen van de binaire operator op alle arrayelementen en doet er iets mee om het eindresultaat te produceren.

Voorbeeld

In dit queryvoorbeeld wordt de maximale SKU-waarde berekend uit de array productListItems binnen het opgegeven tijdstempelbereik en wordt het resultaat verdubbeld. De uitvoer bevat de oorspronkelijke productListItems -array en de berekende max_value .

SELECT productListItems,
aggregate(productListItems, 0, (acc, value) ->
case
WHEN (
value.sku > acc) THEN cast(value.sku AS int)
ELSE cast(acc AS int)
END, acc -> acc * 2) AS max_value
FROM geometrixxx_999_xdm_pqs_1batch_10k_rows
WHERE timestamp > to_timestamp('2017-11-01 00:00:00')
AND timestamp < to_timestamp('2017-11-02 00:00:00')
LIMIT 50;

Resultaat

De resultaten voor deze SQL zouden vergelijkbaar zijn met die hieronder worden weergegeven.

productListItems | max_value
-----------------+---------
(123679, NULL, NULL) | 247358
(1346,NULL, NULL) | 2692
(98347, NULL, NULL) | 196694
(176015, NULL, NULL) | 352030

(10 rows)

ZIP_with gebruiken om een volgnummer toe te wijzen aan alle items in de productlijst

zip_with(array<T>, array<U>, function<T, U, R>): array<R>

Dit fragment combineert de elementen van twee arrays tot één nieuwe array. De bewerking wordt onafhankelijk uitgevoerd op elk element van de array en genereert waardeparen. Als één array korter is, worden null-waarden toegevoegd om overeen te komen met de lengte van de langere array. Dit gebeurt voordat de functie wordt toegepast.

Voorbeeld

De volgende query gebruikt de functie zip_with om paren waarden te maken van twee arrays. Dit gebeurt door de SKU-waarden van de array productListItems toe te voegen aan een reeks gehele getallen, die is gegenereerd met de functie Sequence . Het resultaat wordt samen met de oorspronkelijke kolom productListItems geselecteerd en is beperkt op basis van een tijdstempelbereik.

SELECT productListItems,
zip_with(Sequence(1,5), Transform(productListItems, p -> p.sku), (x,y) -> struct(x, y)) AS zip_with
FROM geometrixxx_999_xdm_pqs_1batch_10k_rows
WHERE timestamp > to_timestamp('2017-11-01 00:00:00')
AND timestamp < to_timestamp('2017-11-02 00:00:00')
limit 10;

Resultaat

De resultaten voor deze SQL zouden vergelijkbaar zijn met die hieronder worden weergegeven.

productListItems     | zip_with
---------------------+---------
                     | {(1,NULL), (2,NULL), (3,NULL),(4,NULL), (5,NULL)}
(123679, NULL, NULL) | {(1,123679), (2,NULL), (3,NULL), (4,NULL), (5,NULL)}
                     | {(1,NULL), (2,NULL),(3,NULL),(4,NULL), (5,NULL)}
                     | {(1,NULL), (2,NULL), (3, NULL),(4,NULL), (5,NULL)}
(1346,NULL, NULL)    | {(1,1346), (2,NULL),(3,NULL),(4,NULL), (5,NULL)}
                     | {(1,NULL), (2,NULL), (3,NULL),(4,NULL), (5,NULL)}
(98347, NULL, NULL)  | {(1,98347), (2,NULL), (3,NULL), (4,NULL), (5,NULL)}
                     | {(1,NULL), (2,NULL), (3,NULL), (4,NULL), (5,NULL)}
(176015, NULL, NULL) | {(1,176015),(2,NULL), (3,NULL), (4,NULL), (5,NULL)}
                     | {(1,NULL), (2,NULL), (3,NULL), (4,NULL), (5,NULL)}

(10 rows)

Map_from_entries gebruiken om een opeenvolgingsaantal aan elk punt in de productlijst toe te wijzen en het definitieve resultaat als kaart te verkrijgen

map_from_entries(array<struct<K, V>>): map<K, V>

Dit fragment zet een array van sleutelwaardeparen om in een kaart. Het is nuttig wanneer het behandelen van zeer belangrijk-waardepaargegevens die van een meer georganiseerde en efficiënte structuur zouden kunnen profiteren.

Voorbeeld

De volgende vraag leidt tot paren van waarden van een opeenvolging en de productListItems serie, zet deze paren in een kaart gebruikend map_from_entries om, en selecteert dan de originele productListItems kolom samen met de pas gemaakte map_from_entries kolom. Het resultaat wordt gefilterd en beperkt op basis van het opgegeven tijdstempelbereik.

SELECT productListItems,      map_from_entries(zip_with(Sequence(1,Size(productListItems)), productListItems, (x,y) -> struct(x, y))) AS map_from_entries
FROM   geometrixxx_999_xdm_pqs_1batch_10k_rows
WHERE  timestamp > to_timestamp('2017-11-01 00:00:00')
AND    timestamp < to_timestamp('2017-11-02 00:00:00')
LIMIT 10;

Resultaat

De resultaten voor deze SQL zouden vergelijkbaar zijn met die hieronder worden weergegeven.

productListItems     | map_from_entries
---------------------+------------------
(123679, NULL, NULL) | [1 -> "(123679,NULL,NULL)"]
(1346, NULL, NULL)   | [1 -> "(1346, NULL, NULL)"]
(98347, NULL, NULL)  | [1 -> "(98347, NULL, NULL)"]
(176015, NULL, NULL) | [1 -> "(176015, NULL, NULL)"]
(92763, NULL, NULL)  | [1 -> "(92763, NULL, NULL)"]
(48576, NULL, NULL)  | [1 -> "(48576, NULL, NULL)"]
(135778, NULL, NULL) | [1 -> "(135778, NULL, NULL)"]
(123679, NULL, NULL) | [1 -> "(123679, NULL, NULL)"]
(98347, NULL, NULL)  | [1 -> "(98347, NULL, NULL)"]
(167753, NULL, NULL) | [1 -> "(167753, NULL, NULL)"]

(10 rows)