SnowConvert AI - SQL Server-Azure Synapse - DMLs¶
BETWEEN¶
입력 식(숫자 또는 문자열)이 지정된 하한과 상한 내에 있을 때 TRUE 를 반환합니다.
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
소스 코드
예상 코드
BULK INSERT¶
Bulk Insert 문에 대한 변환 참조.
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
BULK INSERT 의 직접적인 변환은 Snowflake COPY INTO 문입니다. COPY INTO 는 파일 경로를 직접 사용하여 값을 검색하지 않습니다. 파일은 STAGE 앞에 위치해야 합니다. 또한 BULK INSERT 에서 사용되는 옵션은 STAGE 또는 COPY INTO 에 의해 직접 소비될 Snowflake FILE FORMAT 에 지정되어야 합니다.
STAGE 에 파일을 추가하려면 PUT 명령을 사용해야 합니다. 이 명령은 오직 SnowSQL CLI 에서만 실행될 수 있습니다.. 다음은 COPY INTO 를 실행하기 전에 수행해야 하는 단계의 예입니다.
SQL 서버¶
Snowflake¶
As you see in the code above, SnowConvert AI identifies all the BULK INSERTS in the code, and for each instance, a new STAGE and FILE FORMAT will be created before the copy into execution. In addition, after the creation of the STAGE, a PUT command will be created as well to add the file to the stage.
The names of the generated statements are auto-generated using the current timestamp in seconds, to avoid collisions between their usages.
마지막으로 대량 삽입에 대한 모든 옵션이 적용되는 경우 파일 형식 옵션에 매핑됩니다. 해당 옵션이 Snowflake에서 지원되지 않는 경우 설명과 함께 경고가 추가됩니다. SSC-FDM-TS0004도 참조하십시오.
지원되는 대량 옵션¶
SQL 서버 |
Snowflake |
|---|---|
FORMAT |
TYPE |
FIELDTERMINATOR |
FIELD_DELIMITER |
FIRSTROW |
SKIP_HEADER |
ROWTERMINATOR |
RECORD_DELIMITER |
FIELDQUOTE |
FIELD_OPTIONALLY_ENCLOSED_BY |
공통 테이블 식 (CTE)¶
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
일반적인 테이블 식은 기본적으로 Snowflake SQL 에서 지원됩니다.
구문¶
Snowflake SQL¶
하위 쿼리:
재귀 CTE:
여기서
주목할 만한 세부 정보¶
The RECURSIVE keyword does not exist in T-SQL, and the transformation does not actively add the keyword to the result. A warning is added to the output code to state this behavior.
SELECT INTO 를 사용한 일반적인 테이블 식¶
WITH 식 뒤에 SELECT INTO 문이 오면 다음과 같이 변환되며, 이는 TEMPORARY TABLE 러 변환됩니다.
SQL 서버:¶
Snowflake:¶
다른 식과 공통 테이블 표현식¶
WITH 식 뒤에 INSERT 또는 DELETE 문이 오는 경우 다음과 같은 변환이 발생합니다.
SQL 서버:¶
Snowflake:¶
삭제 위치가 있는 일반적인 테이블 식¶
이 변환의 경우CTE (공통 테이블 식)에 삭제자가 있는 경우에만 적용되지만 일부 세부 사항 CTE 에 대해서만 적용됩니다. 1개의 CTE 만 있어야 하며 ROW_NUMBER 또는 RANK 의 함수 내에 있어야 합니다.
삭제가 포함된 CTE 의 목적은 테이블에서 중복을 제거하는 것이어야 합니다. 삭제가 포함된 CTE 에서 다른 종류의 데이터를 제거하려는 경우에는 이 변환이 적용되지 않습니다.
예를 살펴보겠습니다. 작동하는 예제를 보려면 먼저 일부 데이터가 있는 테이블을 생성해야 합니다.
중복된 값이 있다는 점에 유의하십시오. 8라인과 12라인에 동일한 값을 삽입합니다. 이제 테이블에서 중복 행을 제거해 보겠습니다.
테이블에서 선택을 실행하면 다음과 같은 결과가 표시됩니다
ID |
값 |
StringValue |
|---|---|---|
100 |
100 |
First |
200 |
200 |
Second |
300 |
300 |
Third |
400 |
400 |
Fourth |
Note that the duplicated rows have been removed. To preserve this functionality in Snowflake, which does not support DELETE from a CTE, SnowConvert transforms the statement into the following:
보시다시피 쿼리는 테이블 생성하기 또는 바꾸기로 변환됩니다.
To test it in Snowflake, you will need the table.
이제 변환 결과를 실행한 다음 선택을 클릭하여 중복된 행이 삭제되었는지 확인하면 다음과 같은 결과가 표시됩니다.
ID |
값 |
StringValue |
|---|---|---|
100 |
100 |
First |
200 |
200 |
Second |
300 |
300 |
Third |
400 |
400 |
Fourth |
MERGE 문을 사용한 일반적인 테이블 식¶
WITH 식 뒤에 MERGE 문이 오면 다음과 같은 변환이 발생하며, 이는 MERGEINTO 호 해결할 수 있습니다..
SQL 서버:¶
Snowflake:¶
UPDATE 문을 사용한 일반적인 테이블 식¶
WITH 식 뒤에 UPDATE 문이 오는 경우 다음과 같은 변환이 발생하며, 이는 UPDATE 문으로 변환됩니다.
SQL 서버:¶
Snowflake:¶
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-0108: 다음 하위 쿼리는 유효하지 않은 것으로 간주되는 패턴 중 하나 이상과 일치하며 컴파일 오류가 발생할 수 있습니다.
SSC-PRF-TS0001: 성능 경고 - CTE에 대한 재귀가 확인되지 않았습니다. 재귀 키워드가 필요할 수 있습니다.
DELETE¶
Transact-SQL Delete 문에서 Snowflake로의 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Removes one or more rows from a table or view in SQL Server. For more information, see the SQL Server DELETE documentation.
샘플 소스 패턴¶
샘플 데이터¶
SQL 서버¶
Snowflake¶
기본 케이스¶
DELETE 문을 변환하는 방법은 매우 간단하지만 몇 가지 주의 사항이 있습니다. 이러한 주의 사항 중 하나는 FROM 절에서 여러 소스를 지원하는 방식인데, 아래 그림과 같이 Snowflake에도 이에 상응하는 방식이 있습니다.
SQL 서버¶
Snowflake¶
참고
원래 DELETE 는 T1 용이므로 FROM 절에 TABLE2 T2 가 있으면 USING 절을 생성해야 합니다.
테이블에서 중복 삭제하기¶
다음 설명서에서는 SQL 서버의 테이블에서 중복된 행을 제거하는 데 사용되는 일반적인 패턴 에 대해 설명합니다. 이 접근법은 ROW_NUMBER 함수를 사용하여 쉼표로 구분된 1개 이상의 열일 수 있는 key_value 를 기준으로 데이터를 파티션합니다. 그런 다음 1보다 큰 행 번호 값을 받은 모든 레코드를 삭제합니다. 이 값은 레코드가 중복되어 있음을 나타냅니다. 참조된 설명서를 읽고 이 메서드의 동작을 이해하고 다시 만들 수 있습니다.
다음 예제에서는 이 접근법을 사용하여 테이블과 이에 해당하는 Snowflake에서 중복을 제거합니다. 변환은 테이블을 잘라내는(모든 데이터를 제거) INSERT OVERWRITE 문을 수행한 다음 중복된 행을 무시하고 동일한 테이블에 다시 행을 삽입하는 것으로 구성됩니다. 출력 코드는 원본 코드에 사용되는 PARTITION BY 및 ORDER BY 절을 동일하게 고려하여 생성됩니다.
SQL 서버¶
행이 중복된 테이블 생성하기
중복 삽입¶
출력¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
중복 제거¶
출력¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
Snowflake¶
행이 중복된 테이블 생성하기
중복 삽입¶
출력¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
중복 제거¶
출력¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
경고
이 패턴에는 여러 가지 변형이 있을 수 있지만 모두 동일한 원리를 기반으로 하며 동일한 구조를 가지고 있습니다.
DELETE WITH INNER JOIN¶
SQL SERVER¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
Davis |
Null |
6 |
Lucas |
Parker |
8 |
Snowflake¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
Davis |
Null |
6 |
Lucas |
Parker |
8 |
DELETE WITH LEFT JOIN¶
SQL 서버¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
1 |
John |
Doe |
1 |
2 |
Jane |
Smith |
2 |
3 |
Bob |
Johnson |
1 |
4 |
Alice |
Brown |
3 |
Snowflake¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
1 |
John |
Doe |
1 |
2 |
Jane |
Smith |
2 |
3 |
Bob |
Johnson |
1 |
4 |
Alice |
Brown |
3 |
DELETE WITH RIGHT JOIN¶
SQL SERVER¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
Davis |
Null |
6 |
Lucas |
Parker |
8 |
Snowflake¶
출력¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
Davis |
Null |
6 |
Lucas |
Parker |
8 |
Known Issues¶
FULL JOIN은 지원되지 않음\ FULL JOIN은 (+) 구문을 사용하여 나타낼 수 없습니다. 이 구문이 나오면 SnowConvert AI는 FDM을 사용하여 사용자에게 경고합니다.
SQL 서버¶
Snowflake¶
관련 EWIs¶
SSC-EWI-TS0081: delete 문에서 전체 조인을 사용하는 것은 지원되지 않습니다.
DROP STATEMENT¶
DROP 문
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
DROP TABLE¶
Transact-SQL¶
Snowflake¶
변환¶
단일 DROP TABLE 문에 대한 변환은 매우 간단합니다. 문 내에 삭제되는 테이블이 하나만 있는 경우 그대로 유지됩니다.
예:
SQL 서버와 Snowflake의 유일한 주목할 만한 차이점은 입력 문이 둘 이상의 테이블을 삭제할 때 표시됩니다. 이러한 시나리오에서는 삭제되는 각 테이블에 대해 서로 다른 DROP TABLE 문이 생성됩니다.
예:
SQL 서버¶
Snowflake¶
EXISTS¶
EXISTS 문을 사용하는 Transact-SQL 하위 쿼리 변환 세부 정보
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
하위 쿼리의 타입¶
하위 쿼리는 상관관계가 있거나 상관관계가 없는 것으로 분류할 수 있습니다.
상관 하위 쿼리는 하위 쿼리 외부에서 1개 이상의 열을 참조합니다. (열은 일반적으로 하위 쿼리의 WHERE 절 내에서 참조됩니다.) 상관 하위 쿼리는 하위 쿼리가 외부 쿼리에 위치한 테이블의 각 행에서 평가된 것처럼 참조하는 테이블의 필터로 생각할 수 있습니다.
비상관 하위 쿼리는 이러한 외부 열 참조가 없습니다. 그리고 독립적인 쿼리로, 쿼리의 결과는 외부 쿼리에 한 번만 반환 및 사용됩니다(행당 아님).
EXISTS 문은 상관 하위 쿼리로 간주됩니다.
SQL SERVER¶
Snowflake¶
IN¶
IN 문을 사용하는 Transact-SQL 하위 쿼리 변환 세부 정보
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
IN 연산자는 하위 쿼리에서 반환된 값에 식이 포함되어 있는지 확인합니다.
SQL SERVER¶
Snowflake¶
INSERT¶
SQL Server Insert 문에서 Snowflake로의 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Adds one or more rows to a table or a view in SQL Server. For more information, see the SQL Server INSERT documentation.
구문 비교¶
기본 삽입 문법은 SQL 언어 모두에서 동일합니다. 그러나 SQL 서버에는 여전히 차이점을 보여주는 몇 가지 다른 구문 요소가 있습니다. 예를 들어, 개발자가 할당 연산자를 사용하여 열에 값을 추가할 수 있는 구문 요소가 있습니다. 언급된 구문도 기본 삽입 구문으로 변환됩니다.
Snowflake¶
SQL 서버¶
샘플 소스 패턴¶
기본 INSERT¶
SQL 서버¶
Snowflake¶
INSERT with assign operator¶
SQL 서버¶
Snowflake¶
INTO 가 없는 INSERT¶
SQL 서버¶
Snowflake¶
공통 테이블 식이 있는 INSERT¶
SQL 서버¶
Snowflake¶
MERGE 를 DML 로 사용한 테이블 DML 요소가 있는 INSERT¶
이 사례는 매우 구체적이어서 INSERT 문에는 SELECT 쿼리가 있고 언급된 SELECT의 FROM 절에는 MERGEDML 문이 포함되어 있습니다. Snowflake에서 동등한 구문을 찾으면 임시 테이블, 변환된 merge 문, 마지막으로 insert 문이 생성됩니다.
SQL 서버¶
Snowflake¶
NOTE: 패턴의 이름에서 알 수 있듯이 insert가 select…from과 함께 사용되며 본문에는 MERGE 문이 포함되는 경우에만 적용됩니다.
Known Issues¶
1. 특수 매핑이 필요한 구문 요소입니다.
[INTO]: 이 키워드는 Snowflake에서 필수이며 없는 경우 추가해야 합니다.
[DEFAULT VALUES]: 삽입에 지정된 모든 열에 기본값을 삽입합니다. VALUES (DEFAULT, DEFAULT, …)로 변환되어야 하며, 추가된 DEFAULTs 의 양은 삽입이 수정할 열의 수와 같습니다. 현재로서는 경고가 추가되고 있습니다.
SQL 서버¶
Snowflake¶
2. 지원되지 않거나 관련 없는 구문 요소:
[TOP (expression) [PERCENT]]: 삽입할 행의 양 또는 백분율을 나타냅니다. 지원 안 됨.
[rowset_function_limited]: OPENQUERY() 또는 OPENROWSET()이며, 원격 서버에서 데이터를 읽는 데 사용됩니다. 지원 안 됨.
[WITH table_hint_limited]: 테이블에 대한 읽기/쓰기 잠금을 설정하는 데 사용됩니다. Snowflake와 관련이 없습니다.
[<OUTPUT 절>]: 삽입된 행이 삽입될 테이블 또는 결과 세트를 지정합니다. 지원 안 됨.
[execute_statement]: 데이터를 가져오는 쿼리를 실행하는 데 사용할 수 있습니다. 지원 안 됨.
[dml_table_source]: 다른 DML 문의 OUTPUT 절에 의해 생성된 임시 결과 세트입니다. 지원 안 됨.
3. DELETE 케이스는 고려되지 않고 있습니다.
MERGE를 DML로 사용하는 Table DML Factor가 있는 INSERT 패턴의 경우 솔루션에서 DELETE 사례가 고려되지 않습니다. 따라서 소스 코드의 merge 문에 DELETE 사례가 포함되어 있으면 예상대로 작동하지 않을 수 있음을 유의하시기 바랍니다.
관련 EWIs¶
SSC-EWI-0073: 보류 중 함수 동등성 검토.
SSC-FDM-TS0026: DELETE 케이스는 고려되지 않고 있습니다.
MERGE¶
Transact-SQL MERGE 문 변환 세부 정보
Applies to
SQL 서버
Azure 시냅스 분석
구문 비교¶
Snowflake¶
Transact-SQL¶
예¶
다음 소스 코드가 주어집니다.
SQL 서버¶
다음과 같은 결과를 기대할 수 있습니다.
Snowflake¶
관련 EWIs¶
SSC-EWI-0021: Snowflake에서 지원되지 않는 구문입니다.
SELECT¶
SQL Server Select 문을 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Allows the selection of one or more rows or columns of one or more tables in SQL Server. For more information, see the SQL Server SELECT documentation.
샘플 소스 패턴¶
SELECT WITH COLUMN ALIASES¶
다음 예제는 Snowflake에서 열 별칭을 사용하는 방법을 보여줍니다. SQL 서버 코드의 처음 두 열은 AS 키워드를 사용하여 할당 양식에서 정규화된 양식으로 변환될 것으로 예상됩니다. 세 번째 및 네 번째 열은 유효한 Snowflake 형식을 사용하고 있습니다.
SQL 서버¶
Snowflake¶
SELECT TOP¶
SQL 서버¶
Snowflake¶
SELECT INTO¶
다음 예는 SELECT INTO가 CREATE TABLE AS로 변환되는 경우를 보여줍니다. Snowflake에는 SELECT INTO에 해당하는 기능이 없기 때문에 쿼리를 기준으로 테이블을 생성하려면 CREATE TABLE AS를 함께 사용해야 합니다.
SQL 서버¶
Snowflake¶
또 다른 경우는 EXCEPT 및 INTERSECT 과 같은 세트 연산자를 포함하는 경우입니다. 변환은 기본적으로 이전 변환과 동일합니다.
SQL 서버¶
Snowflake¶
SELECT TOP Additional Arguments¶
PERCENT 및 WITH TIES 키워드는 결과에 영향을 미치며, Snowflake에서 지원하지 않으므로 오류로 설명되어 추가됩니다.
SQL 서버¶
Snowflake¶
SELECT FOR¶
The FOR XML clause is transformed differently depending on whether the path is empty or not.
FOR XML PATH(‘’) — Empty path (string concatenation pattern):
FOR XML PATH('') is a common SQL Server pattern used for string concatenation (before STRING_AGG was introduced). When the path is empty and there is no ROOT clause, the query is transformed to use LISTAGG with CONCAT instead of XML functions, because the intent is string aggregation rather than XML generation.
SQL 서버¶
Snowflake¶
When there is a single expression, CONCAT is omitted:
SQL 서버¶
Snowflake¶
FOR XML PATH — Non-empty path (XML generation):
When the path is not empty, the FOR XML PATH clause is converted to use FOR_XML_UDF with OBJECT_CONSTRUCT to produce XML output. This conversion emits SSC-FDM-TS0016 because the resulting XML format in Snowflake may differ from SQL Server.
SQL 서버¶
Snowflake¶
SELECT OPTION¶
OPTION 절은 Snowflake에서 지원되지 않습니다. 변환하는 동안 설명이 추가되고 경고로 추가됩니다.
OPTION 문은 관련성이 없거나 필요하지 않으므로 변환에서 제거되었음을 참고하십시오.
SQL 서버¶
Snowflake¶
SELECT WITH¶
WITH 절은 Snowflake에서 지원되지 않습니다. 변환하는 동안 설명이 추가되고 경고로 추가됩니다.
WITH(NOLOCK, NOWAIT) 문은 관련성이 없거나 필요하지 않으므로 변환에서 제거되었습니다.
SQL 서버¶
Snowflake¶
관련 EWIs¶
SSC-EWI-0040: 문은 지원되지 않습니다.
SSC-FDM-TS0016: XML 열의 형식은 다를 수 있습니다
SET OPERATORS¶
Applies to
SQL 서버
Azure 시냅스 분석
TSQL 과 Snowflake의 설정 연산자는 TSQL 에서 지원되지 않는 MINUS 를 제외하고 동일한 구문과 지원 시나리오(EXCEPT, INTERSECT, UNION, UNION ALL)를 제공하므로 변환 시 동일한 코드가 생성됩니다.
TRUNCATE¶
Transact-SQL TRUNCATE 문 변환 세부 정보
Applies to
SQL 서버
Azure 시냅스 분석
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
SQL 서버¶
Snowflake¶
UPDATE¶
SQL Server Update 문을 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
Changes existing data in a table or view in SQL Server. For more information, see the SQL Server UPDATE documentation.
샘플 소스 패턴¶
기본 UPDATE¶
일반 UPDATE 문에 대한 변환은 매우 간단합니다. Snowflake에서는 기본적으로 기본 UPDATE 구조가 지원되므로 이상값은 몇 가지 차이점을 알 수 있는 부분입니다.
SQL 서버¶
Snowflake¶
데카르트 곱¶
SQL 서버는 업데이트 문의 대상 테이블과 FROM 절 사이에 순환 참조를 추가할 수 있습니. 실행 시 데이터베이스 최적화 도구는 생성된 데카르트 곱을 제거합니다. 그렇지 않으면, Snowflake는 현재 이 시나리오를 최적화하지 않고 실행 계획에서 확인할 수 있는 데카르트 곱을 생성합니다.\
이를 해결하기 위해 테이블 중 하나가 업데이트 대상과 동일한 JOIN 이 있는 경우 이 참조를 제거하고 WHERE 절에 추가하여 데이터를 필터링하고 세트 작업을 하지 않는 데 사용합니다.
SQL 서버¶
Snowflake¶
OUTPUT 절¶
OUTPUT 절은 Snowflake에서 지원되지 않습니다.
SQL 서버¶
Snowflake¶
CTE¶
WITH CTE 절을 업데이트 문의 내부 쿼리로 이동하여 Snowflake에서 지원하도록 합니다.
SQL 서버¶
Snowflake¶
TOP 절¶
TOP 절은 Snowflake에서 지원되지 않습니다.
SQL 서버¶
Snowflake¶
WITH TABLE HINT LIMITED¶
업데이트 WITH 절은 Snowflake에서 지원되지 않습니다.
SQL 서버¶
Snowflake¶
관련 EWIs¶
SSC-EWI-0021: Snowflake에서 지원되지 않는 구문입니다.
UPDATE WITH JOIN¶
WHERE 및 JOIN 절이 있는 UPDATE 문에 대한 변환 사양
경고
이 내용은 진행 중이며 향후 변경될 수 있습니다.
설명¶
UPDATE FROM 패턴은 다른 테이블의 데이터를 기반으로 데이터를 업데이트하는 데 사용됩니다. 이 SQLServer 설명서 는 간단한 샘플을 제공합니다.
설명서 에서 다음 SQL 서버 구문을 검토하십시오.
SQL 서버 구문¶
table_name: 업데이트하려는 테이블 또는 뷰입니다.SET: 열과 새 값을 지정합니다.SET절은 1개 이상의 열에 새 값(또는 식)을 할당합니다.FROM: 1개 이상의 소스 테이블을 지정하는 데 사용됩니다(예: join). 업데이트를 수행하기 위한 데이터의 출처를 정의하는 데 도움이 됩니다.WHERE: 조건에 따라 업데이트할 행을 지정합니다. 이 절이 없으면 테이블의 모든 행이 업데이트됩니다.OPTION (query_hint): 쿼리 최적화를 위한 힌트를 지정합니다.
Snowflake 구문¶
Snowflake 구문은 Snowflake 설명서 에서도 확인할 수 있습니다.
참고
Snowflake는 UPDATE 절의 JOINs 을 지원하지 않습니다.
필수 매개 변수
_
target_table:업데이트할 테이블을 지정합니다._
col_name:_target_table_. 에서 열의 이름을 지정합니다. 테이블 이름을 포함하지 마십시오. 예:UPDATE t1 SET t1.col = 1은 유효하지 않습니다._
value:_ _col_name_ 에 설정할 새 값을 지정합니다.
선택적 매개 변수
FROM``_additional_tables:_ 업데이트할 행을 선택하거나 새 값을 설정하는 데 사용할 1개 이상의 테이블을 지정합니다. 대상 테이블을 반복하면 셀프 조인이 발생한다는 점에 유의하십시오.WHERE``_condition:_: 업데이트할 대상 테이블의 행을 지정하는 식입니다. 기본값: 값 없음(대상 테이블의 모든 행이 업데이트됨)
변환 요약¶
SQL Server JOIN 유형 |
최상의 Snowflake 대안 |
|---|---|
단일 |
|
다중 |
|
다중 |
하위 쿼리 + IN 작업 사용 |
단일 |
하위 쿼리 + IN 작업 사용 |
다중 |
필요에 따라 문 순서를 재지정하는 Snowflake |
다중 |
필요에 따라 문 순서를 재지정하는 Snowflake |
단일 RIGHT JOIN |
|
참고-1: 간단한 JOIN 은 FROM 절의 테이블을 사용하고 필요에 따라 WHERE 절에 필터를 추가할 수 있습니다
참고-2: 다른 접근법은 JOINs_을 정의하기 위해 (+) 피연산자를 포함할 수 있습니다
샘플 소스 패턴¶
설정 데이터¶
SQLServer¶
Snowflake¶
Data Insertion for samples
케이스 1: 단일 INNER JOIN 업데이트¶
INNER JOIN 의 경우 테이블이 FROM 문 내에 사용되면 자동으로 INNER JOIN 으로 바뀝니다. UPDATE 문에서 JOINs 을 지원하는 방법에는 여러 가지가 있습니다. 이는 가독성을 보장하는 가장 간단한 패턴 중 하나입니다.
SQL 서버¶
출력¶
CustomerID |
수량 |
CustomerName |
|---|---|---|
1 |
10 |
John Doe |
Snowflake¶
출력¶
CustomerID |
수량 |
CustomerName |
|---|---|---|
1 |
10 |
John Doe |
다른 접근법:
MERGE INTO
IN Operation
케이스 2: 다중 INNER JOIN 업데이트¶
SQL 서버¶
출력¶
CustomerID |
수량 |
CustomerName |
|---|---|---|
3 |
5 |
Alice Johnson |
Snowflake¶
출력¶
CustomerID |
수량 |
CustomerName |
|---|---|---|
3 |
5 |
Alice Johnson |
케이스 3: 집계 조건이 있는 여러 INNER JOIN 업데이트¶
SQL 서버¶
출력¶
CustomerID |
CustomerName |
수량 |
Price |
|---|---|---|---|
11 |
Jack Grey |
6 |
29.99 |
18 |
Quincy Brown |
6 |
15.99 |
20 |
Sam Green |
6 |
89.99 |
22 |
Ursula Red |
6 |
9.99 |
24 |
Wendy Black |
6 |
49.99 |
Snowflake¶
출력¶
CustomerID |
CustomerName |
수량 |
Price |
|---|---|---|---|
11 |
Jack Grey |
6 |
29.99 |
18 |
Quincy Brown |
6 |
15.99 |
20 |
Sam Green |
6 |
89.99 |
22 |
Ursula Red |
6 |
9.99 |
24 |
Wendy Black |
6 |
49.99 |
케이스 4: 단일 LEFT JOIN 업데이트¶
SQL 서버¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
OrderDate |
|---|---|---|---|---|
5 |
Null |
5 |
7 |
2024-11-05 |
13 |
Null |
13 |
13 |
2024-11-13 |
Snowflake¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
OrderDate |
|---|---|---|---|---|
5 |
Null |
5 |
7 |
2024-11-05 |
13 |
Null |
13 |
13 |
2024-11-13 |
참고
Snowflake의 이 접근법은 필요한 행을 업데이트하지 않으므로 작동하지 않습니다.
UPDATE Orders O SET O.Quantity = 13 FROM Customers C WHERE O.CustomerID = C.CustomerID AND C.CustomerID IS NULL AND O.ProductID = 13;
케이스 5: 여러 LEFT JOIN 및 RIGHT JOIN 업데이트¶
이는 더 복잡한 패턴입니다. 여러 LEFT JOINs 을 변환하려면 다음 패턴을 검토하십시오.
참고
LEFT JOIN 및 RIGHT JOIN 은 FROM 절의 순서에 따라 종속성을 갖습니다.
SQL 서버¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
OrderDate |
|---|---|---|---|---|
3 |
3 |
3 |
3 |
2024-11-12 |
Snowflake¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
OrderDate |
|---|---|---|---|---|
3 |
3 |
3 |
3 |
2024-11-12 |
케이스 6: INNER JOIN 및 LEFT JOIN 업데이트 혼합¶
SQL 서버¶
출력¶
CustomerID |
CustomerName |
수량 |
|---|---|---|
Null |
Null |
4 |
Snowflake¶
출력¶
CustomerID |
CustomerName |
수량 |
|---|---|---|
Null |
Null |
4 |
케이스 7: 단일 RIGHT JOIN 업데이트¶
SQL 서버¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
CustomerName |
|---|---|---|---|---|
3 |
3 |
3 |
1000 |
Alice Johnson |
Snowflake¶
출력¶
OrderID |
CustomerID |
ProductID |
수량 |
CustomerName |
|---|---|---|---|---|
3 |
3 |
3 |
1000 |
Alice Johnson |
Known Issues¶
UPDATE에서JOINs을 직접 사용할 수 없으므로 설명된 패턴과 일치하지 않는 경우가 있을 수 있습니다.
UPDATELEFT 및 RIGHTJOIN¶
JOINs가 있는 UPDATE 문에 대한 변환 사양.
Applies to
SQL 서버
Azure 시냅스 분석
경고
Snowflake에서 부분적으로 지원됨
설명¶
UPDATE FROM 패턴은 다른 테이블의 데이터를 기반으로 데이터를 업데이트하는 데 사용됩니다. 이 SQLServer 설명서 는 간단한 샘플을 제공합니다.
설명서 에서 다음 SQL 서버 구문을 검토하십시오.
SQL 서버 구문¶
table_name: 업데이트하려는 테이블 또는 뷰입니다.SET: 열과 새 값을 지정합니다.SET절은 1개 이상의 열에 새 값(또는 식)을 할당합니다.FROM: 1개 이상의 소스 테이블을 지정하는 데 사용됩니다(예: join). 업데이트를 수행하기 위한 데이터의 출처를 정의하는 데 도움이 됩니다.WHERE: 조건에 따라 업데이트할 행을 지정합니다. 이 절이 없으면 테이블의 모든 행이 업데이트됩니다.OPTION (query_hint): 쿼리 최적화를 위한 힌트를 지정합니다.
Snowflake 구문¶
Snowflake 구문은 Snowflake 설명서 에서도 확인할 수 있습니다.
참고
Snowflake는 UPDATE 절의 JOINs 을 지원하지 않습니다.
필수 매개 변수
_
target_table:업데이트할 테이블을 지정합니다._
col_name:_target_table_. 에서 열의 이름을 지정합니다. 테이블 이름을 포함하지 마십시오. 예:UPDATE t1 SET t1.col = 1은 유효하지 않습니다._
value:_ _col_name_ 에 설정할 새 값을 지정합니다.
선택적 매개 변수
FROM``_additional_tables:_ 업데이트할 행을 선택하거나 새 값을 설정하는 데 사용할 1개 이상의 테이블을 지정합니다. 대상 테이블을 반복하면 셀프 조인이 발생한다는 점에 유의하십시오.WHERE``_condition:_: 업데이트할 대상 테이블의 행을 지정하는 식입니다. 기본값: 값 없음(대상 테이블의 모든 행이 업데이트됨)
변환 요약¶
문법 설명에서 볼 수 있듯이, UPDATE 절 내부의 JOINs에 대한 직접적인 동등한 솔루션은 없습니다. 이러한 이유로 이 문을 변환하는 접근 방식은 테이블에 필요한 데이터를 논리적으로 추가하는 연산자 (+)를 열에 추가하는 것입니다. 이 연산자 (+)는 LEFT/RIGHT JOIN 섹션에 테이블이 참조되는 경우에 추가됩니다.
Notice that there are other languages that use this operator (+) and the position of the operator may determine the type of join. In this specific case in Snowflake, the position will not determine the join type but the association with the logically needed tables and columns will.
Even when there are other alternative as MERGE clause or the usages of a CTE; these alternatives tend to turn difficult to read when there are complex queries, and get extensive.
샘플 소스 패턴¶
설정 데이터¶
SQL 서버¶
Snowflake¶
LEFT JOIN¶
SQL 서버¶
쿼리 전 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
쿼리 후 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
X1 |
Description1 |
2 |
A2 |
B2 |
C2 |
X2 |
Description2 |
3 |
A3 |
B3 |
C3 |
X3 |
Description3 |
Snowflake¶
쿼리 전 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
쿼리 후 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
X1 |
Description1 |
2 |
A2 |
B2 |
C2 |
X2 |
Description2 |
3 |
A3 |
B3 |
C3 |
X3 |
Description3 |
RIGHT JOIN¶
SQL 서버¶
쿼리 전 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
쿼리 후 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
**X1 |
null |
2 |
A2 |
B2 |
C2 |
**X2 |
null |
3 |
A3 |
B3 |
C3 |
**X3 |
null |
Snowflake¶
쿼리 전 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
쿼리 후 출력¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
**X1 |
null |
2 |
A2 |
B2 |
C2 |
**X2 |
null |
3 |
A3 |
B3 |
C3 |
**X3 |
null |
Known Issues¶
논리의 차이로 인해 변환할 수 없는 패턴이 있을 수 있습니다.
쿼리 패턴이 적용되는 경우 비결정적 행을 검토하십시오. “FROM 절에 테이블 사이(예:
t1및t2)에 JOIN 이 포함된 경우,t1의 대상 행은 테이블t2의 하나 이상의 행에 조인(즉, 일치)될 수 있습니다. 이 경우 대상 행을 _다중 조인 행_이라고 합니다. 다중 조인 행을 업데이트할 때 ERROR_ON_NONDETERMINISTIC_UPDATE 세션 매개 변수는 업데이트 결과를 제어합니다” (Snowflake 설명서).