확장 연산자¶
확장 연산자는 목록을 나타내는 쿼리 식을 목록의 개별 값으로 확장합니다. 현재 스프레드 연산자(**
)는 Snowflake에서 지원하는 유일한 확장 연산자입니다.
스프레드¶
스프레드 연산자는 배열 을 개별 값 목록으로 확장합니다. 이 연산자는 다음과 같은 사용 사례에 유용합니다.
IN 절 을 포함하는 쿼리.
COALESCE, GREATEST, LEAST 와 같이 값 목록을 인자로 받는 시스템 정의 함수에 대한 호출.
인자를 사용하여 값 배열을 제공하는 SQL 사용자 정의 함수.
바인드 변수를 사용하여 값 배열을 제공하는 Snowflake Scripting 저장 프로시저. Snowflake Scripting에서 바인드 변수를 사용하는 방법에 대한 자세한 내용은 SQL 문에서 변수 사용하기(바인딩) 및 SQL 문에서 인자 사용하기(바인딩) 섹션을 참조하십시오.
이러한 사용 사례에 대한 자세한 내용은 Snowflake에서 SQL 스프레드 연산자(**) 도입 블로그 게시물을 참조하십시오.
구문¶
** <array>
제한 사항¶
입력은 상수 값의 배열이어야 하며, 리터럴 값의 배열이거나 리터럴 값의 배열을 나타내는 바인드 변수일 수 있습니다.
반정형 배열의 각 값은 VARIANT 타입입니다. VARIANT 값은 기타 모든 데이터 타입의 값을 포함할 수 있습니다. 스프레드 연산자는 VARIANT 값에 저장된 값에 대해 다음과 같은 데이터 타입을 지원합니다.
SQL 이외의 언어로 작성된 사용자 정의 함수 및 저장 프로시저는 스프레드 연산자를 사용할 수 없습니다.
스프레드 연산자를 사용하여 매우 큰 배열을 확장하면 성능이 저하될 수 있습니다.
예¶
일부 예제에서는 다음 테이블의 데이터를 사용합니다.
테이블을 만들고 데이터를 삽입합니다.
CREATE OR REPLACE TABLE spread_demo (col1 INT, col2 VARCHAR);
INSERT INTO spread_demo VALUES
(1, 'a'),
(2, 'b'),
(3, 'c'),
(4, 'd'),
(5, 'e');
SELECT * FROM spread_demo;
+------+------+
| COL1 | COL2 |
|------+------|
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
+------+------+
다음 예제에서는 스프레드 연산자를 사용합니다.
IN 절에서 리터럴 값의 배열 확장하기¶
이전에 만든 spread_demo
테이블의 쿼리에서 스프레드 연산자를 사용하여 숫자 배열을 확장합니다.
SELECT * FROM spread_demo
WHERE col1 IN (** [3, 4])
ORDER BY col1;
+------+------+
| COL1 | COL2 |
|------+------|
| 3 | c |
| 4 | d |
+------+------+
스프레드 연산자를 사용하여 문자열 배열을 확장합니다.
SELECT * FROM spread_demo
WHERE col2 IN (** ['b', 'd'])
ORDER BY col1;
+------+------+
| COL1 | COL2 |
|------+------|
| 2 | b |
| 4 | d |
+------+------+
INTEGER 값과 확장 배열 값이 혼합된 쿼리에서 IN 절을 사용합니다.
SELECT * FROM spread_demo
WHERE col1 IN (** [1, 2], 4, 5)
ORDER BY col1;
+------+------+
| COL1 | COL2 |
|------+------|
| 1 | a |
| 2 | b |
| 4 | d |
| 5 | e |
+------+------+
시스템 정의 함수 호출에서 리터럴 값의 배열 확장하기¶
COALESCE 함수에 대한 호출에서 문자열 배열을 확장합니다.
SELECT COALESCE(** [NULL, NULL, 'my_string_1', 'my_string_2']) AS first_non_null;
+----------------+
| FIRST_NON_NULL |
|----------------|
| my_string_1 |
+----------------+
GREATEST 함수에 대한 호출에서 숫자 배열을 확장합니다.
SELECT GREATEST(** [1, 2, 5, 4, 5]) AS greatest_value;
+----------------+
| GREATEST_VALUE |
|----------------|
| 5 |
+----------------+
SQL 사용자 정의 함수에서 바인드 변수와 함께 스프레드 연산자 사용하기¶
스프레드 연산자를 사용하는 SQL 사용자 정의 함수를 만듭니다. 이 함수는 배열을 인자로 받은 다음 배열 값을 확장하여 이전에 만든 spread_demo
테이블을 쿼리합니다.
CREATE OR REPLACE FUNCTION spread_function_demo(col_1_values ARRAY)
RETURNS TABLE(
col1 INT,
col2 VARCHAR)
AS
$$
SELECT * FROM spread_demo
WHERE col1 IN (** col_1_values)
ORDER BY col1
$$;
함수를 사용하여 테이블을 쿼리합니다.
SELECT * FROM TABLE(spread_function_demo([1, 3, 5]));
+------+------+
| COL1 | COL2 |
|------+------|
| 1 | a |
| 3 | c |
| 5 | e |
+------+------+
Snowflake Scripting 저장 프로시저에서 바인드 변수와 함께 스프레드 연산자 사용하기¶
스프레드 연산자를 사용하는 Snowflake Scripting 저장 프로시저를 만듭니다. 저장 프로시저는 배열을 인자로 받은 다음 바인드 변수에서 배열 값을 확장하여 이전에 만든 spread_demo
테이블을 쿼리합니다.
CREATE OR REPLACE PROCEDURE spread_sp_demo(col_1_values ARRAY)
RETURNS TABLE(
col1 INT,
col2 VARCHAR)
LANGUAGE SQL
AS
$$
DECLARE
res RESULTSET;
BEGIN
res := (SELECT * FROM spread_demo
WHERE col1 IN (** :col_1_values)
ORDER BY col1);
RETURN TABLE(res);
END;
$$;
저장 프로시저를 호출합니다.
CALL spread_sp_demo([2, 4]);
+------+------+
| COL1 | COL2 |
|------+------|
| 2 | b |
| 4 | d |
+------+------+