Snowflake SQL 변환 가이드
이 문서에서는 EDW(엔터프라이즈 데이터 웨어하우스)를 BigQuery로 이전하는 작업의 계획과 실행을 가속화하기 위해 Snowflake와 BigQuery 간의 SQL 구문 유사점과 차이점을 자세히 설명합니다. Snowflake 데이터 웨어하우징은 Snowflake 관련 SQL 구문으로 작동하도록 설계되었습니다. 서비스마다 SQL 언어가 다르므로 Snowflake용으로 작성된 스크립트를 BigQuery에서 사용하려면 먼저 변경해야 할 수 있습니다. 일괄 SQL 변환을 사용하여 SQL 스크립트를 일괄적으로 마이그레이션하거나 대화형 SQL 변환을 사용하여 임시 쿼리를 변환합니다. Snowflake SQL은 미리보기 상태의 두 도구에서 모두 지원됩니다.
데이터 유형
이 섹션에서는 Snowflake와 BigQuery의 데이터 유형 간의 유사점을 보여줍니다.
Snowflake | BigQuery | 참고 |
---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC |
Snowflake의 NUMBER 데이터 유형은 38자리의 정밀도와 37자리의 소수 자릿수를 지원합니다. 사용자에 따라 정밀도와 소수 자릿수를 지정할 수 있습니다.BigQuery는 특정 범위 내에서 정밀도 및 소수 자릿수를 선택적으로 지정하는 NUMERIC 및 BIGNUMERIC 을 지원합니다. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER 및 다른 모든 INT 와 비슷한 데이터 유형(예: BIGINT, TINYINT, SMALLINT, BYTEINT )은 정밀도 및 소수 자릿수를 지정할 수 없으며 항상 NUMBER(38, 0) 인 NUMBER 데이터 유형의 별칭을 나타냅니다. |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
Snowflake의 FLOAT 데이터 유형은 'NaN'을 > X로 설정합니다. 여기서 X는 FLOAT 값('NaN' 자체가 아닌 경우)입니다.BigQuery의 FLOAT 데이터 유형은 'NaN'을 < X로 설정합니다. 여기서 X는 FLOAT 값('NaN' 자체가 아닌 경우)입니다. |
DOUBLE/ REAL |
FLOAT64 |
Snowflake의 DOUBLE 데이터 유형은 Snowflake의 FLOAT 데이터 유형과 동의어이지만 일반적으로 FLOAT 로 잘못 표시됩니다. DOUBLE 로 올바르게 저장됩니다. |
VARCHAR |
STRING |
Snowflake의 VARCHAR 데이터 유형은 최대 길이가 16MB (비압축)입니다. 길이를 지정하지 않을 경우 기본값은 최대 길이입니다.BigQuery의 STRING 데이터 유형은 가변 길이 UTF-8로 인코딩된 유니코드로 저장됩니다. 최대 길이는 16,000자입니다. |
CHAR/CHARACTER |
STRING |
Snowflake의 CHAR 데이터 유형은 최대 길이는 1입니다. |
STRING/TEXT |
STRING |
Snowflake의 STRING 데이터 유형은 Snowflake의 VARCHAR와 동의어입니다. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
BigQuery의 BOOL 데이터 유형은 TRUE/FALSE/NULL을 허용하는 Snowflake의 BOOL 데이터 유형과 달리 TRUE/FALSE 만 허용할 수 있습니다. |
DATE |
DATE |
Snowflake의 DATE 유형은 'YYYY-[M]M-[D]D' 형식의 날짜만 허용하는 BigQuery의 DATE 유형과는 달리 가장 일반적인 날짜 형식을 허용합니다. |
TIME |
TIME |
Snowflake의 TIME 유형은 0~9나노초의 정밀도를 지원하는 반면 BigQuery의 TIME 유형은 0~6나노초의 정밀도를 지원합니다. |
TIMESTAMP |
DATETIME |
TIMESTAMP 는 BigQuery에서 DATETIME 에 매핑되는 기본값이 TIMESTAMP_NTZ 인 사용자가 구성할 수 있는 별칭입니다. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
Snowflake의 OBJECT 유형은 명시적인 유형 값을 지원하지 않습니다. 값은 VARIANT 유형입니다. |
VARIANT |
JSON |
Snowflake의 OBJECT 유형은 명시적인 유형 값을 지원하지 않습니다. 값은 VARIANT 유형입니다. |
ARRAY |
ARRAY<JSON> |
Snowflake의 ARRAY 유형은 VARIANT 유형만 지원할 수 있지만 BigQuery 의 ARRAY 유형은 배열 자체를 제외한 모든 데이터 유형을 지원할 수 있습니다. |
또한 BigQuery에는 직접 Snowflake 아날로그가 없는 다음과 같은 데이터 유형도 있습니다.
쿼리 구문 및 쿼리 연산자
이 섹션에서는 Snowflake와 BigQuery 간 쿼리 구문의 차이점을 설명합니다.
SELECT
문
대부분의 Snowflake SELECT
문은 BigQuery와 호환됩니다. 아래 표에는 기타 다른 차이점 목록이 포함되어 있습니다.
Snowflake | BigQuery | |
---|---|---|
|
|
|
참고: Snowflake는 동일한 SELECT 문에서 별칭 생성 및 참조를 지원합니다. |
|
|
|
|
Snowflake 별칭 및 식별자는 기본적으로 대소문자를 구분하지 않습니다. 대소문자를 유지하려면 별칭과 식별자를 큰따옴표(")로 묶습니다.
BigQuery는 SELECT
문에서 다음 표현식도 지원합니다. Snowflake에는 해당 항목이 없습니다.
FROM
절
쿼리의 FROM
절은 SELECT 문에 사용할 수 있는 테이블, 뷰, 서브 쿼리 또는 테이블 함수를 지정합니다. 이러한 테이블 참조는 모두 BigQuery에서 지원됩니다.
아래 표에는 기타 다른 차이점 목록이 포함되어 있습니다.
Snowflake | BigQuery | |
---|---|---|
|
WITH table1 AS |
|
|
|
|
|
참고: BigQuery에는 Snowflake의 문 ID를 사용하는 BEFORE를 대신할 항목이 없습니다. 타임스탬프 값은 현재 타임스탬프로부터 7일 이하여야 합니다. |
|
|
BigQuery는 스테이징된 파일의 개념을 지원하지 않습니다. |
|
|
BigQuery는 Snowflake의 |
다음을 사용하여 FROM
절에서 BigQuery 테이블을 참조할 수 있습니다.
[project_id].[dataset_id].[table_name]
[dataset_id].[table_name]
[table_name]
BigQuery는 추가 테이블 참조도 지원합니다.
FOR SYSTEM_TIME AS OF
를 사용하는 테이블 정의 및 행의 이전 버전- 필드 경로 또는 데이터 유형 내에서 필드로 확인되는 경로(즉,
STRUCT
) - 평면화된 배열
WHERE
절
Snowflake WHERE
절과 BigQuery WHERE
절은 다음을 제외하고 동일합니다.
Snowflake | BigQuery | |
---|---|---|
|
SELECT col1, col2 참고: BigQuery는 JOIN 에 대해 (+) 구문을 지원하지 않습니다. |
JOIN
유형
Snowflake 및 BigQuery 모두 다음 유형의 조인을 지원합니다.
[INNER] JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN
CROSS JOIN
과 이에 상응하는 암시적 '쉼표 교차 조인'
Snowflake와 BigQuery 모두 ON
및 USING
절을 지원합니다.
아래 표에는 기타 다른 차이점 목록이 포함되어 있습니다.
Snowflake | BigQuery | |
---|---|---|
|
참고: BigQuery에서 JOIN 절은 교차 조인이 아니거나 조인된 테이블 중 하나가 데이터 유형 또는 배열 내의 필드인 경우를 제외하고 조인 조건이 필요합니다. |
|
참고: 비측면 조인의 출력과 달리 측면 조인의 출력에는 인라인 뷰에서 생성된 행만 포함됩니다. 왼쪽 행은 인라인 뷰로 전달되어 이미 고려되었으므로 왼쪽 행은 오른쪽에 조인할 필요가 없습니다. |
LATERAL JOIN 의 직접 대신할 항목을 지원하지 않습니다. |
WITH
절
BigQuery WITH
절은 명명된 서브 쿼리를 한 개 이상 포함하며, 이는 후속 SELECT
문에서 참조할 때마다 실행됩니다. Snowflake WITH
절은 BigQuery와 동일하게 작동하지만 BigQuery는 WITH RECURSIVE
를 지원하지 않습니다.
GROUP BY
절
Snowflake GROUP BY
절은 GROUP
BY
, GROUP BY
ROLLUP
, GROUP BY GROUPING
SETS
, GROUP BY
CUBE
를 지원하고 BigQuery GROUP BY
절은 GROUP
BY
및 GROUP BY
ROLLUP
을 지원합니다.
Snowflake HAVING
와 BigQuery HAVING
은 동의어입니다. HAVING
은 GROUP BY
및 집계 이후 그리고 ORDER BY
이전에 발생합니다.
Snowflake | BigQuery | |
---|---|---|
|
|
|
|
|
|
참고: Snowflake는 동일한 쿼리 블록에서 최대 128개의 그룹화 세트를 허용합니다. |
BigQuery는 Snowflake의 GROUP BY GROUPING SETS 를 직접 대신할 항목을 지원하지 않습니다. |
|
참고: Snowflake는 각 큐브에서 최대 7개의 요소(그룹화 세트 128개)를 허용합니다. |
BigQuery는 Snowflake의 GROUP BY CUBE 를 직접 대신할 항목을 지원하지 않습니다. |
ORDER BY
절
Snowflake ORDER BY
절과 BigQuery ORDER BY
절 사이에는 몇 가지 사소한 차이가 있습니다.
Snowflake | BigQuery | |
---|---|---|
Snowflake에서 NULL 은 기본적으로 마지막에 옵니다(오름차순). |
BigQuery에서 NULLS 는 기본적으로 처음에 옵니다(내림차순). |
|
NULLS FIRST 또는 NULLS LAST 를 사용하여 NULL 값을 먼저 정렬할지 또는 마지막으로 정렬할지 지정할 수 있습니다. |
BigQuery에서 NULL 값을 먼저 정렬할지 또는 마지막으로 정렬할지 지정하는 항목이 없습니다. |
LIMIT/FETCH
절
Snowflake의 LIMIT/FETCH
절은 문 또는 서브 쿼리에서 반환되는 최대 행 수를 제한합니다.
LIMIT
(Postgres 문법) 및 FETCH
(ANSI 문법)는 동일한 결과를 생성합니다.
Snowflake 및 BigQuery에서 쿼리에 LIMIT
절을 적용해도 쿼리가 읽는 데이터 양은 달라지지 않습니다.
Snowflake | BigQuery | |
---|---|---|
참고: NULL , 빈 문자열('') 및 $$$$ 값이 허용되며 '무제한'으로 처리됩니다. 기본 용도는 커넥터 및 드라이버입니다. |
참고: BigQuery는 FETCH 를 지원하지 않습니다. LIMIT 이 FETCH 를 대체합니다.참고: BigQuery에서 OFFSET 을 LIMIT count 와 함께 사용해야 합니다. 최고의 성능을 위해 count INT64 값은 필요한 최소 정렬 행으로 설정해야 합니다. 모든 결과 행을 불필요하게 정렬하면 쿼리 실행 성능이 저하됩니다. |
QUALIFY
절
Snowflake에서 QUALIFY
절을 사용하면 HAVING
이 집계 함수와 GROUP BY
절로 수행하는 기능과 유사한 윈도우 함수의 결과를 필터링할 수 있습니다.
Snowflake | BigQuery | |
---|---|---|
|
ROW_NUMBER() , COUNT() 와 같은 분석 함수나 OVER PARTITION BY 를 사용하는 Snowflake QUALIFY 절은 BigQuery에서 분석 값을 포함하는 서브 쿼리에 WHERE 절로 표현됩니다.ROW_NUMBER() 사용:SELECT col1, col2
더 큰 파티션을 지원하는 ARRAY_AGG() 사용:
|
함수
다음 섹션에는 Snowflake 함수와 그에 해당하는 BigQuery 함수가 나와 있습니다.
집계 함수
다음 표는 일반적인 Snowflake 집계, 집계 분석, 근사치 집계 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
참고: DISTINCT 는 아무런 영향도 미치지 않습니다. |
|
참고: DISTINCT 는 아무런 영향도 미치지 않습니다. |
참고: BigQuery는 윈도우 함수에서 APPROX_COUNT_DISTINCT 를 지원하지 않습니다. |
참고: Snowflake에는 RESPECT NULLS 옵션이 없습니다. |
참고: BigQuery는 윈도우 함수에서 APPROX_QUANTILES 를 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
참고: 숫자 매개변수를 지정하지 않을 경우 기본값은 1입니다. 카운터가 숫자보다 훨씬 커야 합니다. |
참고: BigQuery는 윈도우 함수에서 APPROX_TOP_COUNT 를 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
|
BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다. |
|
커스텀 UDF를 사용하여 k 개의 고유한 해시 함수로 MINHASH 를 구현할 수 있습니다. MINHASH 의 편차를 줄이는 또 다른 방법은 해시 함수의 최솟값을 k 로 유지하는 것입니다. 이 경우 Jaccard 색인은 다음과 같이 추산할 수 있습니다.
|
|
APPROXIMATE_JACCARD_INDEX 의 동의어이며 동일한 방식으로 구현할 수 있습니다. |
|
|
|
참고: BigQuery의 AVG 는 STRING 에서 자동 변환을 수행하지 않습니다. |
|
INTEGER 로 변환하지 않습니다. |
|
참고: BigQuery는 암시적으로 문자/텍스트 열을 가장 가까운 INTEGER 로 변환하지 않습니다. |
|
참고: BigQuery는 암시적으로 문자/텍스트 열을 가장 가까운 INTEGER 로 변환하지 않습니다. |
참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
|
참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
|
참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
숫자 표현식:
OVER 를 사용하려면 다음 명령어를 실행합니다(제공된 불리언 예시).
|
|
|
|
|
|
|
|
|
|
BigQuery는 Snowflake의 GROUPING 를 직접 대신할 항목을 지원하지 않습니다. 사용자 정의 함수를 통해 사용할 수 있습니다. |
|
BigQuery는 Snowflake의 GROUPING_ID 를 직접 대신할 항목을 지원하지 않습니다. 사용자 정의 함수를 통해 사용할 수 있습니다. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER] FROM t |
참고: Snowflake에서는 정밀도를 지정할 수 없습니다. |
참고: BigQuery는 윈도우 함수에서 HLL_COUNT… 를 지원하지 않습니다. 사용자는 단일 HLL_COUNT... 함수에 여러 표현식을 포함할 수 없습니다. |
참고: Snowflake에서는 정밀도를 지정할 수 없습니다. |
HLL_COUNT.INIT (expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL (sketch) |
|
|
|
BigQuery는 Snowflake의 HLL_EXPORT 를 직접 대신할 항목을 지원하지 않습니다. |
|
BigQuery는 Snowflake의 HLL_IMPORT 를 직접 대신할 항목을 지원하지 않습니다. |
|
BigQuery는 Snowflake의 KURTOSIS 를 직접 대신할 항목을 지원하지 않습니다. |
|
|
참고: Snowflake는 ARRAY_AGG. 에서 직접 IGNORE|RESPECT NULLS 및 LIMIT 에 대한 기능을 지원하지 않습니다. |
|
|
|
|
커스텀 UDF를 사용하여 k 개의 고유한 해시 함수로 MINHASH 를 구현할 수 있습니다. MINHASH 의 편차를 줄이는 또 다른 방법은 해시 함수의 최솟값을 k 로 유지하는 것입니다. SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS MINHASH
|
|
<code<select FROM ( SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TA AS t ORDER BY h LIMIT k UNION SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TB AS t ORDER BY h LIMIT k ) ORDER BY h LIMIT k |
|
|
|
TO_JSON_STRING 을 사용하여 값을 JSON 형식의 문자열로 변환하는 것이 좋습니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery는 Snowflake의 SKEW 를 대신한 항목을 지원하지 않습니다. |
|
|
|
|
|
|
|
|
참고: Snowflake는 VARCHAR 을 부동 소수점 값으로 변환하는 기능을 지원합니다. |
|
참고: Snowflake는 VARCHAR 을 부동 소수점 값으로 변환하는 기능을 지원합니다. |
|
참고: Snowflake는 VARCHAR 을 부동 소수점 값으로 변환하는 기능을 지원합니다. |
|
참고: Snowflake는 VARCHAR 을 부동 소수점 값으로 변환하는 기능을 지원합니다. |
|
BigQuery는 다음과 같은 집계, 집계 분석, 근사치 집계 함수도 제공하며 이 함수는 Snowflake에 직접 아날로그가 없습니다.
비트 표현식 함수
다음 표는 일반적인 Snowflake 비트 표현식 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
표현식의 데이터 유형이 INTEGER
가 아니면 Snowflake가 INTEGER
로 변환하려고 시도합니다. 하지만 BigQuery는 INTEGER
로 변환을 시도하지 않습니다.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
참고: Snowflake는 DISTINCT. 를 지원하지 않습니다. |
|
조건부 표현식 함수
다음 표는 일반적인 Snowflake 조건식과 그에 해당하는 BigQuery 조건식 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
|
참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
|
참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
|
BOOLOR 참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
|
BOOLXOR 참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE 로 처리할 수 있습니다(0이 아닌 경우). |
BigQuery는 Snowflake의 BOOLXOR. 을 직접 대신할 항목을 지원하지 않습니다. |
|
|
참고: Snowflake에는 표현식이 두 개 이상 필요합니다. BigQuery에서는 하나만 필요합니다. |
|
|
DECODE 를 재현할 수 있습니다. NULL 선택 표현식과 NULL 검색 표현식을 일치시키려면 사용자가 = NULL 대신 IS NULL 을 사용해야 합니다. |
|
BigQuery는 Snowflake의 EQUAL_NULL. 을 직접 대신할 항목을 지원하지 않습니다. |
|
|
|
|
|
|
|
|
|
BigQuery는 Snowflake의 IS [ NOT ] DISTINCT FROM. 을 직접 대신할 항목을 지원하지 않습니다. |
|
|
|
BigQuery는 VARIANT 데이터 유형을 지원하지 않습니다. |
|
|
|
|
|
|
|
|
|
REGR... 함수를 직접 대신할 항목을 지원하지 않습니다. |
|
참고: BigQuery는 Snowflake의 REGR... 함수를 직접 대신할 항목을 지원하지 않습니다. |
|
|
컨텍스트 함수
다음 표는 일반적인 Snowflake 컨텍스트 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
참고: 직접적으로 비교되는 항목이 아닙니다. Snowflake는 계정 ID를 반환하고 BigQuery는 사용자 이메일 주소를 반환합니다. |
|
BigQuery에서 사용되지 않는 개념 |
|
그러면 프로젝트 이름 테이블이 반환됩니다. 직접 비교가 아닙니다. |
|
참고: Snowflake는 ANSI 표준을 준수하기 위해 CURRENT_DATE 명령어 다음에 '()'를 적용하지 않습니다. |
참고: BigQuery의 CURRENT_DATE 는 선택적 시간대 사양을 지원합니다. |
참고: BigQuery의 INFORMATION_SCHEMA.SCHEMATA 는 Snowflake의 CURRENT_REGION() 보다 더 일반화된 위치 참조를 반환합니다. 직접 비교가 아닙니다. |
|
BigQuery에서 사용되지 않는 개념 |
|
이는 프로젝트 또는 리전에서 사용할 수 있는 모든 데이터 세트(스키마라고도 함)의 테이블을 반환합니다. 직접 비교가 아닙니다. |
|
BigQuery에서 사용되지 않는 개념 |
|
BigQuery에서 사용되지 않는 개념 |
|
참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_* 를 사용하면 작업 유형, 시작/종료 유형 등으로 쿼리를 검색할 수 있습니다. |
|
참고: Snowflake는 선택적 소수부 초 단위 정밀도를 허용합니다. 유효한 값의 범위는 0~9나노초입니다. 기본값은 9입니다. ANSI를 준수하기 위해 '()' 없이 호출할 수 있습니다. |
|
참고: Snowflake는 선택적 소수부 초 단위 정밀도를 허용합니다. 유효한 값의 범위는 0~9나노초입니다. 기본값은 9입니다. ANSI를 준수하기 위해 '()' 없이 호출할 수 있습니다. TIMEZONE 을 세션 매개변수로 설정합니다. |
참고:
CURRENT_DATETIME 은 DATETIME 데이터 유형(Snowflake에서 지원되지 않음)을 반환합니다. CURRENT_TIMESTAMP 는 TIMESTAMP 데이터 유형을 반환합니다. |
INFORMATION_SCHEMA.JOBS_BY_* 를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다. |
|
참고: Snowflake는 ANSI 표준을 준수하기 위해 CURRENT_USER 명령어 다음에 '()'를 적용하지 않습니다. |
|
BigQuery에서 사용되지 않는 개념 |
|
|
|
|
참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_* 를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다. |
참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_* 를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다. |
|
참고: Snowflake는 ANSI 표준을 준수하기 위해 LOCALTIME 명령어 다음에 '()'를 적용하지 않습니다. |
|
참고:
CURRENT_DATETIME 은 DATETIME 데이터 유형(Snowflake에서 지원되지 않음)을 반환합니다. CURRENT_TIMESTAMP 는 TIMESTAMP 데이터 유형을 반환합니다. |
변환 함수
다음 표는 일반적인 Snowflake 변환 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
Snowflake와 BigQuery에서 동일하게 보이는 함수가 서로 다른 데이터 유형을 반환할 수 있습니다.
Snowflake | BigQuery |
---|---|
|
|
|
|
참고: Snowflake는 HEX , BASE64 , UTF-8 변환을 지원합니다. 또한 Snowflake는 VARIANT 데이터 유형을 사용하여 TO_BINARY 를 지원합니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 기본 STRING 변환은 UTF-8 인코딩을 사용합니다. Snowflake에는 BASE32 인코딩을 지원하는 옵션이 없습니다. |
참고:
|
참고:
|
참고: Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 입력 표현식은 FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME 또는 FORMAT_TIMESTAMP 를 사용하여 형식을 지정할 수 있습니다. |
참고: Snowflake는 INTEGER 유형을 DATE 유형으로 직접 변환하는 기능을 지원합니다. Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 입력 표현식은 FORMAT , FORMAT_DATETIME 또는 FORMAT_TIMESTAMP 를 사용하여 형식을 지정할 수 있습니다. |
참고: DECIMAL , NUMBER , NUMERIC 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 입력표현식은 FORMAT. 을 사용하여 형식을 지정할 수 있습니다. |
참고: DOUBLE 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 입력표현식은 FORMAT. 을 사용하여 형식을 지정할 수 있습니다. |
|
BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. |
|
BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. |
참고: STRING 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. BigQuery의 입력 표현식은 FORMAT , FORMAT_DATETIME , FORMAT_TIMESTAMP 또는 FORMAT_TIME 을 사용하여 형식을 지정할 수 있습니다. |
참고: BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다. |
참고: BigQuery의 입력 표현식은 FORMAT , FORMAT_DATE , FORMAT_DATETIME , FORMAT_TIME 를 사용하여 형식을 지정할 수 있습니다. FORMAT_TIMESTAMP 매개변수를 통해 시간대를 포함하거나 포함하지 않을 수 있습니다. |
|
BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. |
|
BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 변환 함수도 제공합니다.
CODE_POINTS_TO_BYTES
CODE_POINTS_TO_STRING
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
SAFE_CONVERT_BYTES_TO_STRING
TO_BASE32
TO_CODE_POINTS
데이터 생성 함수
다음 표에서는 일반적인 Snowflake 데이터 생성 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
BigQuery는 Snowflake의 NORMAL. 와 직접적으로 비교되는 항목을 지원하지 않습니다. |
|
참고: BigQuery는 시드를 지원하지 않습니다. |
|
BigQuery는 Snowflake의 RANDSTR. 과 직접적으로 비교되는 항목을 지원하지 않습니다. |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
BigQuery는 Snowflake의 SEQ_. 와 직접적으로 비교되는 항목을 지원하지 않습니다. |
|
참고:영구 UDF를 사용하여 Snowflake의 UNIFORM 에 상응하는 항목을 만듭니다. 여기에서 예시 참조 |
UUID_STRING([uuid, name]) 참고: Snowflake는 임의의 128비트를 반환합니다. Snowflake는 버전 4(랜덤) 및 버전 5(이름이 지정된) UUID를 모두 지원합니다. |
참고: BigQuery는 122개의 임의 비트를 반환합니다. BigQuery는 버전 4 UUID만 지원합니다. |
|
BigQuery는 Snowflake의 ZIPF. 와 직접적으로 비교되는 항목을 지원하지 않습니다. |
날짜 및 시간 함수
다음 표는 일반적인 Snowflake 날짜 및 시간 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다. BigQuery 날짜 및 시간 함수에는 날짜 함수, 날짜/시간 함수, 시간 함수, 타임스탬프 함수가 포함됩니다.
Snowflake | BigQuery |
---|---|
|
|
|
참고: BigQuery에서는 source_timezone이 항상 UTC입니다. |
참고: Snowflake에서는 오버플로 및 음수 날짜를 지원합니다. 예를 들어 DATE_FROM_PARTS(2000, 1 + 24, 1) 는 2002년 1월 1일을 반환합니다. BigQuery에서는 지원되지 않습니다. |
|
참고: Snowflake는 요일 ISO, 나노초, 에포크 초/밀리초/마이크로초/나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기 에서 확인하세요. |
참고: BigQuery는 주(<weekday>), 마이크로초, 밀리초 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. BigQuery 부분 유형의 전체 목록은 여기와 여기에서 확인할 수 있습니다. |
참고: Snowflake는 나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기 에서 확인하세요. |
참고: BigQuery는 주(<weekday>), ISO 주, ISO 연도 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. |
|
|
참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다. |
참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다. |
|
|
참고: Snowflake는 요일 ISO, 나노초, 에포크 초/밀리초/마이크로초/나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기 에서 확인하세요. |
참고: BigQuery는 주(<weekday>), 마이크로초, 밀리초 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. BigQuery 부분 유형의 전체 목록은 여기와 여기에서 확인할 수 있습니다. |
|
|
|
|
|
|
|
참고: dowString의 형식을 다시 지정해야 할 수 있습니다. 예를 들어 Snowflake의 'su'은 BigQuery의 'SUNDAY'가 됩니다. |
|
참고: dowString의 형식을 다시 지정해야 할 수 있습니다. 예를 들어 Snowflake의 'su'은 BigQuery의 'SUNDAY'가 됩니다. |
참고: Snowflake는 오버플로 시간을 지원합니다. 예를 들어 TIME_FROM_PARTS(0, 100, 0) 는 01:40:00...을 반환합니다. BigQuery에서는 지원되지 않습니다. BigQuery는 나노초를 지원하지 않습니다. |
|
|
참고: BigQuery에서는 Snowflake의 TIME_SLICE 에 직접적으로 정확하게 비교되는 항목을 지원하지 않습니다. 적절한 데이터 유형에 DATETINE_TRUNC , TIME_TRUNC , TIMESTAMP_TRUNC 를 사용합니다. |
|
|
참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다. |
참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다. |
|
참고: BigQuery에서는 타임스탬프를 STRING 유형으로 입력해야 합니다. 예를 들면 "2008-12-25 15:30:00" 입니다. |
|
|
참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다. |
참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다. |
참고: Snowflake는 나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기 에서 확인하세요. |
참고: BigQuery는 주(<weekday>), ISO 주, ISO 연도 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. |
|
|
BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 날짜 및 시간 함수도 제공합니다.
정보 스키마 및 테이블 함수
BigQuery는 Snowflake의 여러 정보 스키마 및 테이블 함수를 개념적으로 지원하지 않습니다. Snowflake는 BigQuery에 직접 아날로그가 없는 다음과 같은 정보 스키마 및 테이블 함수를 제공합니다.
AUTOMATIC_CLUSTERING_HISTORY
COPY_HISTORY
DATA_TRANSFER_HISTORY
DATABASE_REFRESH_HISTORY
DATABASE_REFRESH_PROGRESS, DATABASE_REFRESH_PROGRESS_BY_JOB
DATABASE_STORAGE_USAGE_HISTORY
EXTERNAL_TABLE_FILES
EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY
LOGIN_HISTORY
,LOGIN_HISTORY_BY_USER
MATERIALIZED_VIEW_REFRESH_HISTORY
PIPE_USAGE_HISTORY
REPLICATION_USAGE_HISTORY
STAGE_STORAGE_USAGE_HISTORY
TASK_DEPENDENTS
VALIDATE_PIPE_LOAD
WAREHOUSE_LOAD_HISTORY
WAREHOUSE_METERING_HISTORY
다음은 관련된 BigQuery 및 Snowflake 정보 스키마와 테이블 함수 목록입니다.
Snowflake | BigQuery |
---|---|
QUERY_HISTORY QUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_* 참고: 직접적으로 대체하는 항목이 아닙니다. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_* 참고: 직접적으로 대체하는 항목이 아닙니다. |
BigQuery는 Snowflake에 직접 아날로그가 없는 다음 정보 스키마 및 테이블 함수를 제공합니다.
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
숫자 함수
다음 표는 일반적인 Snowflake 숫자 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
참고: BigQuery의 CEIL 는 정밀도 또는 소수 자릿수를 표시하는 기능을 지원하지 않습니다. ROUND 에서는 반올림을 지정할 수 없습니다. |
|
|
|
|
|
|
|
|
|
|
|
BigQuery는 Snowflake의 FACTORIAL 을 대신할 항목이 없습니다. 사용자 정의 함수를 사용합니다. |
|
참고: BigQuery의 FLOOR 는 정밀도 또는 소수 자릿수를 표시하는 기능을 지원하지 않습니다. ROUND 에서는 반올림을 지정할 수 없습니다. TRUNC 는 절대값을 평가하므로 양수에 대해서는 동의어로 수행되지만 음수에는 수행되지 않습니다. |
|
참고: 일치검색은 아니지만 매우 유사합니다. |
|
|
|
참고: LOG 의 기본 기본값은 10입니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
참고: BigQuery의 반환 값은 표현식보다 작아야 합니다. 같은 값은 지원하지 않습니다. |
BigQuery는 다음과 같은 수학 함수도 제공하며, Snowflake에는 직접적인 유사 항목이 없습니다.
IS_INF
IS_NAN
IEEE_DIVIDE
DIV
SAFE_DIVIDE
SAFE_MULTIPLY
SAFE_NEGATE
SAFE_ADD
SAFE_SUBTRACT
RANGE_BUCKET
반구조화된 데이터 함수
문자열 및 바이너리 함수
Snowflake | BigQuery |
---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
커스텀 사용자 정의 함수입니다. |
COLLATION |
커스텀 사용자 정의 함수입니다. |
COMPRESS |
커스텀 사용자 정의 함수입니다. |
|
CONCAT (...)는 원하는 수의 문자열을 연결할 수 있도록 지원합니다. |
CONTAINS |
커스텀 사용자 정의 함수입니다. |
DECOMPRESS_BINARY |
커스텀 사용자 정의 함수입니다. |
DECOMPRESS_STRING |
커스텀 사용자 정의 함수입니다. |
EDITDISTANCE |
커스텀 사용자 정의 함수입니다. |
ENDSWITH |
커스텀 사용자 정의 함수입니다. |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
커스텀 사용자 정의 함수입니다. |
ILIKE ANY |
커스텀 사용자 정의 함수입니다. |
INITCAP |
INITCAP |
INSERT |
커스텀 사용자 정의 함수입니다. |
LEFT |
사용자 정의 함수 |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
커스텀 사용자 정의 함수입니다. |
LIKE ANY |
커스텀 사용자 정의 함수입니다. |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
커스텀 사용자 정의 함수입니다. |
OCTET_LENGTH |
커스텀 사용자 정의 함수입니다. |
PARSE_IP |
커스텀 사용자 정의 함수입니다. |
PARSE_URL |
커스텀 사용자 정의 함수입니다. |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
사용자 정의 함수 |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
커스텀 사용자 정의 함수입니다. |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
커스텀 사용자 정의 함수입니다. |
SHA2,SHA2_HEX |
커스텀 사용자 정의 함수입니다. |
SHA2_BINARY |
커스텀 사용자 정의 함수입니다. |
SOUNDEX |
커스텀 사용자 정의 함수입니다. |
SPACE |
커스텀 사용자 정의 함수입니다. |
SPLIT |
SPLIT |
SPLIT_PART |
커스텀 사용자 정의 함수입니다. |
SPLIT_TO_TABLE |
커스텀 사용자 정의 함수입니다. |
STARTSWITH |
커스텀 사용자 정의 함수입니다. |
STRTOK |
참고: 전체 구분 기호 문자열 인수는 단일 구분 기호로 사용됩니다. 기본 구분 기호는 쉼표입니다. |
STRTOK_SPLIT_TO_TABLE |
커스텀 사용자 정의 함수입니다. |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
커스텀 사용자 정의 함수입니다. |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
커스텀 사용자 정의 함수입니다. |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
커스텀 사용자 정의 함수입니다. |
|
UPPER |
문자열 함수(정규 표현식)
Snowflake | BigQuery |
---|---|
REGEXP |
|
REGEXP_COUNT |
position 이 지정된 경우:
참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요. |
REGEXP_INSTR |
position 이 지정된 경우:
occurrence 가 지정된 경우:
참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요. |
|
|
REGEXP_REPLACE |
replace_string 이 지정된 경우:
position 가 지정된 경우:
참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요. |
REGEXP_SUBSTR |
position 이 지정된 경우:
occurrence 가 지정된 경우:
참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요. |
RLIKE |
|
시스템 함수
테이블 함수
Snowflake | BigQuery | |
---|---|---|
GENERATOR |
커스텀 사용자 정의 함수입니다. | |
GET_OBJECT_REFERENCES |
커스텀 사용자 정의 함수입니다. | |
RESULT_SCAN |
커스텀 사용자 정의 함수입니다. | |
VALIDATE |
커스텀 사용자 정의 함수입니다. |
유틸리티 및 해시 함수
Snowflake | BigQuery | |
---|---|---|
GET_DDL |
기능 요청 | |
HASH |
HASH는 Snowflake 관련 독점 함수입니다. Snowflake에서 사용하는 기본 로직을 모르면 변환할 수 없습니다. |
윈도우 함수
Snowflake | BigQuery | |
---|---|---|
CONDITIONAL_CHANGE_EVENT |
커스텀 사용자 정의 함수입니다. | |
CONDITIONAL_TRUE_EVENT |
커스텀 사용자 정의 함수입니다. | |
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
NTH_VALUE |
NTH_VALUE |
|
NTILE |
NTILE |
|
PERCENT_RANK |
PERCENT_RANK |
|
RANK |
RANK |
|
RATIO_TO_REPORT |
커스텀 사용자 정의 함수입니다. | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
커스텀 사용자 정의 함수입니다. |
또한 BigQuery는 BigQuery가 변환을 수행할 수 없을 때 NULL을 반환하는 SAFE_CAST
(expression AS typename)를 지원합니다. 예를 들어 SAFE_CAST
('apple' AS INT64)는 NULL을 반환합니다.
연산자
다음 섹션에는 Snowflake 연산자와 그에 해당하는 BigQuery 함수가 나와 있습니다.
산술 연산자
다음 표에서는 Snowflake 산술 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
|
|
|
|
참고: BigQuery는 표준 단항 뺄셈을 지원하지만 문자열 형식의 정수를 INT64 , NUMERIC 또는 FLOAT64 유형으로 변환하지 않습니다. |
|
|
|
|
|
|
|
|
|
|
산술 작업을 수행할 때 Snowflake 소수 자릿수 및 정밀도 세부정보를 보려면 Snowflake 문서를 참조하세요.
비교 연산자
Snowflake 비교 연산자와 BigQuery 비교 연산자는 동일합니다.
논리/불리언 연산자
Snowflake 논리/불리언 연산자와 BigQuery 논리/불리언 연산자는 동일합니다.
집합 연산자
다음 표에서는 Snowflake 설정 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
INTERSECT DISTINCT
|
참고: MINUS 및 EXCEPT 는 동의어입니다. |
|
|
|
서브 쿼리 연산자
다음 표에서는 Snowflake 서브 쿼리 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
BigQuery는 Snowflake의 ALL/ANY를 직접 대신할 항목을 지원하지 않습니다. |
|
|
|
|
|
참고: BigQuery에서는 서로 다른 집합 작업을 분리하려면 괄호로 묶어야 합니다. 동일한 집합 연산자가 반복되는 경우 괄호가 필요하지 않습니다. |
DML 구문
이 섹션에서는 Snowflake와 BigQuery 간 데이터 관리 언어 구문의 차이점을 설명합니다.
INSERT
문
Snowflake는 열에 대해 구성 가능한 DEFAULT
키워드를 제공합니다. BigQuery에서 null 허용 열의 DEFAULT
값은 NULL이며 DEFAULT
는 필수 열에서 지원되지 않습니다. 대부분의 Snowflake INSERT
문은 BigQuery와 호환됩니다. 다음 표에는 예외 사항이 나와 있습니다.
Snowflake | BigQuery |
---|---|
참고: BigQuery에서는 INSERT 문이 있는 JSON 객체 삽입이 지원되지 않습니다. |
VALUES (DEFAULT [, ...]) 참고: BigQuery는 Snowflake의 OVERWRITE 를 직접 대신할 항목을 지원하지 않습니다. 대신 DELETE 를 사용하세요. |
|
|
... 참고:
<intoClause> 는 위에 나열된 표준 INSERT statement 를 나타냅니다. |
BigQuery는 조건부 및 비조건부 다중 테이블 INSERTs 를 지원하지 않습니다. |
BigQuery는 서브 쿼리를 사용한 값 삽입(서브 쿼리를 사용하여 값 중 하나를 계산)도 지원하는데 Snowflake의 경우 이를 지원하지 않습니다. 예를 들면 다음과 같습니다.
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY
문
Snowflake는 스테이지 파일에서 기존 테이블로, 테이블에서 명명된 내부 단계, 이름이 지정된 외부 단계, 외부 위치(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)로 데이터를 복사하는 기능을 지원합니다.
BigQuery는 COPY
명령어를 사용하여 데이터를 로드하지 않지만, 여러 가지 비SQL 도구 및 옵션을 사용하여 BigQuery 테이블에 데이터를 로드할 수 있습니다. 또한 Apache Spark 또는 Apache Beam에서 제공되는 데이터 파이프라인 싱크를 사용하여 BigQuery에 데이터를 쓸 수 있습니다.
UPDATE
문
대부분의 Snowflake UPDATE
문은 BigQuery와 호환됩니다. 다음 표에는 예외 사항이 나와 있습니다.
Snowflake | BigQuery | |
---|---|---|
|
참고: BigQuery의 모든 UPDATE 문에는 뒤에 조건이 나오는 WHERE 키워드가 필요합니다. |
DELETE
및 TRUNCATE TABLE
문
테이블 스키마 또는 색인에 영향을 주지 않고 테이블에서 행을 삭제하려면 DELETE
및 TRUNCATE TABLE
문을 사용합니다.
Snowflake에서 DELETE
및 TRUNCATE TABLE
는 모두 데이터 보관 기간 동안 복구 목적으로 Snowflake의 시간 이동을 사용하여 삭제된 데이터를 유지합니다.
하지만 DELETE는 외부 파일 로드 기록과 로드 메타데이터를 삭제하지 않습니다.
BigQuery의 DELETE
문에는 WHERE
절이 있어야 합니다. BigQuery의 DELETE
에 대한 자세한 내용은 DML 문서에서 BigQuery DELETE
예시를 참조하세요.
Snowflake | BigQuery |
---|---|
|
참고: BigQuery DELETE 문에는 WHERE 절이 필요합니다. |
MERGE
문
MERGE
문은 INSERT
, UPDATE
, DELETE
작업을 단일 'upsert' 문으로 결합하여 자동으로 작업을 수행할 수 있습니다. MERGE
작업은 각 대상 행에 대해 최대 1개의 소스 행과 일치해야 합니다.
BigQuery 테이블은 DML 문이 하루 1,000개로 제한되므로 다음 테이블과 같이 INSERT, UPDATE, DELETE 문을 단일 MERGE 문으로 통합하는 것이 이상적입니다.
Snowflake | BigQuery |
---|---|
참고: Snowflake는 비결정적 결과를 처리하기 위해 ERROR_ON_NONDETERMINISTIC_MERGE 세션 매개변수를 지원합니다. |
참고: 모든 열을 업데이트할 경우 모든 열이 나열되어야 합니다. |
GET
및 LIST
문
GET
문은 다음 Snowflake 단계 중 하나에서 데이터 파일을 클라이언트 머신의 로컬 디렉터리/폴더로 다운로드합니다.
- 이름이 지정된 내부 단계
- 지정된 테이블의 내부 단계
- 현재 사용자의 내부 단계
LIST
(LS) 문은 다음 Snowflake 단계 중 하나에서 스테이징된(즉, 로컬 파일 시스템에서 업로드되거나 테이블에서 언로드된) 파일 목록을 반환합니다.
- 이름이 지정된 내부 단계
- 이름이 지정된 외부 단계
- 지정된 테이블의 단계
- 현재 사용자의 단계
BigQuery는 스테이징 개념을 지원하지 않으며 GET
및 LIST
에 상응하는 개념이 없습니다.
PUT
및 REMOVE
문
PUT
문은 클라이언트 머신의 로컬 디렉터리/폴더에서 다음 Snowflake 단계 중 하나로 데이터 파일을 업로드(즉, 스테이징)합니다.
- 이름이 지정된 내부 단계
- 지정된 테이블의 내부 단계
- 현재 사용자의 내부 단계
REMOVE
(RM)
문은 다음 Snowflake 내부 단계 중 하나에 스테이징된 파일을 삭제합니다.
- 이름이 지정된 내부 단계
- 지정된 테이블의 단계
- 현재 사용자의 단계
BigQuery는 스테이징 개념을 지원하지 않으며 PUT
및 REMOVE
에 상응하는 개념이 없습니다.
DDL 구문
이 섹션에서는 Snowflake와 BigQuery 간 데이터 정의 언어 구문의 차이점을 설명합니다.
데이터베이스, 스키마, 공유 DDL
대부분의 Snowflake 용어는 BigQuery의 용어와 일치합니다. 단, Snowflake 데이터베이스는 BigQuery 데이터 세트와 유사합니다. Snowflake에서 BigQuery로의 자세한 용어 매핑을 참조하세요.
CREATE DATABASE
문
Snowflake는 데이터베이스 관리 명령어를 통해 데이터베이스 생성 및 관리를 지원하고 BigQuery는 데이터 세트 만들기에 콘솔, CLI, 클라이언트 라이브러리 사용 등 여러 옵션을 제공합니다. 이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 차이점을 설명합니다.
Snowflake | BigQuery |
---|---|
참고: Snowflake는 데이터베이스 이름을 지정할 때 이러한 요구사항을 제공합니다. 이름으로 255자(영문 기준)만 허용됩니다. |
참고: BigQuery에는 이름에 1,024자를 허용한다는 점을 제외하면 Snowflake와 데이터 세트 이름 지정 요구사항이 비슷합니다. |
|
BigQuery에서는 데이터 세트 교체가 지원되지 않습니다. |
|
BigQuery에서는 임시 데이터 세트 만들기가 지원되지 않습니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
데이터 세트 클론은 아직 BigQuery에서 지원되지 않습니다. |
|
BigQuery에서는 데이터 세트 수준의 시간 이동이 지원되지 않습니다. 그러나 테이블 및 쿼리 결과에 대한 시간 이동은 지원됩니다. |
|
BigQuery에서는 DDL의 콜레이션이 지원되지 않습니다. |
|
|
|
BigQuery에서는 공유 데이터 세트 만들기가 지원되지 않습니다. 하지만 데이터 세트가 생성되면 사용자가 콘솔/UI를 통해 데이터세트를 공유할 수 있습니다. |
참고: Snowflake는 BigQuery에서 지원되지 않는 보조 데이터베이스의 구체화된 뷰에 대한 자동 백그라운드 유지보수 옵션을 제공합니다. |
|
BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 bq mk
명령어 옵션도 제공합니다.
--location <dataset_location>
--default_table_expiration <time_in_seconds>
--default_partition_expiration <time_in_seconds>
ALTER DATABASE
문
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 ALTER 문의 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
|
BigQuery에서는 데이터 세트 이름 변경이 지원되지 않지만 데이터 세트 복사는 지원됩니다. |
|
BigQuery에서는 데이터 세트 바꾸기가 지원되지 않습니다. |
|
BigQuery에서는 데이터 세트 수준에서 데이터 보관 및 콜레이션이 지원되지 않습니다. |
|
|
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
|
BigQuery에서 지원되지 않는 개념입니다. |
DROP DATABASE
문
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 DROP 문의 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
참고: Snowflake에서 데이터베이스를 삭제해도 시스템에서 영구적으로 삭제되지는 않습니다. 삭제된 데이터베이스의 버전은 데이터베이스의 DATA_RETENTION_TIME_IN_DAYS 매개변수로 지정된 기간 동안 보존됩니다. |
-r 데이터 세트의 모든 객체를 삭제
-d 데이터 세트를 표시참고: BigQuery에서 데이터 세트 삭제는 영구적입니다. 또한 데이터 세트의 모든 데이터와 객체가 삭제되므로 데이터 세트 수준에서 연쇄 삭제가 지원되지 않습니다. |
또한 Snowflake는 삭제된 데이터 세트의 최신 버전을 복원하는 UNDROP DATASET
명령어도 지원합니다. 이는 현재 BigQuery의 데이터 세트 수준에서 지원되지 않습니다.
USE DATABASE
문
Snowflake는 USE DATABASE
명령어를 사용하여 사용자 세션의 데이터베이스를 설정하는 옵션을 제공합니다. 따라서 SQL 명령어에 정규화된 객체 이름을 지정할 필요가 없습니다. BigQuery에는 Snowflake의 USE DATABASE 명령어를 대체할 항목이 없습니다.
SHOW DATABASE
문
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 SHOW 문의 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
참고: Snowflake는 보관 기간 내에 삭제된 데이터베이스를 포함하여 모든 데이터베이스의 세부정보를 나열하고 표시하는 단일 옵션을 제공합니다. |
bq ls --format=prettyjsonand / or
참고: BigQuery에서 ls 명령어는 데이터 세트 이름과 기본 정보만 제공하고, show 명령어는 데이터 세트의 최종 수정된 타임스탬프, ACL, 라벨과 같은 세부정보를 제공합니다. BigQuery는 정보 스키마를 통해 데이터 세트에 대한 세부정보도 제공합니다. |
참고: TERSE 옵션을 사용하면 Snowflake에서 데이터 세트에 대한 특정 정보/필드만 표시할 수 있습니다. |
BigQuery에서 지원되지 않는 개념입니다. |
시간 이동 컨셉은 BigQuery의 데이터 세트 수준에서 지원되지 않습니다. | |
SHOW DATABASES
|
BigQuery에서는 데이터 세트 이름별로 결과를 필터링할 수 없습니다. 하지만 라벨별 필터링은 지원됩니다. |
SHOW DATABASES
참고: 기본적으로 Snowflake는 결과 수를 제한하지 않습니다. 하지만 한도 값은 10K를 초과할 수 없습니다. |
참고: 기본적으로 BigQuery는 50개의 결과만 표시합니다. |
BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 bq
명령어 옵션도 제공합니다.
- bq ls --format=pretty: 기본 형식의 결과를 반환합니다.
- *bq ls -a: *익명 데이터 세트(밑줄로 시작하는 데이터 세트)만 반환합니다.
- bq ls --all: 익명 데이터 세트를 포함한 모든 데이터 세트를 반환합니다.
- bq ls --filter labels.key:value: 데이터 세트 라벨로 필터링된 결과를 반환합니다.
- bq ls --d: 익명 데이터 세트 양식 결과를 제외합니다.
- bq show --format=pretty: 모든 데이터 세트에 대한 상세한 기본 형식의 결과를 반환합니다.
SCHEMA
관리
Snowflake는 데이터베이스 관리 명령어와 유사한 여러 스키마 관리 명령어를 제공합니다. 스키마 만들기 및 관리 개념은 BigQuery에서 지원되지 않습니다.
하지만 BigQuery를 사용하면 데이터를 테이블에 로드할 때와 빈 테이블을 만들 때 테이블의 스키마를 지정할 수 있습니다. 또는 지원되는 데이터 형식의 스키마 자동 감지를 사용할 수 있습니다.
SHARE
관리
Snowflake는 데이터베이스 및 스키마 관리 명령어와 유사한 여러 공유 관리 명령어를 제공합니다. 공유 만들기 및 관리 개념은 BigQuery에서 지원되지 않습니다.
테이블, 뷰, 시퀀스 DDL
CREATE TABLE
문
대부분의 CREATE TABLE
문은 BigQuery에서 사용되지 않는 다음 구문 요소를 제외하고 BigQuery와 호환됩니다.
Snowflake | BigQuery |
---|---|
참고: UNIQUE 및 PRIMARY KEY 제약조건은 정보 제공용으로 Snowflake 시스템에 의해 시행되지 않습니다. |
|
여기서 table_constraints 는 다음과 같습니다.
참고:
UNIQUE 및 PRIMARY KEY 제약조건은 정보 제공용으로 Snowflake 시스템에 의해 시행되지 않습니다. |
참고: BigQuery는 UNIQUE , PRIMARY KEY 또는 FOREIGN KEY 테이블 제약조건을 사용하지 않습니다. 쿼리 실행 중에 이러한 제약조건이 제공하는 것과 유사하게 최적화하려면 BigQuery 테이블을 파티션으로 나누고 클러스터링합니다. CLUSTER BY 는 최대 4개 열까지 지원합니다. |
|
INFORMATION_SCHEMA 테이블을 사용해 열 이름, 데이터 유형, NOT NULL 제약조건을 새 테이블에 복사하는 방법을 알아보려면 이 예시를 참조하세요. |
참고: Snowflake에서 BACKUP NO 설정은 '스냅샷을 만들고 스냅샷에서 복원할 때 처리 시간을 절약하고 저장공간을 줄이기'로 지정됩니다. |
BigQuery는 처리 시간이나 요금이 청구되는 스토리지에 영향을 미치지 않고 모든 테이블의 이전 버전을 최대 7일간 자동으로 보관하므로 BACKUP NO 테이블 옵션이 사용되지 않거나 필요하지 않습니다. |
여기서 table_attributes 는 다음과 같습니다.
|
BigQuery는 클러스터링을 지원하여 키를 정렬된 순서로 저장할 수 있습니다. |
|
|
|
|
또한 BigQuery는 테이블이 이미 있는 경우 덮어쓰는 DDL 문 CREATE OR REPLACE
TABLE
문을 지원합니다.
BigQuery의 CREATE TABLE
문은 Snowflake에는 해당되는 항목이 없는 다음 절을 지원합니다.
BigQuery의 CREATE TABLE
에 대한 자세한 내용은 DML 문서에서 BigQuery CREATE
예시를 참조하세요.
ALTER TABLE
문
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 테이블의 ALTER 문 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
|
|
|
BigQuery에서는 테이블 바꾸기가 지원되지 않습니다. |
|
BigQuery에서는 테이블의 데이터 콜레이션 관리가 지원되지 않습니다. |
|
|
|
|
또한 Snowflake는 BigQuery에서 지원되지 않는 테이블을 변경하기 위한 클러스터링, 열, 제약조건 옵션을 제공합니다.
DROP TABLE
및 UNDROP TABLE
문
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 DROP 및 UNDROP 문의 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
참고: Snowflake에서 테이블을 삭제해도 시스템에서 영구적으로 삭제되지는 않습니다. 삭제된 테이블의 버전은 데이터베이스의 DATA_RETENTION_TIME_IN_DAYS 매개변수로 지정된 기간 동안 보존됩니다. |
-f는 실행 확인을 건너뛰는 것입니다. -d는 데이터 세트를 나타냅니다. 참고: BigQuery에서 테이블 삭제는 영구적이지 않지만 스냅샷은 현재 7일 동안만 유지됩니다. |
|
참고: BigQuery에서는 먼저 테이블이 있었던 시점의 UNIX 타임스탬프(밀리초 단위)를 확인해야 합니다. 그런 다음 해당 타임스탬프에 있는 테이블을 새 테이블에 복사합니다. 새 테이블 이름은 삭제한 테이블의 이름과 달라야 합니다. |
CREATE EXTERNAL TABLE
문
BigQuery를 사용하면 영구 및 임시 외부 테이블을 모두 만들고 다음에서 데이터를 직접 쿼리할 수 있습니다.
Snowflake를 사용하면 쿼리 시 지정된 외부 단계에 있는 하나 이상의 파일 집합에서 데이터를 읽는 영구 외부 테이블을 만들 수 있습니다.
이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 CREATE EXTERNAL TABLE 문의 차이를 설명합니다.
Snowflake | BigQuery |
---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
참고: Snowflake를 사용하면 읽을 데이터가 포함된 파일을 스테이징하고 외부 테이블의 형식 유형 옵션을 지정할 수 있습니다. Snowflake 형식 유형 - CSV, JSON, AVRO, PARQUET, ORC는 XML 유형을 제외하고 모두 BigQuery에서 지원됩니다. |
참고: BigQuery에서는 테이블 정의 파일 [1], JSON 스키마 파일 [2] 또는 인라인 스키마 정의 [3]을 사용하여 데이터 소스에 연결된 영구 테이블을 만들 수 있습니다. BigQuery에서는 읽을 스테이징 파일 및 형식 유형 옵션 지정이 지원되지 않습니다. |
|
참고: BigQuery에서는 현재 Snowflake에서 외부 테이블을 만드는 데 제공하는 선택적 매개변수 옵션을 지원하지 않습니다. 파티션 나누기의 경우 BigQuery는 _FILE_NAME 유사 열을 사용하여 외부 테이블에 파티션을 나눈 테이블/뷰를 만들 수 있습니다. 자세한 내용은 _FILE_NAME 유사 열 쿼리를 참조하세요. |
또한 BigQuery는 기본 하이브 파티션 나누기 레이아웃을 사용하여 Google Cloud Storage에 저장되는 AVRO, PARQUET, ORC, JSON, CSV 형식의 외부에서 파티션을 나눈 데이터 쿼리도 지원합니다.
CREATE VIEW
문
다음 표에서는 CREATE VIEW
문에 대해 Snowflake와 BigQuery 간 유사점을 보여줍니다.
Snowflake | BigQuery |
---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
지원되지 않음 | CREATE VIEW IF NOT EXISTS
|
|
BigQuery에서 뷰를 만들려면 모든 참조 객체가 이미 존재해야 합니다. BigQuery에서는 외부 데이터 소스를 쿼리할 수 있습니다. |
CREATE SEQUENCE
문
BigQuery에서는 시퀀스를 사용하지 않으며 다음과 같은 일괄 처리 방식으로 수행할 수 있습니다. 서로게이트 키와 지연 변경 측정기준(SCD)에 대한 자세한 내용은 다음 가이드를 참조하세요.
|
---|
데이터 로드 및 언로드 DDL
Snowflake는 스테이지, 파일 형식, 파이프 관리 명령어를 통해 데이터 로드 및 언로드를 지원합니다. BigQuery는 bq load, BigQuery Data Transfer Service, bq extract 등 다양한 옵션을 제공합니다. 이 섹션에서는 데이터 로드 및 언로드에 사용되는 이러한 방법론의 차이점에 대해 설명합니다.
계정 및 세션 DDL
Snowflake의 계정 및 세션 개념은 BigQuery에서 지원되지 않습니다. BigQuery를 사용하면 모든 수준에서 Cloud IAM을 통해 계정을 관리할 수 있습니다. 또한, 멀티 문 트랜잭션은 아직 BigQuery에서 지원되지 않습니다.
사용자 정의 함수(UDF)
UDF를 사용하면 커스텀 작업을 위한 함수를 만들 수 있습니다. 이러한 함수는 입력 열을 받아 작업을 수행하고 이러한 작업의 결과를 값으로 반환합니다.
Snowflake와 BigQuery 모두 SQL 표현식 및 JavaScript 코드를 사용한 UDF를 지원합니다.
일반적인 BigQuery UDF 라이브러리는 GoogleCloudPlatform/bigquery-utils/ GitHub 저장소를 참조하세요.
CREATE FUNCTION
구문
다음 표에서는 Snowflake와 BigQuery 간의 SQL UDF 생성 구문 차이점을 설명합니다.
Snowflake | BigQuery |
---|---|
|
참고: BigQuery SQL UDF에서 반환 데이터 유형은 선택사항입니다. 쿼리가 함수를 호출하면 BigQuery는 SQL 함수 본문을 통해 함수 결과 유형을 추론합니다. |
|
참고: BigQuery SQL UDF에서 테이블 유형 반환은 현재 지원되지 않지만 제품 로드맵에 있으며 곧 제공될 예정입니다. 그러나 BigQuery는 STRUCT 유형의 ARRAY 반환을 지원합니다. |
참고: Snowflake는 UDF 정의 및 세부정보를 승인된 사용자(즉, 뷰를 소유하는 역할을 부여받은 사용자)로 제한하는 보안 옵션을 제공합니다. |
참고: 함수 보안은 BigQuery에서 구성 가능한 매개변수가 아닙니다. BigQuery는 기본 역할 및 함수 정의에 대한 액세스를 제한하는 IAM 역할 및 권한 만들기를 지원합니다. |
|
참고: null 입력의 함수 동작은 BigQuery에서 암시적으로 처리되며 별도의 옵션으로 지정할 필요가 없습니다. |
|
참고: 함수 변동성은 BigQuery에서 구성 가능한 매개변수가 아닙니다. 모든 BigQuery UDF 변동성은 Snowflake의 IMMUTABLE 변동성과 동일합니다. 즉, 데이터베이스 조회를 수행하지 않거나 인수 목록에 직접 포함되지 않은 정보를 사용하지 않습니다. |
|
CREATE [OR REPLACE] FUNCTION
참고: 작은따옴표 또는 달러 기호($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression. |
|
Note:Adding comments or descriptions in UDFs is currently not supported in BigQuery. |
|
Note: BigQuery supports using ANY TYPE as argument type. The function will accept an input of any type for this argument. For more information, see templated parameter in BigQuery. |
BigQuery also supports the CREATE FUNCTION IF NOT EXISTS
statement
which treats the query as successful and takes no action if a function with the
same name already exists.
BigQuery's CREATE FUNCTION
statement also supports creating
TEMPORARY or TEMP functions
,
which do not have a Snowflake equivalent. See
calling UDFs
for details on executing a BigQuery persistent UDF.
DROP FUNCTION
syntax
The following table addresses differences in DROP FUNCTION syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
|
Note: BigQuery does not require using the function's signature (argument data type) for deleting the function. |
BigQuery requires that you specify the project_name if the function is not located in the current project.
Additional function commands
This section covers additional UDF commands supported by Snowflake that are not directly available in BigQuery.
ALTER FUNCTION
syntax
Snowflake supports the following operations using
ALTER FUNCTION
syntax.
- Renaming a UDF
- Converting to (or reverting from) a secure UDF
- Adding, overwriting, removing a comment for a UDF
As configuring function security and adding function comments is not available in BigQuery, ALTER FUNCTION syntax is currently not supported. However, the CREATE FUNCTION statement can be used to create a UDF with the same function definition but a different name.
DESCRIBE FUNCTION
syntax
Snowflake supports describing a UDF using DESC[RIBE] FUNCTION syntax. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
SHOW USER FUNCTIONS
syntax
In Snowflake, SHOW USER FUNCTIONS syntax can be used to list all UDFs for which users have access privileges. This is currently not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
Stored procedures
Snowflake stored procedures are written in JavaScript, which can execute SQL statements by calling a JavaScript API. In BigQuery, stored procedures are defined using a block of SQL statements.
CREATE PROCEDURE
syntax
In Snowflake, a stored procedure is executed with a CALL command while in BigQuery, stored procedures are executed like any other BigQuery function.
The following table addresses differences in stored procedure creation syntax between Snowflake and BigQuery.
Snowflake | BigQuery |
---|---|
Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option. |
CREATE [OR REPLACE] PROCEDURE
Note: BigQuery doesn't support a return type for stored procedures. Also, it requires specifying argument mode for each argument passed. |
|
|
|
CREATE [OR REPLACE] PROCEDURE
참고: null 입력의 프로시저 동작은 BigQuery에서 암시적으로 처리되며 별도의 옵션으로 지정할 필요가 없습니다. |
CREATE [OR REPLACE] PROCEDURE
|
참고: 프로시저 변동성은 BigQuery에서 구성 가능한 매개변수가 아닙니다. Snowflake의 IMMUTABLE 변동성에 해당합니다. |
CREATE [OR REPLACE] PROCEDURE
|
참고: 프로시저 정의에 주석 또는 설명을 추가하는 기능은 현재 BigQuery에서 지원되지 않습니다. |
CREATE [OR REPLACE] PROCEDURE
참고: Snowflake에서는 실행 프로시저의 호출자 또는 소유자를 지정할 수 있습니다. |
참고: BigQuery 저장 프로시저는 항상 호출자로 실행됩니다. |
BigQuery는 CREATE PROCEDURE IF NOT EXISTS
문도 지원합니다. 이 문은 쿼리를 성공한 것으로 취급하고, 동일한 이름의 함수가 이미 있는 경우 조치를 취하지 않습니다.
DROP PROCEDURE
구문
다음 표에서는 Snowflake와 BigQuery 간의 DROP FUNCTION 구문 차이점을 설명합니다.
Snowflake | BigQuery |
---|---|
|
참고: BigQuery는 프로시저를 삭제할 때 프로시저의 서명(인수 데이터 유형)을 사용할 필요가 없습니다. |
BigQuery에서는 함수가 현재 프로젝트에 없는 경우 project_name을 지정해야 합니다.
추가 프로시저 명령어
Snowflake는 저장 프로시저를 관리하는 데 ALTER PROCEDURE
, DESC[RIBE] PROCEDURE
, SHOW PROCEDURES
와 같은 추가 명령어를 제공합니다. 현재 BigQuery에서는 지원되지 않습니다.
메타데이터 및 트랜잭션 SQL 문
Snowflake | BigQuery |
---|---|
|
BigQuery는 항상 스냅샷 격리를 사용합니다. 자세한 내용은 이 문서의 다른 부분에서 일관성 보장을 참조하세요. |
|
BigQuery에는 사용되지 않습니다. |
|
BigQuery에는 사용되지 않습니다. |
|
BigQuery에는 사용되지 않습니다. |
다중 문 및 여러 줄로 구성된 SQL 문
Snowflake와 BigQuery는 모두 트랜잭션(세션)을 지원하므로 일관되게 함께 실행되는 세미콜론으로 구분된 문을 지원합니다. 자세한 내용은 멀티 문 트랜잭션을 참조하세요.
스테이징된 파일의 메타데이터 열
Snowflake는 내부 및 외부 단계에서 파일의 메타데이터를 자동으로 생성합니다. 이 메타데이터는 일반 데이터 열과 함께 테이블에 쿼리 및 로드할 수 있습니다. 다음과 같은 메타데이터 열을 사용할 수 있습니다.
일관성 보장 및 트랜잭션 격리
Snowflake 및 BigQuery 모두 원자적인 특성을 갖습니다. 즉, 여러 행에 걸쳐 변형당 수준에서 ACID와 호환됩니다.
트랜잭션
각 Snowflake 트랜잭션에는 트랜잭션 ID로 설정된 고유한 시작 시간(밀리초 포함)이 할당됩니다. Snowflake는 READ COMMITTED
격리 수준만 지원합니다. 하지만 문이 동일한 트랜잭션에 있는 경우 다른 문으로 적용된 변경사항이 아직 커밋되지 않은 경우에도 문에서 볼 수 있습니다. Snowflake 트랜잭션은 리소스 수정 시 리소스(테이블)에서 잠금을 획득합니다. 사용자는 문이 타임아웃될 때까지 차단된 문이 대기하는 최대 시간을 조정할 수 있습니다. AUTOCOMMIT
매개변수가 사용 설정되어 있으면 DML 문이 자동 커밋됩니다.
BigQuery는 트랜잭션도 지원합니다. BigQuery는 쿼리가 시작되기 전에 마지막으로 커밋된 데이터를 쿼리가 읽는 스냅샷 격리를 사용하여 최적의 동시 실행 제어(첫 번째 성공 커밋)를 실행할 수 있습니다. 이 접근 방법은 행 및 변형 기준으로 그리고 동일한 DML 문 내의 여러 행에서 동일한 수준의 일관성을 보장하고 교착 상태도 방지합니다. 동일한 테이블에 대해 여러 DML 업데이트가 있는 경우 BigQuery는 최악 동시 실행 제어로 전환됩니다. 로드 작업은 완전히 독립적으로 실행되고 테이블에 추가될 수 있습니다. 하지만 BigQuery는 아직 명시적인 트랜잭션 경계 또는 세션을 제공하지 않습니다.
롤백
트랜잭션이 커밋되거나 롤백되기 전에 Snowflake 트랜잭션의 세션이 예기치 않게 종료되면 트랜잭션이 분리된 상태로 유지됩니다. 사용자는 SYSTEM$ABORT_TRANSACTION을 실행하여 분리된 트랜잭션을 취소해야 합니다. 그렇지 않으면 Snowflake에서 4시간의 유휴 시간 후에 분리된 트랜잭션을 롤백합니다. 교착 상태가 발생하면 Snowflake는 교착 상태를 감지하고 롤백할 최근 문을 선택합니다. 명시적으로 열린 트랜잭션의 DML 문이 실패하면 변경사항이 롤백되지만 트랜잭션은 커밋되거나 롤백될 때까지 열린 상태로 유지됩니다. Snowflake의 DDL 문은 자동 커밋되므로 롤백할 수 없습니다.
BigQuery는 ROLLBACK TRANSACTION
문을 지원합니다.
BigQuery에는 ABORT
문이 없습니다.
데이터베이스 한도
항상 BigQuery 공개 문서에서 최신 할당량 및 한도를 확인하세요. 대규모 사용자를 위해 대량의 할당량은 Cloud 지원팀에 문의하여 늘릴 수 있습니다.
모든 Snowflake 계정에는 기본적으로 소프트 한도가 설정되어 있습니다. 소프트 한도는 계정을 만드는 동안 설정되며 다를 수 있습니다. Snowflake 계정팀 또는 지원 티켓을 통해 많은 Snowflake 소프트 한도를 늘릴 수 있습니다.
다음 표에서는 Snowflake와 BigQuery의 데이터베이스 한도를 비교합니다.
한도 | Snowflake | BigQuery |
---|---|---|
쿼리 텍스트 크기 | 1MB | 1MB |
최대 동시 실행 쿼리 수 | XS Warehouse - 8 S Warehouse - 16 M Warehouse - 32 L Warehouse - 64 XL Warehouse - 128 |
100 |