이(가) 존재하여 특정 SKU를 사용하는 제품이 존재하는지 여부 검색
exists(array<T>, function<T, boolean>): boolean
위의 코드 조각에서 exists
함수는 배열의 각 요소에 적용되며 부울 값을 반환합니다. 부울은 배열에 지정된 조건을 충족하는 요소가 하나 이상 있는지 여부를 나타냅니다. 이 경우 특정 SKU를 사용하는 제품이 존재하는지 확인합니다.
예
아래 SQL 예제에서 쿼리는 geometrixxx_999_xdm_pqs_1batch_10k_rows
테이블에서 productListItems
을(를) 가져오고 productListItems
배열에서 SKU가 123679
과(와) 같은 요소가 있는지 평가합니다. 그런 다음 특정 범위의 타임스탬프를 기반으로 결과를 필터링하고 최종 결과를 10개의 행으로 제한합니다.
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;
결과
이 SQL의 결과는 아래에 표시된 결과와 유사합니다.
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)
필터를 사용하여 SKU > 100000
filter(array<T>, function<T, boolean>): array<T>
이 함수는 각 요소를 부울 값으로 평가하는 주어진 조건을 기반으로 요소 배열을 필터링합니다. 그런 다음 조건이 true 값을 반환하는 요소만 포함하는 새 배열을 반환합니다.
예
아래 쿼리는 productListItems
열을 선택하고, SKU가 100000보다 큰 요소만 포함하도록 필터를 적용하고, 결과 집합을 특정 타임스탬프 범위 내의 행으로 제한합니다. 그런 다음 필터링된 배열은 출력에서 _filter
(으)로 별칭이 지정됩니다.
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;
결과
이 SQL의 결과는 아래에 표시된 결과와 유사합니다.
productListItems | _filter
-----------------+---------
(123679, NULL, NULL) (123679, NULL, NULL)
(1346, NULL, NULL) |
(98347, NULL, NULL) |
(176015, NULL, NULL) | (176015, NULL, NULL)
(10 rows)
합계를 사용하여 특정 ID와 연결된 모든 제품 목록 항목의 SKU를 합하고 결과 합계를 두 배로 늘립니다.
aggregate(array<T>, A, function<A, T, A>[, function<A, R>]): R
이 집계 작업은 이진 연산자를 초기 상태와 배열의 모든 요소에 적용합니다. 또한 여러 값을 단일 상태로 줄입니다. 이 감소 후 최종 상태는 마무리 함수를 사용하여 최종 결과로 변환됩니다. finish 함수는 모든 배열 요소에 이진 연산자를 적용한 후 얻은 마지막 상태를 사용하고, 최종 결과를 생성하기 위해 이와 함께 어떤 작업을 수행합니다.
예
이 쿼리 예제는 지정된 타임스탬프 범위 내의 productListItems
배열에서 최대 SKU 값을 계산하고 결과를 두 배로 늘립니다. 출력에는 원본 productListItems
배열과 계산된 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;
결과
이 SQL의 결과는 아래에 표시된 결과와 유사합니다.
productListItems | max_value
-----------------+---------
(123679, NULL, NULL) | 247358
(1346,NULL, NULL) | 2692
(98347, NULL, NULL) | 196694
(176015, NULL, NULL) | 352030
(10 rows)
zip_with를 사용하여 제품 목록의 모든 항목에 시퀀스 번호를 지정합니다
zip_with(array<T>, array<U>, function<T, U, R>): array<R>
이 코드 조각은 두 배열의 요소를 하나의 새 배열로 결합합니다. 이 작업은 배열의 각 요소에 대해 독립적으로 수행되며 값의 쌍을 생성합니다. 배열 하나가 짧으면 긴 배열의 길이와 일치하도록 null 값이 추가됩니다. 이 문제는 함수가 적용되기 전에 발생합니다.
예
다음 쿼리는 zip_with
함수를 사용하여 두 배열에서 값 쌍을 만듭니다. 이 작업은 productListItems
배열의 SKU 값을 Sequence
함수를 사용하여 생성된 정수 시퀀스에 추가하여 수행합니다. 원래 productListItems
열과 함께 결과가 선택되었으며 타임스탬프 범위에 따라 제한됩니다.
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;
결과
이 SQL의 결과는 아래에 표시된 결과와 유사합니다.
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를 사용하여 제품 목록의 각 항목에 시퀀스 번호를 지정하고 최종 결과를 맵으로 얻습니다.
map_from_entries(array<struct<K, V>>): map<K, V>
이 코드 조각은 키-값 쌍의 배열을 맵으로 변환합니다. 보다 조직적이고 효율적인 구조를 활용할 수 있는 키-값 쌍 데이터를 처리할 때 유용합니다.
예
다음 쿼리는 시퀀스 및 productListItems 배열에서 값 쌍을 만들고 map_from_entries를 사용하여 이 쌍을 맵으로 변환한 다음 새로 만든 map_from_entries 열과 함께 원래 productListItems 열을 선택합니다. 결과는 지정된 타임스탬프 범위를 기반으로 필터링되고 제한됩니다.
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;
결과
이 SQL의 결과는 아래에 표시된 결과와 유사합니다.
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)