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는 특정 범위 내에서 정밀도 및 소수 자릿수를 선택적으로 지정하는 NUMERICBIGNUMERIC을 지원합니다.
INT/INTEGER BIGNUMERIC INT/INTEGER 및 다른 모든 INT와 비슷한 데이터 유형(예: BIGINT, TINYINT, SMALLINT, BYTEINT)은 정밀도 및 소수 자릿수를 지정할 수 없으며 항상 NUMBER(38, 0)NUMBER 데이터 유형의 별칭을 나타냅니다.
BIGINT BIGNUMERIC
SMALLINT BIGNUMERIC
TINYINT BIGNUMERIC
BYTEINT BIGNUMERIC
FLOAT/
FLOAT4/
FLOAT8
FLOAT64 Snowflake의 FLOAT 데이터 유형은 'NaN'을 > X로 설정합니다. 여기서 X는 FLOAT 값('NaN' 자체가 아닌 경우)입니다.

BigQuery의 FLOAT 데이터 유형은 'NaN'을 < X로 설정합니다. 여기서 X는 FLOAT 값('NaN' 자체가 아닌 경우)입니다.
DOUBLE/
DOUBLE PRECISION/

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

SELECT TOP ...

FROM table

SELECT expression

FROM table

ORDER BY expression DESC

LIMIT number

SELECT

x/total AS probability,

ROUND(100 * probability, 1) AS pct

FROM raw_data


참고: Snowflake는 동일한 SELECT 문에서 별칭 생성 및 참조를 지원합니다.

SELECT

x/total AS probability,

ROUND(100 * (x/total), 1) AS pct

FROM raw_data

SELECT * FROM (

VALUES (1), (2), (3)

)

SELECT AS VALUE STRUCT(1, 2, 3)

Snowflake 별칭 및 식별자는 기본적으로 대소문자를 구분하지 않습니다. 대소문자를 유지하려면 별칭과 식별자를 큰따옴표(")로 묶습니다.

BigQuery는 SELECT 문에서 다음 표현식도 지원합니다. Snowflake에는 해당 항목이 없습니다.

FROM

쿼리의 FROM은 SELECT 문에서 사용할 수 있는 테이블, 뷰, 서브 쿼리 또는 테이블 함수를 지정합니다. 이러한 테이블 참조는 모두 BigQuery에서 지원됩니다.

아래 표에는 기타 다른 차이점 목록이 포함되어 있습니다.

Snowflake BigQuery

SELECT $1, $2 FROM (VALUES (1, 'one'), (2, 'two'));

WITH table1 AS
(
SELECT STRUCT(1 as number, 'one' as spelling)
UNION ALL
SELECT STRUCT(2 as number, 'two' as spelling)
)
SELECT *
FROM table1

SELECT* FROM table SAMPLE(10)

SELECT* FROM table

TABLESAMPLE

BERNOULLI (0.1 PERCENT)

SELECT * FROM table1 AT(TIMESTAMP => timestamp) SELECT * FROM table1 BEFORE(STATEMENT => statementID)

SELECT * FROM table

FOR SYSTEM_TIME AS OF timestamp


참고: BigQuery에는 Snowflake의 문 ID를 사용하는 BEFORE를 대신할 항목이 없습니다. 타임스탬프 값은 현재 타임스탬프로부터 7일 이하여야 합니다.

@[namespace]<stage_name>[/path]

BigQuery는 스테이징된 파일의 개념을 지원하지 않습니다.

SELECT*

FROM table

START WITH predicate

CONNECT BY

[PRIOR] col1 = [PRIOR] col2

[, ...]

...

BigQuery는 Snowflake의 CONNECT BY를 직접 대신할 항목을 제공하지 않습니다.

다음을 사용하여 FROM 절에서 BigQuery 테이블을 참조할 수 있습니다.

  • [project_id].[dataset_id].[table_name]
  • [dataset_id].[table_name]
  • [table_name]

BigQuery는 추가 테이블 참조도 지원합니다.

WHERE

Snowflake WHERE 절과 BigQuery WHERE 절은 다음을 제외하고 동일합니다.

Snowflake BigQuery

SELECT col1, col2 FROM table1, table2 WHERE col1 = col2(+)

SELECT col1, col2
FROM table1 INNER JOIN table2
ON col1 = col2

참고: BigQuery는 JOIN(+) 구문을 지원하지 않습니다.

JOIN 유형

Snowflake 및 BigQuery 모두 다음 유형의 조인을 지원합니다.

Snowflake와 BigQuery 모두 ONUSING 절을 지원합니다.

아래 표에는 기타 다른 차이점 목록이 포함되어 있습니다.

Snowflake BigQuery

SELECT col1

FROM table1

NATURAL JOIN

table2

SELECT col1

FROM table1

INNER JOIN

table2

USING (col1, col2 [, ...])


참고: BigQuery에서 JOIN 절은 교차 조인이 아니거나 조인된 테이블 중 하나가 데이터 유형 또는 배열 내의 필드인 경우를 제외하고 조인 조건이 필요합니다.

SELECT ... FROM table1 AS t1, LATERAL ( SELECT*

FROM table2 AS t2

WHERE t1.col = t2.col )


참고: 비측면 조인의 출력과 달리 측면 조인의 출력에는 인라인 뷰에서 생성된 행만 포함됩니다. 왼쪽 행은 인라인 뷰로 전달되어 이미 고려되었으므로 왼쪽 행은 오른쪽에 조인할 필요가 없습니다.

SELECT ... FROM table1 as t1 LEFT JOIN table2 as t2

ON t1.col = t2.col

참고: BigQuery는 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 BYGROUP BY ROLLUP을 지원합니다.

Snowflake HAVING와 BigQuery HAVING은 동의어입니다. HAVINGGROUP BY 및 집계 이후 그리고 ORDER BY 이전에 발생합니다.

Snowflake BigQuery

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY ROLLUP (one, 2)

SELECT col1 as one, col2 as two

FROM table GROUP BY GROUPING SETS (one, 2)


참고: Snowflake는 동일한 쿼리 블록에서 최대 128개의 그룹화 집합을 허용합니다.
BigQuery는 Snowflake의 GROUP BY GROUPING SETS를 직접 대신할 항목을 지원하지 않습니다.

SELECT col1 as one, col2 as two

FROM table GROUP BY CUBE (one,2)


참고: Snowflake는 각 큐브에서 최대 7개의 요소(그룹화 세트 128개)를 허용합니다.
BigQuery는 Snowflake의 GROUP BY CUBE를 직접 대신할 항목을 지원하지 않습니다.

ORDER BY

Snowflake ORDER BYBigQuery 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

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


SELECT ...

FROM ...

ORDER BY ...

OFFSET start {[ROW | ROWS]} FETCH {[FIRST | NEXT]} count

{[ROW | ROWS]} [ONLY]


참고: NULL, 빈 문자열('') 및 $$$$ 값이 허용되며 '무제한'으로 처리됩니다. 기본 용도는 커넥터 및 드라이버입니다.

SELECT col1, col2

FROM table

ORDER BY col1

LIMIT count OFFSET start


참고: BigQuery는 FETCH를 지원하지 않습니다. LIMITFETCH를 대체합니다.

참고: BigQuery에서 OFFSETLIMIT count와 함께 사용해야 합니다. 최고의 성능을 위해 count INT64 값은 필요한 최소 정렬 행으로 설정해야 합니다. 모든 결과 행을 불필요하게 정렬하면 쿼리 실행 성능이 저하됩니다.

QUALIFY

Snowflake에서 QUALIFY 절을 사용하면 HAVING이 집계 함수와 GROUP BY 절로 수행하는 기능과 유사한 윈도우 함수의 결과를 필터링할 수 있습니다.

Snowflake BigQuery

SELECT col1, col2 FROM table QUALIFY ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) = 1;

ROW_NUMBER(), COUNT()와 같은 분석 함수나 OVER PARTITION BY를 사용하는 Snowflake QUALIFY 절은 BigQuery에서 분석 값을 포함하는 서브 쿼리에 WHERE 절로 표현됩니다.

ROW_NUMBER() 사용:

SELECT col1, col2

FROM ( SELECT col1, col2

ROW NUMBER() OVER (PARTITION BY col1 ORDER by col2) RN FROM table ) WHERE RN = 1;


더 큰 파티션을 지원하는 ARRAY_AGG() 사용:

SELECT result.* FROM ( SELECT ARRAY_AGG(table ORDER BY table.col2 DESC LIMIT 1) [OFFSET(0)] FROM table

GROUP BY col1 ) AS result;

함수

다음 섹션에는 Snowflake 함수와 그에 해당하는 BigQuery 함수가 나와 있습니다.

집계 함수

다음 표는 일반적인 Snowflake 집계, 집계 분석, 근사치 집계 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

Snowflake BigQuery

ANY_VALUE([DISTINCT] expression) [OVER ...]


참고: DISTINCT는 아무런 영향도 미치지 않습니다.

ANY_VALUE(expression) [OVER ...]

APPROX_COUNT_DISTINCT([DISTINCT] expression) [OVER ...]


참고: DISTINCT는 아무런 영향도 미치지 않습니다.

APPROX_COUNT_DISTINCT(expression)


참고: BigQuery는 윈도우 함수에서 APPROX_COUNT_DISTINCT를 지원하지 않습니다.

APPROX_PERCENTILE(expression, percentile) [OVER ...]


참고: Snowflake에는 RESPECT NULLS 옵션이 없습니다.

APPROX_QUANTILES([DISTINCT] expression,100) [OFFSET((CAST(TRUNC(percentile * 100) as INT64))]


참고: BigQuery는 윈도우 함수에서 APPROX_QUANTILES를 지원하지 않습니다.

APPROX_PERCENTILE_ACCUMULATE (expression)

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROX_PERCENTILE_COMBINE(state)

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROX_PERCENTILE_ESTIMATE(state, percentile)

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROX_TOP_K(expression, [number [counters]]


참고: 숫자 매개변수를 지정하지 않을 경우 기본값은 1입니다. 카운터가 숫자보다 훨씬 커야 합니다.

APPROX_TOP_COUNT(expression, number)


참고: BigQuery는 윈도우 함수에서 APPROX_TOP_COUNT를 지원하지 않습니다.

APPROX_TOP_K_ACCUMULATE(expression, counters)

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROX_TOP_K_COMBINE(state, [counters])

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROX_TOP_K_ESTIMATE(state, [k])

BigQuery는 근사치 값을 예측할 때 중간 상태를 저장하는 기능을 지원하지 않습니다.

APPROXIMATE_JACCARD_INDEX([DISTINCT] expression)


커스텀 UDF를 사용하여 k개의 고유한 해시 함수로 MINHASH를 구현할 수 있습니다. MINHASH의 편차를 줄이는 또 다른 방법은
해시 함수의 최솟값을 k로 유지하는 것입니다. 이 경우 Jaccard 색인은 다음과 같은 근사치를 구할 수 있습니다.

WITH

minhash_A AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TA AS t

ORDER BY h

LIMIT k),

minhash_B AS (

SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS h

FROM TB AS t

ORDER BY h

LIMIT k)

SELECT

COUNT(*) / k AS APPROXIMATE_JACCARD_INDEX

FROM minhash_A

INNER JOIN minhash_B

ON minhash_A.h = minhash_B.h

APPROXIMATE_SIMILARITY([DISTINCT] expression)


APPROXIMATE_JACCARD_INDEX의 동의어이며 동일한 방식으로 구현할 수 있습니다.

ARRAY_AGG([DISTINCT] expression1) [WITHIN GROUP (ORDER BY ...)]

[OVER ([PARTITION BY expression2])]

Note: Snowflake does not support ability to IGNORE|RESPECT NULLS and to LIMIT directly in ARRAY_AGG.

ARRAY_AGG([DISTINCT] expression1

[{IGNORE|RESPECT}] NULLS] [ORDER BY ...] LIMIT ...])

[OVER (...)]

AVG([DISTINCT] expression) [OVER ...]

AVG([DISTINCT] expression) [OVER ...]


참고: BigQuery의 AVGSTRING에서 자동 변환을 수행하지 않습니다.

BITAND_AGG(expression)

[OVER ...]

BIT_AND(expression) [OVER ...]

참고: BigQuery는 암시적으로 문자/텍스트 열을 가장 가까운 INTEGER로 변환하지 않습니다.

BITOR_AGG(expression)

[OVER ...]

BIT_OR(expression)

[OVER ...]


참고: BigQuery는 암시적으로 문자/텍스트 열을 가장 가까운 INTEGER로 변환하지 않습니다.

BITXOR_AGG([DISTINCT] expression) [OVER ...]

BIT_XOR([DISTINCT] expression) [OVER ...]


참고: BigQuery는 암시적으로 문자/텍스트 열을 가장 가까운 INTEGER로 변환하지 않습니다.

BOOLAND_AGG(expression) [OVER ...]


참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).

LOGICAL_AND(expression)

[OVER ...]

BOOLOR_AGG(expression)

[OVER ...]


참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).

LOGICAL_OR(expression)

[OVER ...]

BOOLXOR_AGG(expression)

[OVER ([PARTITION BY <partition_expr> ])


참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).
숫자 표현식:

SELECT

CASE COUNT(*)

WHEN 1 THEN TRUE

WHEN 0 THEN NULL

ELSE FALSE

END AS BOOLXOR_AGG

FROM T

WHERE expression != 0


OVER를 사용하려면 다음 명령어를 실행합니다(제공된 불리언 예시).

SELECT

CASE COUNT(expression) OVER (PARTITION BY partition_expr)

WHEN 0 THEN NULL

ELSE

CASE COUNT(

CASE expression

WHEN TRUE THEN 1

END) OVER (PARTITION BY partition_expr)

WHEN 1 THEN TRUE

ELSE FALSE

END

END AS BOOLXOR_AGG

FROM T

CORR(dependent, independent)

[OVER ...]

CORR(dependent, independent)

[OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COUNT([DISTINCT] expression [,expression2]) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_POP(dependent, independent) [OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

COVAR_SAMP(dependent, independent)

[OVER ...]

GROUPING(expression1, [,expression2...])

BigQuery는 Snowflake의 GROUPING를 직접 대신할 항목을 지원하지 않습니다. 사용자 정의 함수를 통해 사용할 수 있습니다.

GROUPING_ID(expression1, [,expression2...])

BigQuery는 Snowflake의 GROUPING_ID를 직접 대신할 항목을 지원하지 않습니다. 사용자 정의 함수를 통해 사용할 수 있습니다.

HASH_AGG([DISTINCT] expression1, [,expression2])

[OVER ...]

SELECT
BIT_XOR(
FARM_FINGERPRINT(
TO_JSON_STRING(t))) [OVER]
FROM t

SELECT HLL([DISTINCT] expression1, [,expression2])

[OVER ...]


참고: Snowflake에서는 정밀도를 지정할 수 없습니다.

SELECT HLL_COUNT.EXTRACT(sketch) FROM (

SELECT HLL_COUNT.INIT(expression)

AS sketch FROM table )


참고: BigQuery는 윈도우 함수에서 HLL_COUNT… 를 지원하지 않습니다. 사용자는 단일 HLL_COUNT... 함수에 여러 표현식을 포함할 수 없습니다.

HLL_ACCUMULATE([DISTINCT] expression)


참고: Snowflake에서는 정밀도를 지정할 수 없습니다.
HLL_COUNT.INIT(expression [, precision])

HLL_COMBINE([DISTINCT] state)

HLL_COUNT.MERGE_PARTIAL(sketch)

HLL_ESTIMATE(state)

HLL_COUNT.EXTRACT(sketch)

HLL_EXPORT(binary)

BigQuery는 Snowflake의 HLL_EXPORT를 직접 대신할 항목을 지원하지 않습니다.

HLL_IMPORT(object)

BigQuery는 Snowflake의 HLL_IMPORT를 직접 대신할 항목을 지원하지 않습니다.

KURTOSIS(expression)

[OVER ...]

BigQuery는 Snowflake의 KURTOSIS를 직접 대신할 항목을 지원하지 않습니다.

LISTAGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

STRING_AGG(

[DISTINCT] aggregate_expression

[, delimiter]

)

[OVER ...]

MEDIAN(expression) [OVER ...]


참고: Snowflake는 ARRAY_AGG.에서 직접 IGNORE|RESPECT NULLS LIMIT 에 대한 기능을 지원하지 않습니다.

PERCENTILE_CONT(

value_expression,

0.5

[ {RESPECT | IGNORE} NULLS]

) OVER()

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MAX(expression) [OVER ...]


MIN(expression) [OVER ...]

MINHASH(k, [DISTINCT] expressions)

커스텀 UDF를 사용하여 k개의 고유한 해시 함수로 MINHASH를 구현할 수 있습니다. MINHASH의 편차를 줄이는 또 다른 방법은 해시 함수의 최솟값을 k로 유지하는 것입니다. SELECT DISTINCT
FARM_FINGERPRINT(
TO_JSON_STRING(t)) AS MINHASH

FROM t

ORDER BY MINHASH

LIMIT k

MINHASH_COMBINE([DISTINCT] state)

MODE(expr1)

OVER ( [ PARTITION BY <expr2> ] )

SELECT expr1

FROM (

SELECT

expr1,

ROW_NUMBER() OVER (

PARTITION BY expr2

ORDER BY cnt DESC) rn

FROM (

SELECT

expr1,

expr2,

COUNTIF(expr1 IS NOT NULL) OVER

(PARTITION BY expr2, expr1) cnt

FROM t))

WHERE rn = 1

OBJECT_AGG(key, value) [OVER ...]

TO_JSON_STRING을 사용하여 값을 JSON 형식의 문자열로 변환하는 것이 좋습니다.

PERCENTILE_CONT(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_CONT(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

PERCENTILE_DISC(percentile) WITHIN GROUP (ORDER BY value_expression)

[OVER ...]

PERCENTILE_DISC(

value_expression,

percentile

[ {RESPECT | IGNORE} NULLS]

) OVER()

REGR_AVGX(dependent, independent)

[OVER ...]

SELECT AVG(independent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_AVGY(dependent, independent)

[OVER ...]

SELECT AVG(dependent) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_COUNT(dependent, independent)

[OVER ...]

SELECT COUNT(*) [OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

REGR_INTERCEPT(dependent, independent)

[OVER ...]

SELECT

AVG(dependent) -

COVAR_POP(dependent,independent)/

VAR_POP(dependent) *

AVG(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_R2(dependent, independent)

[OVER ...]

SELECT

CASE

WHEN VAR_POP(independent) = 0

THEN NULL

WHEN VAR_POP(dependent) = 0 AND VAR_POP(independent) != 0

THEN 1

ELSE POWER(CORR(dependent, independent), 2)

END AS ...

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SLOPE(dependent, independent)

[OVER ...]

SELECT

COVAR_POP(dependent,independent)/

VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SXX(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(independent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

REGR_SYY(dependent, independent)

[OVER ...]

SELECT COUNT(*)*VAR_POP(dependent)

[OVER ...]

FROM table

WHERE (

(dependent IS NOT NULL) AND

(independent IS NOT NULL)

)

[GROUP BY ...]

SKEW(expression)

BigQuery는 Snowflake의 SKEW를 대신한 항목을 지원하지 않습니다.

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_POP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

STDDEV_SAMP([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

SUM([DISTINCT] expression)

[OVER ...]

VAR_POP([DISTINCT] expression)

[OVER ...]


참고: Snowflake는 VARCHAR을 부동 소수점 값으로 변환하는 기능을 지원합니다.

VAR_POP([DISTINCT] expression)

[OVER ...]

VARIANCE_POP([DISTINCT] expression)

[OVER ...]


참고: Snowflake는 VARCHAR을 부동 소수점 값으로 변환하는 기능을 지원합니다.

VAR_POP([DISTINCT] expression)

[OVER ...]

VAR_SAMP([DISTINCT] expression)

[OVER ...]


참고: Snowflake는 VARCHAR을 부동 소수점 값으로 변환하는 기능을 지원합니다.

VAR_SAMP([DISTINCT] expression)

[OVER ...]

VARIANCE([DISTINCT] expression)

[OVER ...]


참고: Snowflake는 VARCHAR을 부동 소수점 값으로 변환하는 기능을 지원합니다.

VARIANCE([DISTINCT] expression)

[OVER ...]

BigQuery는 다음과 같은 집계, 집계 분석, 근사치 집계 함수도 제공하며 이 함수는 Snowflake에 직접 아날로그가 없습니다.

비트 표현식 함수

다음 표는 일반적인 Snowflake 비트 표현식 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

표현식의 데이터 유형이 INTEGER가 아니면 Snowflake가 INTEGER로 변환하려고 시도합니다. 하지만 BigQuery는 INTEGER로 변환을 시도하지 않습니다.

Snowflake BigQuery

BITAND(expression1, expression2)

BIT_ADD(x) FROM UNNEST([expression1, expression2]) AS x expression1 & expression2

BITNOT(expression)

~ expression

BITOR(expression1, expression2)

BIT_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 | expression2

BITSHIFTLEFT (expression, n)

expression << n

BITSHIFTRIGHT

(expression, n)

expression >> n

BITXOR(expression, expression)


참고: Snowflake는 DISTINCT.를 지원하지 않습니다.

BIT_XOR([DISTINCT] x) FROM UNNEST([expression1, expression2]) AS x


expression ^ expression

조건부 표현식 함수

다음 표는 일반적인 Snowflake 조건식과 그에 해당하는 BigQuery 조건식 간의 매핑을 보여줍니다.

Snowflake BigQuery

expression [ NOT ] BETWEEN lower AND upper

(expression >= lower AND expression <= upper)

BOOLAND(expression1, expression2)


참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).

LOGICAL_AND(x)

FROM UNNEST([expression1, expression2]) AS x


expression1 AND expression2

BOOLNOT(expression1)


참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).

NOT expression

BOOLOR

참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).

LOGICAL_OR(x) FROM UNNEST([expression1, expression2]) AS x


expression1 OR expression2

BOOLXOR

참고: Snowflake를 사용하면 숫자, 십진수, 부동 소수점 값을 TRUE로 처리할 수 있습니다(0이 아닌 경우).
BigQuery는 Snowflake의 BOOLXOR.을 직접 대신할 항목을 지원하지 않습니다.

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

COALESCE(expr1, expr2, [,...])


참고: Snowflake에는 표현식이 두 개 이상 필요합니다. BigQuery에서는 하나만 필요합니다.

COALESCE(expr1, [,...])

DECODE(expression, search1, result1, [search2, result2...] [,default])

CASE [expression] WHEN condition1 THEN result1 [WHEN condition2 THEN result2]

[...]

[ELSE result3]

END

참고: BigQuery는 조건문에서 서브 쿼리를 지원합니다. 이를 사용하여 Snowflake의 DECODE를 재현할 수 있습니다. NULL 선택 표현식과 NULL 검색 표현식을 일치시키려면 사용자가 = NULL 대신 IS NULL을 사용해야 합니다.

EQUAL_NULL(expression1, expression2)

BigQuery는 Snowflake의 EQUAL_NULL.을 직접 대신할 항목을 지원하지 않습니다.

GREATEST(expression1, [,expression2]...)

GREATEST(expression1, [,expression2]...)

IFF(condition, true_result, false_result)

IF(condition, true_result, false_result)

IFNULL(expression1, expression2)

IFNULL(expression1, expression2)

[ NOT ] IN ...

[ NOT ] IN ...

expression1 IS [ NOT ] DISTINCT FROM expression2

BigQuery는 Snowflake의 IS [ NOT ] DISTINCT FROM.을 직접 대신할 항목을 지원하지 않습니다.

expression IS [ NOT ] NULL

expression IS [ NOT ] NULL

IS_NULL_VALUE(variant_expr)

BigQuery는 VARIANT 데이터 유형을 지원하지 않습니다.

LEAST(expression,...)

LEAST(expression,...)

NULLIF(expression1,expression2)

NULLIF(expression1,expression2)

NVL(expression1, expression2)

IFNULL(expression1,expression2)

NVL2(expr1,expr2,expr2)

IF(expr1 IS NOT NULL, expr2,expr3)

REGR_VALX(expr1,expr2)

IF(expr1 IS NULL, NULL, expr2)

참고: BigQuery는 Snowflake의 REGR... 함수를 직접 대신할 항목을 지원하지 않습니다.

REGR_VALY(expr1,expr2)

IF(expr2 IS NULL, NULL, expr1)


참고: BigQuery는 Snowflake의 REGR... 함수를 직접 대신할 항목을 지원하지 않습니다.

ZEROIFNULL(expression)

IFNULL(expression,0)

컨텍스트 함수

다음 표는 일반적인 Snowflake 컨텍스트 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

Snowflake BigQuery

CURRENT_ACCOUNT()

SESSION_USER()


참고: 직접적으로 비교되는 항목이 아닙니다. Snowflake는 계정 ID를 반환하고 BigQuery는 사용자 이메일 주소를 반환합니다.

CURRENT_CLIENT()

BigQuery에서 사용되지 않는 개념

CURRENT_DATABASE()

SELECT catalog_name

FROM INFORMATION_SCHEMA.SCHEMATA

그러면 프로젝트 이름 테이블이 반환됩니다. 직접 비교가 아닙니다.

CURRENT_DATE[()]


참고: Snowflake는 ANSI 표준을 준수하기 위해 CURRENT_DATE 명령어 다음에 '()'를 적용하지 않습니다.

CURRENT_DATE([timezone])


참고: BigQuery의 CURRENT_DATE는 선택적 시간대 사양을 지원합니다.

CURRENT_REGION()

SELECT location

FROM INFORMATION_SCHEMA.SCHEMATA


참고: BigQuery의 INFORMATION_SCHEMA.SCHEMATA는 Snowflake의 CURRENT_REGION()보다 더 일반화된 위치 참조를 반환합니다. 직접 비교가 아닙니다.

CURRENT_ROLE()

BigQuery에서 사용되지 않는 개념

CURRENT_SCHEMA()

SELECT schema_name

FROM INFORMATION_SCHEMA.SCHEMATA

이는 프로젝트 또는 리전에서 사용할 수 있는 모든 데이터 세트(스키마라고도 함)의 테이블을 반환합니다. 직접 비교가 아닙니다.

CURRENT_SCHEMAS()

BigQuery에서 사용되지 않는 개념

CURRENT_SESSION()

BigQuery에서 사용되지 않는 개념

CURRENT_STATEMENT()

SELECT query

FROM INFORMATION_SCHEMA.JOBS_BY_*


참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_*를 사용하면 작업 유형, 시작/종료 유형 등으로 쿼리를 검색할 수 있습니다.

CURRENT_TIME[([frac_sec_prec])]


참고: Snowflake는 선택적 소수부 초 단위 정밀도를 허용합니다. 유효한 값의 범위는 0~9나노초입니다. 기본값은 9입니다. ANSI를 준수하기 위해 '()' 없이 호출할 수 있습니다.

CURRENT_TIME()

CURRENT_TIMESTAMP[([frac_sec_prec])]


참고: Snowflake는 선택적 소수부 초 단위 정밀도를 허용합니다. 유효한 값의 범위는 0~9나노초입니다. 기본값은 9입니다. ANSI를 준수하기 위해 '()' 없이 호출할 수 있습니다. TIMEZONE을 세션 매개변수로 설정합니다.

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


참고: CURRENT_DATETIMEDATETIME 데이터 유형(Snowflake에서 지원되지 않음)을 반환합니다. CURRENT_TIMESTAMPTIMESTAMP 데이터 유형을 반환합니다.

CURRENT_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*

참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_*를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다.

CURRENT_USER[()]


참고: Snowflake는 ANSI 표준을 준수하기 위해 CURRENT_USER 명령어 다음에 '()'를 적용하지 않습니다.

SESSION_USER()


SELECT user_email

FROM INFORMATION_SCHEMA.JOBS_BY_*

참고: 직접적으로 비교되는 항목이 아닙니다. Snowflake에서 사용자 이름을 반환하고 BigQuery는 사용자 이메일 주소를 반환합니다.

CURRENT_VERSION()

BigQuery에서 사용되지 않는 개념

CURRENT_WAREHOUSE()

SELECT catalg_name

FROM INFORMATION_SCHEMA.SCHEMATA

LAST_QUERY_ID([num])

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_*를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다.

LAST_TRANSACTION()

SELECT job_id

FROM INFORMATION_SCHEMA.JOBS_BY_*


참고: BigQuery의 INFORMATION_SCHEMA.JOBS_BY_*를 사용하면 작업 유형, 시작/종료 유형 등으로 작업 ID를 검색할 수 있습니다.

LOCALTIME()


참고: Snowflake는 ANSI 표준을 준수하기 위해 LOCALTIME 명령어 다음에 '()'를 적용하지 않습니다.

CURRENT_TIME()

LOCALTIMESTAMP()

CURRENT_DATETIME([timezone]) CURRENT_TIMESTAMP()


참고: CURRENT_DATETIMEDATETIME 데이터 유형(Snowflake에서 지원되지 않음)을 반환합니다. CURRENT_TIMESTAMPTIMESTAMP 데이터 유형을 반환합니다.

변환 함수

다음 표는 일반적인 Snowflake 변환 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

Snowflake와 BigQuery에서 동일하게 보이는 함수가 서로 다른 데이터 유형을 반환할 수 있습니다.

Snowflake BigQuery

CAST(expression AS type)


expression :: type

CAST(expression AS type)

TO_ARRAY(expression)

[expression]


ARRAY(subquery)

TO_BINARY(expression[, format])


참고: Snowflake는 HEX, BASE64, UTF-8 변환을 지원합니다. 또한 Snowflake는 VARIANT 데이터 유형을 사용하여 TO_BINARY를 지원합니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

TO_HEX(CAST(expression AS BYTES)) TO_BASE64(CAST(expression AS BYTES))

CAST(expression AS BYTES)


참고: BigQuery의 기본 STRING 변환은 UTF-8 인코딩을 사용합니다. Snowflake에는 BASE32 인코딩을 지원하는 옵션이 없습니다.

TO_BOOLEAN(expression)


참고:
  • INT64
    TRUE:
    외의 경우에는 FALSE: 0입니다.
  • STRING
    TRUE: "true"/"t"/"yes"/"y"/"on"/"1", FALSE: "false"/"f"/"no"/"n"/"off"/"0"

CAST(expression AS BOOL)


참고:
  • INT64
    TRUE:
    외의 경우에는 FALSE: 0입니다.
  • STRING
    TRUE: "true", FALSE: "false"

TO_CHAR(expression[, format])


TO_VARCHAR(expression[, format])


참고: Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

CAST(expression AS STRING)


참고: BigQuery의 입력 표현식은 FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME 또는 FORMAT_TIMESTAMP를 사용하여 형식을 지정할 수 있습니다.

TO_DATE(expression[, format])


DATE(expression[, format])


참고: Snowflake는 INTEGER 유형을 DATE 유형으로 직접 변환하는 기능을 지원합니다. Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

CAST(expression AS DATE)


참고: BigQuery의 입력 표현식은 FORMAT, FORMAT_DATETIME 또는 FORMAT_TIMESTAMP를 사용하여 형식을 지정할 수 있습니다.

TO_DECIMAL(expression[, format]

[,precision[, scale]]


TO_NUMBER(expression[, format]

[,precision[, scale]]


TO_NUMERIC(expression[, format]

[,precision[, scale]]


참고: DECIMAL, NUMBER, NUMERIC 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

ROUND(CAST(expression AS NUMERIC)

, x)


참고: BigQuery의 입력표현식은 FORMAT.을 사용하여 형식을 지정할 수 있습니다.

TO_DOUBLE(expression[, format])


참고: DOUBLE 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

CAST(expression AS FLOAT64)


참고: BigQuery의 입력표현식은 FORMAT.을 사용하여 형식을 지정할 수 있습니다.

TO_JSON(variant_expression)

BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다.

TO_OBJECT(variant_expression)

BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다.

TO_TIME(expression[, format])


TIME(expression[, format])


참고: STRING 데이터 유형에 대한 Snowflake의 형식 모델은 여기에서 확인할 수 있습니다. BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

CAST(expression AS TIME)


참고: BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다. BigQuery의 입력 표현식은 FORMAT, FORMAT_DATETIME, FORMAT_TIMESTAMP 또는 FORMAT_TIME을 사용하여 형식을 지정할 수 있습니다.

TO_TIMESTAMP(expression[, scale])


TO_TIMESTAMP_LTZ(expression[, scale])


TO_TIMESTAMP_NTZ(expression[, scale])


TO_TIMESTAMP_TZ(expression[, scale])


참고: BigQuery에는 VARIANT 데이터 유형의 대안이 없습니다.

CAST(expression AS TIMESTAMP)


참고: BigQuery의 입력 표현식은 FORMAT, FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME를 사용하여 형식을 지정할 수 있습니다. FORMAT_TIMESTAMP 매개변수를 통해 시간대를 포함하거나 포함하지 않을 수 있습니다.

TO_VARIANT(expression)

BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다.

TO_XML(variant_expression)

BigQuery에는 Snowflake의 VARIANT 데이터 유형의 대안이 없습니다.

TRY_CAST(expression AS type)

SAFE_CAST(expression AS type)

TRY_TO_BINARY(expression[, format])

TO_HEX(SAFE_CAST(expression AS BYTES)) TO_BASE64(SAFE_CAST(expression AS BYTES))

SAFE_CAST(expression AS BYTES)

TRY_TO_BOOLEAN(expression)

SAFE_CAST(expression AS BOOL)

TRY_TO_DATE(expression)

SAFE_CAST(expression AS DATE)

TRY_TO_DECIMAL(expression[, format]

[,precision[, scale]]


TRY_TO_NUMBER(expression[, format]

[,precision[, scale]]


TRY_TO_NUMERIC(expression[, format]

[,precision[, scale]]

ROUND(

SAFE_CAST(expression AS NUMERIC)

, x)

TRY_TO_DOUBLE(expression)

SAFE_CAST(expression AS FLOAT64)

TRY_TO_TIME(expression)

SAFE_CAST(expression AS TIME)

TRY_TO_TIMESTAMP(expression)


TRY_TO_TIMESTAMP_LTZ(expression)


TRY_TO_TIMESTAMP_NTZ(expression)


TRY_TO_TIMESTAMP_TZ(expression)

SAFE_CAST(expression AS TIMESTAMP)

BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 변환 함수도 제공합니다.

데이터 생성 함수

다음 표에서는 일반적인 Snowflake 데이터 생성 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

Snowflake BigQuery

NORMAL(mean, stddev, gen)

BigQuery는 Snowflake의 NORMAL.와 직접적으로 비교되는 항목을 지원하지 않습니다.

RANDOM([seed])

IF(RAND()>0.5, CAST(RAND()*POW(10, 18) AS INT64),

(-1)*CAST(RAND()*POW(10, 18) AS

INT64))


참고: BigQuery는 시드를 지원하지 않습니다.

RANDSTR(length, gen)

BigQuery는 Snowflake의 RANDSTR.과 직접적으로 비교되는 항목을 지원하지 않습니다.
SEQ1 / SEQ2 / SEQ4 / SEQ8 BigQuery는 Snowflake의 SEQ_.와 직접적으로 비교되는 항목을 지원하지 않습니다.

UNIFORM(min, max, gen)

CAST(min + RAND()*(max-min) AS INT64)


참고:영구 UDF를 사용하여 Snowflake의 UNIFORM에 상응하는 항목을 만듭니다. 여기에서 예시 참조
UUID_STRING([uuid, name])

참고: Snowflake는 128개의 임의 비트를 반환합니다. Snowflake는 버전 4(랜덤) 및 버전 5(이름이 지정된) UUID를 모두 지원합니다.

GENERATE_UUID()


참고: BigQuery는 122개의 임의 비트를 반환합니다. BigQuery는 버전 4 UUID만 지원합니다.

ZIPF(s, N, gen)

BigQuery는 Snowflake의 ZIPF.와 직접적으로 비교되는 항목을 지원하지 않습니다.

날짜 및 시간 함수

다음 표는 일반적인 Snowflake 날짜 및 시간 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다. BigQuery 날짜 및 시간 함수에는 날짜 함수, 날짜/시간 함수, 시간 함수, 타임스탬프 함수가 포함됩니다.

Snowflake BigQuery

ADD_MONTHS(date, months)

CAST(

DATE_ADD(

date,

INTERVAL integer MONTH

) AS TIMESTAMP

)

CONVERT_TIMEZONE(source_tz, target_tz, source_timestamp)


CONVERT_TIMEZONE(target_tz, source_timestamp)

PARSE_TIMESTAMP(

"%c%z",

FORMAT_TIMESTAMP(

"%c%z",

timestamp,

target_timezone

)

)


참고: BigQuery에서는 source_timezone이 항상 UTC입니다.

DATE_FROM_PARTS(year, month, day)


참고: Snowflake에서는 오버플로 및 음수 날짜를 지원합니다. 예를 들어 DATE_FROM_PARTS(2000, 1 + 24, 1) 는 2002년 1월 1일을 반환합니다. BigQuery에서는 지원되지 않습니다.

DATE(year, month, day)


DATE(timestamp_expression[, timezone])


DATE(datetime_expression)

DATE_PART(part, dateOrTime)


참고: Snowflake는 요일 ISO, 나노초, 에포크 초/밀리초/마이크로초/나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기에서 확인하세요.

EXTRACT(part FROM dateOrTime)


참고: BigQuery는 주(<weekday>), 마이크로초, 밀리초 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. BigQuery 부분 유형의 전체 목록은 여기여기에서 확인할 수 있습니다.

DATE_TRUNC(part, dateOrTime)


참고: Snowflake는 나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기에서 확인하세요.

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


참고: BigQuery는 주(<weekday>), ISO 주, ISO 연도 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다.

DATEADD(part, value, dateOrTime)

DATE_ADD(date, INTERVAL value part)

DATEDIFF(

part,

expression1,

expression2

)


참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다.

DAYNAME(dateOrTimestamp)

FORMAT_DATE('%a', date)


FORMAT_DATETIME('%a', datetime)


FORMAT_TIMESTAMP('%a', timestamp)

EXTRACT(part FROM dateOrTime)


참고: Snowflake는 요일 ISO, 나노초, 에포크 초/밀리초/마이크로초/나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기에서 확인하세요.

EXTRACT(part FROM dateOrTime)


참고: BigQuery는 주(<weekday>), 마이크로초, 밀리초 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다. BigQuery 부분 유형의 전체 목록은 여기여기에서 확인할 수 있습니다.

[HOUR, MINUTE, SECOND](timeOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

LAST_DAY(dateOrTime[, part])

DATE_SUB( DATE_TRUNC(

DATE_ADD(date, INTERVAL

1 part),

part),

INTERVAL 1 DAY)

MONTHNAME(dateOrTimestamp)

FORMAT_DATE('%b', date)


FORMAT_DATETIME('%b', datetime)


FORMAT_TIMESTAMP('%b', timestamp)

NEXT_DAY(dateOrTime, dowString)

DATE_ADD(

DATE_TRUNC(

date,

WEEK(dowString)),

INTERVAL 1 WEEK)


참고: dowString의 형식을 다시 지정해야 할 수 있습니다. 예를 들어 Snowflake의 'su'은 BigQuery의 'SUNDAY'가 됩니다.

PREVIOUS_DAY(dateOrTime, dowString)

DATE_TRUNC(

date,

WEEK(dowString)

)


참고: dowString의 형식을 다시 지정해야 할 수 있습니다. 예를 들어 Snowflake의 'su'은 BigQuery의 'SUNDAY'가 됩니다.

TIME_FROM_PARTS(hour, minute, second[, nanosecond)


참고: Snowflake는 오버플로 시간을 지원합니다. 예를 들어 TIME_FROM_PARTS(0, 100, 0) 는 01:40:00...을 반환합니다. BigQuery에서는 지원되지 않습니다. BigQuery는 나노초를 지원하지 않습니다.

TIME(hour, minute, second)


TIME(timestamp, [timezone])


TIME(datetime)

TIME_SLICE(dateOrTime, sliceLength, part[, START]


TIME_SLICE(dateOrTime, sliceLength, part[, END]

DATE_TRUNC(

DATE_SUB(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


DATE_TRUNC(

DATE_ADD(CURRENT_DATE(),

INTERVAL value MONTH),

MONTH)


참고: BigQuery에서는 Snowflake의 TIME_SLICE에 직접적으로 정확하게 비교되는 항목을 지원하지 않습니다. 적절한 데이터 유형‏에 DATETINE_TRUNC, TIME_TRUNC, TIMESTAMP_TRUNC를 사용합니다.

TIMEADD(part, value, dateOrTime)

TIME_ADD(time, INTERVAL value part)

TIMEDIFF(

part,

expression1,

expression2,

)


참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다.

TIMESTAMP_[LTZ, NTZ, TZ _]FROM_PARTS (year, month, day, hour, second [, nanosecond][, timezone])

TIMESTAMP(

string_expression[, timezone] | date_expression[, timezone] |

datetime_expression[, timezone]

)


참고: BigQuery에서는 타임스탬프를 STRING 유형으로 입력해야 합니다. 예를 들면 "2008-12-25 15:30:00"입니다.

TIMESTAMPADD(part, value, dateOrTime)

TIMESTAMPADD(timestamp, INTERVAL value part)

TIMESTAMPDIFF(

part,

expression1,

expression2,

)


참고: Snowflake는 이 함수에서 두 날짜, 시간, 타임스탬프 유형 간의 차이 계산을 지원합니다.

DATE_DIFF(

dateExpression1,

dateExpression2,

part

)


DATETIME_DIFF(

datetimeExpression1,

datetimeExpression2,

part

)


TIME_DIFF(

timeExpression1,

timeExpression2,

part

)


TIMESTAMP_DIFF(

timestampExpression1,

timestampExpression2,

part

)


참고: BigQuery는 주(<weekday>) 및 ISO 연도 부분 유형을 지원합니다.

TRUNC(dateOrTime, part)


참고: Snowflake는 나노초 부분 유형을 지원합니다. BigQuery에서는 지원되지 않습니다. Snowflake 부분 유형의 전체 목록은 여기에서 확인하세요.

DATE_TRUNC(date, part)


DATETIME_TRUNC(datetime, part)


TIME_TRUNC(time, part)


TIMESTAMP_TRUNC(timestamp, part[, timezone])


참고: BigQuery는 주(<weekday>), ISO 주, ISO 연도 부분 유형을 지원합니다. Snowflake는 그렇지 않습니다.

[YEAR*, DAY*, WEEK*, MONTH, QUARTER](dateOrTimestamp)

EXTRACT(part FROM timestamp [AT THE ZONE timezone])

BigQuery는 Snowflake에 직접 아날로그가 없는 다음과 같은 날짜 및 시간 함수도 제공합니다.

정보 스키마 및 테이블 함수

BigQuery는 Snowflake의 여러 정보 스키마 및 테이블 함수를 개념적으로 지원하지 않습니다. Snowflake는 BigQuery에 직접 아날로그가 없는 다음과 같은 정보 스키마 및 테이블 함수를 제공합니다.

다음은 관련된 BigQuery 및 Snowflake 정보 스키마와 테이블 함수 목록입니다.

Snowflake BigQuery
QUERY_HISTORY

QUERY_HISTORY_BY_*
INFORMATION_SCHEMA.JOBS_BY_*

참고: 직접적으로 대체하는 항목이 아닙니다.
TASK_HISTORY INFORMATION_SCHEMA.JOBS_BY_*

참고: 직접적으로 대체하는 항목이 아닙니다.

BigQuery는 Snowflake에 직접 아날로그가 없는 다음 정보 스키마 및 테이블 함수를 제공합니다.

숫자 함수

다음 표는 일반적인 Snowflake 숫자 함수와 그에 해당하는 BigQuery 함수 간의 매핑을 보여줍니다.

Snowflake BigQuery

ABS(expression)

ABS(expression)

ACOS(expression)

ACOS(expression)

ACOSH(expression)

ACOSH(expression)

ASIN(expression)

ASIN(expression)

ASINH(expression)

ASINH(expression)

ATAN(expression)

ATAN(expression)

ATAN2(y, x)

ATAN2(y, x)

ATANH(expression)

ATANH(expression)

CBRT(expression)

POW(expression, ⅓)

CEIL(expression [, scale])

CEIL(expression)


참고: BigQuery의 CEIL는 정밀도 또는 소수 자릿수를 표시하는 기능을 지원하지 않습니다. ROUND 에서는 반올림을 지정할 수 없습니다.

COS(expression)

COS(expression)

COSH(expression)

COSH(expression)

COT(expression)

1/TAN(expression)

DEGREES(expression)

(expression)*(180/ACOS(-1))

EXP(expression)

EXP(expression)

FACTORIAL(expression)

BigQuery는 Snowflake의 FACTORIAL을 대신할 항목이 없습니다. 사용자 정의 함수를 사용합니다.

FLOOR(expression [, scale])

FLOOR(expression)


참고: BigQuery의 FLOOR는 정밀도 또는 소수 자릿수를 표시하는 기능을 지원하지 않습니다. ROUND 에서는 반올림을 지정할 수 없습니다. TRUNC는 절대값을 평가하므로 양수에 대해서는 동의어로 수행되지만 음수에는 수행되지 않습니다.

HAVERSINE(lat1, lon1, lat2, lon2)

ST_DISTANCE( ST_GEOGPOINT(lon1, lat1),

ST_GEOGPOINT(lon2, lat2)

)/1000


참고: 일치검색은 아니지만 매우 유사합니다.

LN(expression)

LN(expression)

LOG(base, expression)

LOG(expression [,base])


LOG10(expression)


참고: LOG의 기본 기본값은 10입니다.

MOD(expression1, expression2)

MOD(expression1, expression2)

PI()

ACOS(-1)

POW(x, y)


POWER(x, y)

POW(x, y)


POWER(x, y)

RADIANS(expression)

(expression)*(ACOS(-1)/180)

ROUND(expression [, scale])

ROUND(expression, [, scale])

SIGN(expression)

SIGN(expression)

SIN(expression)

SIN(expression)

SINH(expression)

SINH(expression)

SQRT(expression)

SQRT(expression)

SQUARE(expression)

POW(expression, 2)

TAN(expression)

TAN(expression)

TANH(expression)

TANH(expression)

TRUNC(expression [, scale])


TRUNCATE(expression [, scale])

TRUNC(expression [, scale])


참고: BigQuery의 반환 값은 표현식보다 작아야 합니다. 같은 값은 지원하지 않습니다.

BigQuery는 다음과 같은 수학 함수도 제공하며, Snowflake에는 직접적인 유사 항목이 없습니다.

반구조화된 데이터 함수

Snowflake BigQuery
ARRAY_APPEND 커스텀 사용자 정의 함수입니다.
ARRAY_CAT ARRAY_CONCAT
ARRAY_COMPACT 커스텀 사용자 정의 함수입니다.
ARRAY_CONSTRUCT [ ]
ARRAY_CONSTRUCT_COMPACT 커스텀 사용자 정의 함수입니다.
ARRAY_CONTAINS 커스텀 사용자 정의 함수입니다.
ARRAY_INSERT 커스텀 사용자 정의 함수입니다.
ARRAY_INTERSECTION 커스텀 사용자 정의 함수입니다.
ARRAY_POSITION 커스텀 사용자 정의 함수입니다.
ARRAY_PREPEND 커스텀 사용자 정의 함수입니다.
ARRAY_SIZE ARRAY_LENGTH
ARRAY_SLICE 커스텀 사용자 정의 함수입니다.
ARRAY_TO_STRING ARRAY_TO_STRING
ARRAYS_OVERLAP 커스텀 사용자 정의 함수입니다.
AS_<object_type> CAST
AS_ARRAY CAST
AS_BINARY CAST
AS_BOOLEAN CAST
AS_CHAR , AS_VARCHAR CAST
AS_DATE CAST
AS_DECIMAL , AS_NUMBER CAST
AS_DOUBLE , AS_REAL CAST
AS_INTEGER CAST
AS_OBJECT CAST
AS_TIME CAST
AS_TIMESTAMP_* CAST
CHECK_JSON 커스텀 사용자 정의 함수입니다.
CHECK_XML 커스텀 사용자 정의 함수입니다.
FLATTEN UNNEST
GET 커스텀 사용자 정의 함수입니다.
GET_IGNORE_CASE 커스텀 사용자 정의 함수입니다.

GET_PATH , :

커스텀 사용자 정의 함수입니다.
IS_<object_type> 커스텀 사용자 정의 함수입니다.
IS_ARRAY 커스텀 사용자 정의 함수입니다.
IS_BINARY 커스텀 사용자 정의 함수입니다.
IS_BOOLEAN 커스텀 사용자 정의 함수입니다.
IS_CHAR , IS_VARCHAR 커스텀 사용자 정의 함수입니다.
IS_DATE , IS_DATE_VALUE 커스텀 사용자 정의 함수입니다.
IS_DECIMAL 커스텀 사용자 정의 함수입니다.
IS_DOUBLE , IS_REAL 커스텀 사용자 정의 함수입니다.
IS_INTEGER 커스텀 사용자 정의 함수입니다.
IS_OBJECT 커스텀 사용자 정의 함수입니다.
IS_TIME 커스텀 사용자 정의 함수입니다.
IS_TIMESTAMP_* 커스텀 사용자 정의 함수입니다.
OBJECT_CONSTRUCT 커스텀 사용자 정의 함수입니다.
OBJECT_DELETE 커스텀 사용자 정의 함수입니다.
OBJECT_INSERT 커스텀 사용자 정의 함수입니다.
PARSE_JSON JSON_EXTRACT
PARSE_XML 커스텀 사용자 정의 함수입니다.
STRIP_NULL_VALUE 커스텀 사용자 정의 함수입니다.
STRTOK_TO_ARRAY SPLIT
TRY_PARSE_JSON 커스텀 사용자 정의 함수입니다.
TYPEOF 커스텀 사용자 정의 함수입니다.
XMLGET 커스텀 사용자 정의 함수입니다.

문자열 및 바이너리 함수

Snowflake BigQuery

string1 || string2

CONCAT(string1, string2)

ASCII

TO_CODE_POINTS(string1)[OFFSET(0)]

BASE64_DECODE_BINARY

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<bytes_input>)

)

BASE64_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_BASE64(<string1>)

)

BASE64_ENCODE

TO_BASE64(

SAFE_CAST(<string1> AS BYTES)

)

BIT_LENGTH

BYTE_LENGTH * 8

CHARACTER_LENGTH

CHARINDEX(substring, string)

STRPOS(string, substring)

CHR,CHAR

CODE_POINTS_TO_STRING([number])

COLLATE 커스텀 사용자 정의 함수입니다.
COLLATION 커스텀 사용자 정의 함수입니다.
COMPRESS 커스텀 사용자 정의 함수입니다.

CONCAT(string1, string2)

CONCAT(string1, string2)

참고:: BigQuery의 CONCAT(...)는 원하는 수의 문자열을 연결할 수 있도록 지원합니다.
CONTAINS 커스텀 사용자 정의 함수입니다.
DECOMPRESS_BINARY 커스텀 사용자 정의 함수입니다.
DECOMPRESS_STRING 커스텀 사용자 정의 함수입니다.
EDITDISTANCE 커스텀 사용자 정의 함수입니다.
ENDSWITH 커스텀 사용자 정의 함수입니다.
HEX_DECODE_BINARY

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_DECODE_STRING

SAFE_CONVERT_BYTES_TO_STRING(

FROM_HEX(<string1>)

HEX_ENCODE

TO_HEX(

SAFE_CAST(<string1> AS BYTES))

ILIKE 커스텀 사용자 정의 함수입니다.
ILIKE ANY 커스텀 사용자 정의 함수입니다.
INITCAP INITCAP
INSERT 커스텀 사용자 정의 함수입니다.
LEFT 사용자 정의 함수
LENGTH

LENGTH(expression)

LIKE LIKE
LIKE ALL 커스텀 사용자 정의 함수입니다.
LIKE ANY 커스텀 사용자 정의 함수입니다.
LOWER

LOWER(string)

LPAD

LPAD(string1, length[, string2])

LTRIM

LTRIM(string1, trim_chars)

MD5,MD5_HEX

MD5(string)

MD5_BINARY 커스텀 사용자 정의 함수입니다.
OCTET_LENGTH 커스텀 사용자 정의 함수입니다.
PARSE_IP 커스텀 사용자 정의 함수입니다.
PARSE_URL 커스텀 사용자 정의 함수입니다.
POSITION

STRPOS(string, substring)

REPEAT

REPEAT(string, integer)

REPLACE

REPLACE(string1, old_chars, new_chars)

REVERSE

number_characters

)

REVERSE(expression)

RIGHT 사용자 정의 함수
RPAD RPAD
RTRIM

RTRIM(string, trim_chars)

RTRIMMED_LENGTH 커스텀 사용자 정의 함수입니다.
SHA1,SHA1_HEX

SHA1(string)

SHA1_BINARY 커스텀 사용자 정의 함수입니다.
SHA2,SHA2_HEX 커스텀 사용자 정의 함수입니다.
SHA2_BINARY 커스텀 사용자 정의 함수입니다.
SOUNDEX 커스텀 사용자 정의 함수입니다.
SPACE 커스텀 사용자 정의 함수입니다.
SPLIT SPLIT
SPLIT_PART 커스텀 사용자 정의 함수입니다.
SPLIT_TO_TABLE 커스텀 사용자 정의 함수입니다.
STARTSWITH 커스텀 사용자 정의 함수입니다.
STRTOK

SPLIT(instring, delimiter)[ORDINAL(tokennum)]


참고: 전체 구분 기호 문자열 인수는 단일 구분 기호로 사용됩니다. 기본 구분 기호는 쉼표입니다.
STRTOK_SPLIT_TO_TABLE 커스텀 사용자 정의 함수입니다.
SUBSTR,SUBSTRING SUBSTR
TRANSLATE 커스텀 사용자 정의 함수입니다.
TRIM TRIM
TRY_BASE64_DECODE_BINARY 커스텀 사용자 정의 함수입니다.
TRY_BASE64_DECODE_STRING

SUBSTR(string, 0, integer)

TRY_HEX_DECODE_BINARY

SUBSTR(string, -integer)

TRY_HEX_DECODE_STRING

LENGTH(expression)

UNICODE 커스텀 사용자 정의 함수입니다.

UPPER

UPPER

문자열 함수(정규 표현식)

Snowflake BigQuery
REGEXP

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_COUNT

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

source_string,

pattern

)

)


position이 지정된 경우:

ARRAY_LENGTH(

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)

)


참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요.
REGEXP_INSTR

IFNULL(

STRPOS(

source_string,

REGEXP_EXTRACT(

source_string,

pattern)

), 0)


position이 지정된 경우:

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern)

) + IF(position <= 0, 1, position) - 1, 0)


occurrence가 지정된 경우:

IFNULL(

STRPOS(

SUBSTR(source_string, IF(position <= 0, 1, position)),

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]

) + IF(position <= 0, 1, position) - 1, 0)


참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요.

REGEXP_LIKE

IF(REGEXP_CONTAINS,1,0)=1

REGEXP_REPLACE

REGEXP_REPLACE(

source_string,

pattern,

""

)


replace_string이 지정된 경우:

REGEXP_REPLACE(

source_string,

pattern,

replace_string

)


position가 지정된 경우:

CASE

WHEN position > LENGTH(source_string) THEN source_string

WHEN position <= 0 THEN

REGEXP_REPLACE(

source_string,

pattern,

""

)

ELSE

CONCAT(

SUBSTR(

source_string, 1, position - 1),

REGEXP_REPLACE(

SUBSTR(source_string, position),

pattern,

replace_string

)

)

END


참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요.
REGEXP_SUBSTR

REGEXP_EXTRACT(

source_string,

pattern

)


position이 지정된 경우:

REGEXP_EXTRACT(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)


occurrence가 지정된 경우:

REGEXP_EXTRACT_ALL(

SUBSTR(source_string, IF(position <= 0, 1, position)),

pattern

)[SAFE_ORDINAL(occurrence)]


참고: BigQuery는 re2 라이브러리를 사용하여 정규 표현식을 지원합니다. 정규 표현식 구문은 해당 문서를 참조하세요.
RLIKE

IF(REGEXP_CONTAINS,1,0)=1

시스템 함수

Snowflake BigQuery
SYSTEM$ABORT_SESSION 커스텀 사용자 정의 함수입니다.
SYSTEM$ABORT_TRANSACTION 커스텀 사용자 정의 함수입니다.
SYSTEM$CANCEL_ALL_QUERIES 커스텀 사용자 정의 함수입니다.
SYSTEM$CANCEL_QUERY 커스텀 사용자 정의 함수입니다.
SYSTEM$CLUSTERING_DEPTH 커스텀 사용자 정의 함수입니다.
SYSTEM$CLUSTERING_INFORMATION 커스텀 사용자 정의 함수입니다.
SYSTEM$CLUSTERING_RATIO — Deprecated 커스텀 사용자 정의 함수입니다.
SYSTEM$CURRENT_USER_TASK_NAME 커스텀 사용자 정의 함수입니다.
SYSTEM$DATABASE_REFRESH_HISTORY 커스텀 사용자 정의 함수입니다.
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB 커스텀 사용자 정의 함수입니다.
SYSTEM$GET_AWS_SNS_IAM_POLICY 커스텀 사용자 정의 함수입니다.
SYSTEM$GET_PREDECESSOR_RETURN_VALUE 커스텀 사용자 정의 함수입니다.
SYSTEM$LAST_CHANGE_COMMIT_TIME 커스텀 사용자 정의 함수입니다.
SYSTEM$PIPE_FORCE_RESUME 커스텀 사용자 정의 함수입니다.
SYSTEM$PIPE_STATUS 커스텀 사용자 정의 함수입니다.
SYSTEM$SET_RETURN_VALUE 커스텀 사용자 정의 함수입니다.
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS 커스텀 사용자 정의 함수입니다.
SYSTEM$STREAM_GET_TABLE_TIMESTAMP 커스텀 사용자 정의 함수입니다.
SYSTEM$STREAM_HAS_DATA 커스텀 사용자 정의 함수입니다.
SYSTEM$TASK_DEPENDENTS_ENABLE 커스텀 사용자 정의 함수입니다.
SYSTEM$TYPEOF 커스텀 사용자 정의 함수입니다.
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS 커스텀 사용자 정의 함수입니다.
SYSTEM$WAIT 커스텀 사용자 정의 함수입니다.
SYSTEM$WHITELIST 커스텀 사용자 정의 함수입니다.
SYSTEM$WHITELIST_PRIVATELINK 커스텀 사용자 정의 함수입니다.

테이블 함수

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 name)를 지원합니다. 예를 들어 SAFE_CAST('apple' AS INT64)는 NULL을 반환합니다.

연산자

다음 섹션에는 Snowflake 연산자와 그에 해당하는 BigQuery 연산자가 나와 있습니다.

산술 연산자

다음 표에서는 Snowflake 산술 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.

Snowflake BigQuery

(Unary) (+'5')

CAST("5" AS NUMERIC)

a + b

a + b

(Unary) (-'5')

(-1) * CAST("5" AS NUMERIC)


참고: BigQuery는 표준 단항 뺄셈을 지원하지만 문자열 형식의 정수를 INT64, NUMERIC 또는 FLOAT64 유형으로 변환하지 않습니다.

a - b

a - b

date1 - date2


date1 - 365

DATE_DIFF(date1, date2, date_part) DATE_SUB(date1, date2, date_part)

a * b

a * b

a / b

a / b

a % b

MOD(a, b)

산술 작업을 수행할 때 Snowflake 소수 자릿수 및 정밀도 세부정보를 보려면 Snowflake 문서를 참조하세요.

비교 연산자

Snowflake 비교 연산자와 BigQuery 비교 연산자는 동일합니다.

논리/불리언 연산자

Snowflake 논리/불리언 연산자와 BigQuery 논리/불리언 연산자는 동일합니다.

집합 연산자

다음 표에서는 Snowflake 설정 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.

Snowflake BigQuery

SELECT ... INTERSECT SELECT ...

SELECT ...

INTERSECT DISTINCT

SELECT...

SELECT ... MINUS SELECT ...

SELECT ... EXCEPT SELECT …


참고: MINUS EXCEPT 는 동의어입니다.

SELECT ... EXCEPT DISTINCT SELECT ...

SELECT ... UNION SELECT ...

SELECT ... UNION ALL SELECT ...

SELECT ... UNION DISTINCT SELECT ...


SELECT ... UNION ALL SELECT ...

서브 쿼리 연산자

다음 표에서는 Snowflake 서브 쿼리 연산자와 그에 해당하는 BigQuery 연산자 간의 매핑을 보여줍니다.

Snowflake BigQuery

SELECT ... FROM ... WHERE col <operator> ALL … SELECT ... FROM ... WHERE col <operator> ANY ...

BigQuery는 Snowflake의 ALL/ANY를 직접 대신할 항목을 지원하지 않습니다.

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] EXISTS...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT ... FROM ...

WHERE [NOT] IN...

SELECT * FROM table1

UNION

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

SELECT * FROM table1

UNION ALL

(

SELECT * FROM table2

EXCEPT

SELECT * FROM table3

)


참고: BigQuery에서는 서로 다른 집합 작업을 분리하려면 괄호로 묶어야 합니다. 동일한 집합 연산자가 반복되는 경우 괄호가 필요하지 않습니다.

DML 구문

이 섹션에서는 Snowflake와 BigQuery 간 데이터 관리 언어 구문의 차이점을 설명합니다.

INSERT

Snowflake는 열에 대해 구성 가능한 DEFAULT 키워드를 제공합니다. BigQuery에서 null 허용 열의 DEFAULT 값은 NULL이며 DEFAULT는 필수 열에서 지원되지 않습니다. 대부분의 Snowflake INSERT은 BigQuery와 호환됩니다. 다음 표에는 예외 사항이 나와 있습니다.

Snowflake BigQuery

INSERT [OVERWRITE] INTO table

VALUES [... | DEFAULT | NULL] ...


참고: BigQuery에서는 INSERT 문이 있는 JSON 객체 삽입이 지원되지 않습니다.

INSERT [INTO] table (column1 [, ...])

VALUES (DEFAULT [, ...])

참고: BigQuery는 Snowflake의 OVERWRITE를 직접 대신할 항목을 지원하지 않습니다. 대신 DELETE를 사용하세요.

INSERT INTO table (column1 [, ...]) SELECT... FROM ...

INSERT [INTO] table (column1, [,...])

SELECT ...

FROM ...

INSERT [OVERWRITE] ALL <intoClause> ... INSERT [OVERWRITE] {FIRST | ALL} {WHEN condition THEN <intoClause>}

[...]

[ELSE <intoClause>]

...

참고: <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

UPDATE table SET col = value [,...] [FROM ...] [WHERE ...]

UPDATE table

SET column = expression [,...]

[FROM ...]

WHERE TRUE


참고: BigQuery의 모든 UPDATE 문에는 뒤에 조건이 나오는 WHERE 키워드가 필요합니다.

DELETETRUNCATE TABLE

테이블 스키마 또는 색인에 영향을 주지 않고 테이블에서 행을 삭제하려면 DELETETRUNCATE TABLE 문을 사용합니다.

Snowflake에서 DELETETRUNCATE TABLE는 모두 데이터 보관 기간 동안 복구 목적으로 Snowflake의 시간 이동을 사용하여 삭제된 데이터를 유지합니다. 하지만 DELETE는 외부 파일 로드 기록과 로드 메타데이터를 삭제하지 않습니다.

BigQuery의 DELETE 문에는 WHERE 절이 있어야 합니다. BigQuery의 DELETE에 대한 자세한 내용은 DML 문서에서 BigQuery DELETE 예시를 참조하세요.

Snowflake BigQuery

DELETE FROM table_name [USING ...]

[WHERE ...]



TRUNCATE [TABLE] [IF EXISTS] table_name

DELETE [FROM] table_name [alias]

WHERE ...


참고: BigQuery DELETE 문에는 WHERE 절이 필요합니다.

MERGE

MERGE 문은 INSERT, UPDATE, DELETE 작업을 단일 'upsert' 문으로 결합하여 자동으로 작업을 수행할 수 있습니다. MERGE 작업은 각 대상 행에 대해 최대 1개의 소스 행과 일치해야 합니다.

BigQuery 테이블은 DML 문이 하루 1,000개로 제한되므로 다음 테이블과 같이 INSERT, UPDATE, DELETE 문을 단일 MERGE 문으로 통합하는 것이 이상적입니다.

Snowflake BigQuery

MERGE INTO target USING source ON target.key = source.key WHEN MATCHED AND source.filter = 'Filter_exp' THEN

UPDATE SET target.col1 = source.col1, target.col1 = source.col2,

...


참고: Snowflake는 비결정적 결과를 처리하기 위해 ERROR_ON_NONDETERMINISTIC_MERGE 세션 매개변수를 지원합니다.

MERGE target

USING source

ON target.key = source.key

WHEN MATCHED AND source.filter = 'filter_exp' THEN

UPDATE SET

target.col1 = source.col1,

target.col2 = source.col2,

...



참고: 모든 열을 업데이트하는 경우 모든 열이 나열되어야 합니다.

GETLIST

GET 문은 다음 Snowflake 단계 중 하나에서 데이터 파일을 클라이언트 머신의 로컬 디렉터리/폴더로 다운로드합니다.

  • 이름이 지정된 내부 단계
  • 지정된 테이블의 내부 단계
  • 현재 사용자의 내부 단계

LIST(LS) 문은 다음 Snowflake 단계 중 하나에서 스테이징된(즉, 로컬 파일 시스템에서 업로드되거나 테이블에서 언로드된) 파일 목록을 반환합니다.

  • 이름이 지정된 내부 단계
  • 이름이 지정된 외부 단계
  • 지정된 테이블의 단계
  • 현재 사용자의 단계

BigQuery는 스테이징 개념을 지원하지 않으며 GETLIST에 상응하는 개념이 없습니다.

PUTREMOVE

PUT 문은 클라이언트 머신의 로컬 디렉터리/폴더에서 다음 Snowflake 단계 중 하나로 데이터 파일을 업로드(즉, 스테이징)합니다.

  • 이름이 지정된 내부 단계
  • 지정된 테이블의 내부 단계
  • 현재 사용자의 내부 단계

REMOVE (RM) 문은 다음 Snowflake 내부 단계 중 하나에 스테이징된 파일을 삭제합니다.

  • 이름이 지정된 내부 단계
  • 지정된 테이블의 단계
  • 현재 사용자의 단계

BigQuery는 스테이징 개념을 지원하지 않으며 PUTREMOVE에 상응하는 개념이 없습니다.

DDL 구문

이 섹션에서는 Snowflake와 BigQuery 간 데이터 정의 언어 구문의 차이점을 설명합니다.

데이터베이스, 스키마, 공유 DDL

대부분의 Snowflake 용어는 BigQuery의 용어와 일치합니다. 단, Snowflake 데이터베이스는 BigQuery 데이터 세트와 유사합니다. Snowflake에서 BigQuery로의 자세한 용어 매핑을 참조하세요.

CREATE DATABASE

Snowflake는 데이터베이스 관리 명령어를 통해 데이터베이스 생성 및 관리를 지원하고 BigQuery는 데이터 세트 만들기에 콘솔, CLI, 클라이언트 라이브러리 사용 등 여러 옵션을 제공합니다. 이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 차이점을 설명합니다.

Snowflake BigQuery

CREATE DATABASE <name>


참고: Snowflake는 데이터베이스 이름을 지정할 때 이러한 요구사항을 제공합니다. 이름으로 255자(영문 기준)만 허용됩니다.

bq mk <name>


참고: BigQuery에는 이름에 1,024자를 허용한다는 점을 제외하면 Snowflake와 데이터 세트 이름 지정 요구사항이 비슷합니다.

CREATE OR REPLACE DATABASE <name>

BigQuery에서는 데이터 세트 교체가 지원되지 않습니다.

CREATE TRANSIENT DATABASE <name>

BigQuery에서는 임시 데이터 세트 만들기가 지원되지 않습니다.

CREATE DATABASE IF NOT EXISTS <name>

BigQuery에서 지원되지 않는 개념

CREATE DATABASE <name>

CLONE <source_db>

[ { AT | BEFORE }

( { TIMESTAMP => <timestamp> |

OFFSET => <time_difference> |

STATEMENT => <id> } ) ]

데이터 세트 클론은 아직 BigQuery에서 지원되지 않습니다.

CREATE DATABASE <name>

DATA_RETENTION_TIME_IN_DAYS = <num>

BigQuery에서는 데이터 세트 수준의 시간 이동이 지원되지 않습니다. 그러나 테이블 및 쿼리 결과에 대한 시간 이동은 지원됩니다.

CREATE DATABASE <name>

DEFAULT_DDL_COLLATION = '<collation_specification>'

BigQuery에서는 DDL의 콜레이션이 지원되지 않습니다.

CREATE DATABASE <name>

COMMENT = '<string_literal>'

bq mk \

--description "<string_literal>" \

<name>

CREATE DATABASE <name>

FROM SHARE <provider_account>.<share_name>

BigQuery에서는 공유 데이터 세트 만들기가 지원되지 않습니다. 하지만 데이터 세트가 생성되면 사용자가 콘솔/UI를 통해 데이터세트를 공유할 수 있습니다.

CREATE DATABASE <name>

AS REPLICA OF

<region>.<account>.<primary_db_name>

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }


참고: Snowflake는 BigQuery에서 지원되지 않는 보조 데이터베이스의 구체화된 뷰에 대한 자동 백그라운드 유지보수 옵션을 제공합니다.

bq mk --transfer_config \

--target_dataset = <name> \

--data_source = cross_region_copy \ --params='

{"source_dataset_id":"<primary_db_name>"

,"source_project_id":"<project_id>"

,"overwrite_destination_table":"true"}'

참고: BigQuery는 BigQuery Data Transfer Service를 사용한 데이터 세트 복사를 지원합니다. 데이터 세트 복사 기본 요건을 보려면 여기를 참조하세요.

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

ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>

BigQuery에서는 데이터 세트 이름 변경이 지원되지 않지만 데이터 세트 복사는 지원됩니다.

ALTER DATABASE <name>

SWAP WITH <target_db_name>

BigQuery에서는 데이터 세트 바꾸기가 지원되지 않습니다.

ALTER DATABASE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

[ DEFAULT_DDL_COLLATION = '<value>']

BigQuery에서는 데이터 세트 수준에서 데이터 보관 및 콜레이션이 지원되지 않습니다.

ALTER DATABASE <name>

SET COMMENT = '<string_literal>'

bq update \

--description "<string_literal>" <name>

ALTER DATABASE <name>

ENABLE REPLICATION TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name>

DISABLE REPLICATION [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name>

SET AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name> REFRESH

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name>

ENABLE FAILOVER TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name>

DISABLE FAILOVER [ TO ACCOUNTS <snowflake_region>.<account_name>

[ , <snowflake_region>.<account_name> ... ]]

BigQuery에서 지원되지 않는 개념입니다.

ALTER DATABASE <name>

PRIMARY

BigQuery에서 지원되지 않는 개념입니다.

DROP DATABASE

이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 DROP 문의 차이를 설명합니다.

Snowflake BigQuery

DROP DATABASE [ IF EXISTS ] <name>

[ CASCADE | RESTRICT ]


참고: Snowflake에서 데이터베이스를 삭제해도 시스템에서 영구적으로 삭제되지는 않습니다. 삭제된 데이터베이스의 버전은 데이터베이스의 DATA_RETENTION_TIME_IN_DAYS 매개변수로 지정된 기간 동안 보존됩니다.

bq rm -r -f -d <name>


Where

-r 데이터 세트의 모든 객체를 삭제

-f is to skip confirmation for execution

-d 데이터 세트를 표시

참고: BigQuery에서 데이터 세트 삭제는 영구적입니다. 또한 데이터 세트의 모든 데이터와 객체가 삭제되므로 데이터 세트 수준에서 연쇄 삭제가 지원되지 않습니다.

또한 Snowflake는 삭제된 데이터 세트의 최신 버전을 복원하는 UNDROP DATASET 명령어도 지원합니다. 이는 현재 BigQuery의 데이터 세트 수준에서 지원되지 않습니다.

USE DATABASE

Snowflake에는 USE DATABASE 명령어를 사용하여 사용자 세션의 데이터베이스를 설정하는 옵션이 제공됩니다. 따라서 SQL 명령어에 정규화된 객체 이름을 지정할 필요가 없습니다. BigQuery에는 Snowflake의 USE DATABASE 명령어를 대체할 항목이 없습니다.

SHOW DATABASE

이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 SHOW 문의 차이를 설명합니다.

Snowflake BigQuery

SHOW DATABASES


참고: Snowflake는 보관 기간 내에 삭제된 데이터베이스를 포함하여 모든 데이터베이스의 세부정보를 나열하고 표시하는 단일 옵션을 제공합니다.
bq ls --format=prettyjson
and / or

bq show <dataset_name>


참고: BigQuery에서 ls 명령어는 데이터 세트 이름과 기본 정보만 제공하고, show 명령어는 데이터 세트의 최종 수정된 타임스탬프, ACL, 라벨과 같은 세부정보를 제공합니다. BigQuery는 정보 스키마를 통해 데이터 세트에 대한 세부정보도 제공합니다.

SHOW TERSE DATABASES


참고: TERSE 옵션을 사용하면 Snowflake에서 데이터 세트에 대한 특정 정보/필드만 표시할 수 있습니다.
BigQuery에서 지원되지 않는 개념입니다.

SHOW DATABASES HISTORY

시간 이동 컨셉은 BigQuery의 데이터 세트 수준에서 지원되지 않습니다.
SHOW DATABASES

[LIKE '<pattern>']

[STARTS WITH '<name_string>']

BigQuery에서는 데이터 세트 이름별로 결과를 필터링할 수 없습니다. 하지만 라벨별 필터링은 지원됩니다.
SHOW DATABASES

LIMIT <rows> [FROM '<name_string>']


참고: 기본적으로 Snowflake는 결과 수를 제한하지 않습니다. 하지만 한도 값은 10K를 초과할 수 없습니다.

bq ls \

--max_results <rows>


참고: 기본적으로 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

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2 NULL,

col3 data_type3 UNIQUE,

col4 data_type4 PRIMARY KEY,

col5 data_type5

)


참고: UNIQUE PRIMARY KEY 제약조건은 정보 제공용으로 Snowflake 시스템에 의해 시행되지 않습니다.

CREATE TABLE table_name

(

col1 data_type1 NOT NULL,

col2 data_type2,

col3 data_type3,

col4 data_type4,

col5 data_type5,

)

CREATE TABLE table_name

(

col1 data_type1[,...]

table_constraints

)


여기서 table_constraints 는 다음과 같습니다.

[UNIQUE(column_name [, ... ])]

[PRIMARY KEY(column_name [, ...])]

[FOREIGN KEY(column_name [, ...])

REFERENCES reftable [(refcolumn)]


참고: UNIQUE PRIMARY KEY 제약조건은 정보 제공용으로 Snowflake 시스템에 의해 시행되지 않습니다.

CREATE TABLE table_name

(

col1 data_type1[,...]

)

PARTITION BY column_name

CLUSTER BY column_name [, ...]


참고: BigQuery는 UNIQUE, PRIMARY KEY 또는 FOREIGN KEY 테이블 제약조건을 사용하지 않습니다. 쿼리 실행 중에 이러한 제약조건이 제공하는 것과 유사하게 최적화하려면 BigQuery 테이블을 파티션으로 나누고 클러스터링합니다. CLUSTER BY는 최대 4개 열까지 지원합니다.

CREATE TABLE table_name

LIKE original_table_name

INFORMATION_SCHEMA 테이블을 사용해 열 이름, 데이터 유형, NOT NULL 제약조건을 새 테이블에 복사하는 방법을 알아보려면 이 예시를 참조하세요.

CREATE TABLE table_name

(

col1 data_type1

)

BACKUP NO


참고: Snowflake에서 BACKUP NO 설정은 '스냅샷을 만들고 스냅샷에서 복원할 때 처리 시간을 절약하고 저장공간을 줄이기'로 지정됩니다.
BigQuery는 처리 시간이나 요금이 청구되는 스토리지에 영향을 미치지 않고 모든 테이블의 이전 버전을 최대 7일간 자동으로 보관하므로 BACKUP NO 테이블 옵션이 사용되지 않거나 필요하지 않습니다.

CREATE TABLE table_name

(

col1 data_type1

)

table_attributes


여기서 table_attributes 는 다음과 같습니다.

[DISTSTYLE {AUTO|EVEN|KEY|ALL}]

[DISTKEY (column_name)]

[[COMPOUND|INTERLEAVED] SORTKEY

(column_name [, ...])]

BigQuery는 클러스터링을 지원하여 키를 정렬된 순서로 저장할 수 있습니다.

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE table_name

AS SELECT ...

CREATE TABLE IF NOT EXISTS table_name

...

CREATE TABLE IF NOT EXISTS table_name

...

또한 BigQuery는 테이블이 이미 있는 경우 덮어쓰는 DDL 문 CREATE OR REPLACE TABLE 문을 지원합니다.

BigQuery의 CREATE TABLE 문은 Snowflake에는 해당되는 항목이 없는 다음 절을 지원합니다.

BigQuery의 CREATE TABLE에 대한 자세한 내용은 DML 문서에서 BigQuery CREATE 예시를 참조하세요.

ALTER TABLE

이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 테이블의 ALTER 문 차이를 설명합니다.

Snowflake BigQuery

ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (friendly_name="<new_name>")

ALTER TABLE <name>

SWAP WITH <target_db_name>

BigQuery에서는 테이블 바꾸기가 지원되지 않습니다.

ALTER TABLE <name>

SET

[DEFAULT_DDL_COLLATION = '<value>']

BigQuery에서는 테이블의 데이터 콜레이션 관리가 지원되지 않습니다.

ALTER TABLE <name>

SET

[DATA_RETENTION_TIME_IN_DAYS = <num>]

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (expiration_timestamp=<timestamp>)

ALTER TABLE <name>

SET

COMMENT = '<string_literal>'

ALTER TABLE [IF EXISTS] <name>

SET OPTIONS (description='<string_literal>')

또한 Snowflake는 BigQuery에서 지원되지 않는 테이블을 변경하기 위한 클러스터링, 열, 제약조건 옵션을 제공합니다.

DROP TABLEUNDROP TABLE

이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 DROP 및 UNDROP 문의 차이를 설명합니다.

Snowflake BigQuery

DROP TABLE [IF EXISTS] <table_name>

[CASCADE | RESTRICT]


참고: Snowflake에서 테이블을 삭제해도 시스템에서 영구적으로 삭제되지는 않습니다. 삭제된 테이블의 버전은 데이터베이스의 DATA_RETENTION_TIME_IN_DAYS 매개변수로 지정된 기간 동안 보존됩니다.

bq rm -r -f -d <dataset_name>.<table_name>


Where

-r은 데이터세트에 있는 모든 객체를 삭제하는 것입니다.
-f는 실행 확인을 건너뛰는 것입니다.
-d는 데이터 세트를 나타냅니다.

참고: BigQuery에서 테이블 삭제는 영구적이지 않지만 스냅샷은 현재 7일 동안만 유지됩니다.

UNDROP TABLE <table_name>

bq cp \ <dataset_name>.<table_name>@<unix_timestamp> <dataset_name>.<new_table_name>


참고: BigQuery에서는 먼저 테이블이 있었던 시점의 UNIX 타임스탬프(밀리초 단위)를 확인해야 합니다. 그런 다음 해당 타임스탬프에 있는 테이블을 새 테이블에 복사합니다. 새 테이블 이름은 삭제한 테이블의 이름과 달라야 합니다.

CREATE EXTERNAL TABLE

BigQuery를 사용하면 영구 및 임시 외부 테이블을 모두 만들고 다음에서 데이터를 직접 쿼리할 수 있습니다.

Snowflake를 사용하면 쿼리 시 지정된 외부 단계에 있는 하나 이상의 파일 집합에서 데이터를 읽는 영구 외부 테이블을 만들 수 있습니다.

이 섹션에서는 Snowflake 명령어에 해당하는 BigQuery CLI 명령어를 사용하여 CREATE EXTERNAL TABLE 문의 차이를 설명합니다.

Snowflake BigQuery
CREATE [OR REPLACE] EXTERNAL TABLE

table

((<col_name> <col_type> AS <expr> )

| (<part_col_name> <col_type> AS <part_expr>)[ inlineConstraint ]

[ , ... ] )

LOCATION = externalStage

FILE_FORMAT =

({FORMAT_NAME='<file_format_name>'

|TYPE=source_format [formatTypeOptions]})


Where:

externalStage = @[namespace.]ext_stage_name[/path]


참고: Snowflake를 사용하면 읽을 데이터가 포함된 파일을 스테이징하고 외부 테이블의 형식 유형 옵션을 지정할 수 있습니다. Snowflake 형식 유형 - CSV, JSON, AVRO, PARQUET, ORC는 XML 유형을 제외하고 모두 BigQuery에서 지원됩니다.

[1] bq mk \

--external_table_definition=definition_file \

dataset.table


OR


[2] bq mk \

--external_table_definition=schema_file@source_format={Cloud Storage URI | drive_URI} \

dataset.table


OR


[3] bq mk \

--external_table_definition=schema@source_format = {Cloud Storage URI | drive_URI} \

dataset.table


참고: BigQuery에서는 테이블 정의 파일 [1], JSON 스키마 파일 [2] 또는 인라인 스키마 정의 [3]을 사용하여 데이터 소스에 연결된 영구 테이블을 만들 수 있습니다. BigQuery에서는 읽을 스테이징 파일 및 형식 유형 옵션 지정이 지원되지 않습니다.

CREATE [OR REPLACE] EXTERNAL TABLE [IF EXISTS]

<table_name>

((<col_name> <col_type> AS <expr> )

[ , ... ] )

[PARTITION BY (<identifier>, ...)]

LOCATION = externalStage

[REFRESH_ON_CREATE = {TRUE|FALSE}]

[AUTO_REFRESH = {TRUE|FALSE}]

[PATTERN = '<regex_pattern>']

FILE_FORMAT = ({FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET} [ formatTypeOptions]})

[COPY GRANTS]

[COMMENT = '<string_literal>']

bq mk \

--external_table_definition=definition_file \

dataset.table


참고: 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 VIEW view_name AS SELECT ...

CREATE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW view_name AS SELECT ...

CREATE OR REPLACE VIEW

view_name AS SELECT ...

CREATE VIEW view_name

(column_name, ...)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

지원되지 않음 CREATE VIEW IF NOT EXISTS

view_name

OPTIONS(view_option_list)

AS SELECT ...

CREATE VIEW view_name

AS SELECT ...

WITH NO SCHEMA BINDING

BigQuery에서 뷰를 만들려면 모든 참조 객체가 이미 존재해야 합니다.

BigQuery에서는 외부 데이터 소스를 쿼리할 수 있습니다.

CREATE SEQUENCE

BigQuery에서는 시퀀스를 사용하지 않으며 다음과 같은 일괄 처리 방식으로 수행할 수 있습니다. 서로게이트 키와 지연 변경 측정기준(SCD)에 대한 자세한 내용은 다음 가이드를 참조하세요.

INSERT INTO dataset.table SELECT *, ROW_NUMBER() OVER () AS id FROM dataset.table

데이터 로드 및 언로드 DDL

Snowflake는 스테이지, 파일 형식, 파이프 관리 명령어를 통해 데이터 로드 및 언로드를 지원합니다. BigQuery는 bq load, BigQuery Data Transfer Service, bq extract 등 다양한 옵션을 제공합니다. 이 섹션에서는 데이터 로드 및 언로드에 사용되는 이러한 방법론의 차이점에 대해 설명합니다.

계정 및 세션 DDL

Snowflake의 계정 및 세션 개념은 BigQuery에서 지원되지 않습니다. BigQuery를 사용하면 모든 수준에서 Cloud IAM을 통해 계정을 관리할 수 있습니다. 또한, 멀티 문 트랜잭션은 아직 BigQuery에서 지원되지 않습니다.

사용자 정의 함수(UDF)

UDF를 사용하면 커스텀 작업을 위한 함수를 만들 수 있습니다. 이러한 함수는 입력 열을 받아 작업을 수행하고 이러한 작업의 결과를 값으로 반환합니다.

SnowflakeBigQuery 모두 SQL 표현식 및 JavaScript 코드를 사용한 UDF를 지원합니다.

일반적인 BigQuery UDF 라이브러리는 GoogleCloudPlatform/bigquery-utils/ GitHub 저장소를 참조하세요.

CREATE FUNCTION 구문

다음 표에서는 Snowflake와 BigQuery 간의 SQL UDF 생성 구문 차이점을 설명합니다.

Snowflake BigQuery

CREATE [ OR REPLACE ] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition

s

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

AS sql_function_definition


참고: BigQuery SQL UDF에서 반환 데이터 유형은 선택사항입니다. 쿼리가 함수를 호출하면 BigQuery는 SQL 함수 본문을 통해 함수 결과 유형을 추론합니다.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS TABLE (col_name, col_data_type[,..])

AS sql_function_definition


CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: BigQuery SQL UDF에서 테이블 유형 반환은 현재 지원되지 않지만 제품 로드맵에 있으며 곧 제공될 예정입니다. 그러나 BigQuery는 STRUCT 유형의 ARRAY 반환을 지원합니다.

CREATE [SECURE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: Snowflake는 UDF 정의 및 세부정보를 승인된 사용자(즉, 뷰를 소유하는 역할을 부여받은 사용자)로 제한하는 보안 옵션을 제공합니다.

CREATE FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: 함수 보안은 BigQuery에서 구성 가능한 매개변수가 아닙니다. BigQuery는 기본 역할 및 함수 정의에 대한 액세스를 제한하는 IAM 역할 및 권한 만들기를 지원합니다.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: null 입력의 함수 동작은 BigQuery에서 암시적으로 처리되며 별도의 옵션으로 지정할 필요가 없습니다.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: 함수 변동성은 BigQuery에서 구성 가능한 매개변수가 아닙니다. 모든 BigQuery UDF 변동성은 Snowflake의 IMMUTABLE 변동성과 동일합니다. 즉, 데이터베이스 조회를 수행하지 않거나 인수 목록에 직접 포함되지 않은 정보를 사용하지 않습니다.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS [' | $$]

sql_function_definition

[' | $$]

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: BigQuery에서는 작은따옴표 또는 달러 기호($$)와 같은 문자 시퀀스 사용이 필요하지 않고 지원되지 않습니다. BigQuery는 SQL 표현식을 암시적으로 해석합니다.

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS sql_function_definition

CREATE [OR REPLACE] FUNCTION

function_name

([sql_arg_name sql_arg_data_type[,..]])

RETURNS data_type

AS sql_function_definition


참고: UDF에 주석 또는 설명을 추가하는 기능은 현재 BigQuery에서 지원되지 않습니다.

CREATE [OR REPLACE] FUNCTION function_name

(x integer, y integer)

RETURNS integer

AS $$

SELECT x + y

$$


참고: Snowflake는 SQL UDF의 ANY TYPE을 지원하지 않습니다. 하지만 VARIANT 데이터 유형을 사용할 수 있습니다.

CREATE [OR REPLACE] FUNCTION function_name

(x ANY TYPE, y ANY TYPE)

AS

SELECT x + y



참고: BigQuery는 ANY TYPE을 인수 유형으로 사용할 수 있습니다. 이 함수는 이 인수에 모든 유형의 입력을 허용합니다. 자세한 내용은 BigQuery의 템플릿 매개변수를 참조하세요.

BigQuery는 CREATE FUNCTION IF NOT EXISTS 문도 지원합니다. 이 문은 쿼리를 성공한 것으로 취급하고, 동일한 이름의 함수가 이미 있는 경우 조치를 취하지 않습니다.

BigQuery의 CREATE FUNCTION 문은 Snowflake에는 해당 항목이 없는 TEMPORARY or TEMP functions 만들기도 지원합니다. BigQuery 영구 UDF 실행에 대한 자세한 내용은 UDF 호출을 참조하세요.

DROP FUNCTION 구문

다음 표에서는 Snowflake와 BigQuery 간 DROP FUNCTION 구문의 차이점을 설명합니다.

Snowflake BigQuery

DROP FUNCTION [IF EXISTS]

function_name

([arg_data_type, ... ])

DROP FUNCTION [IF EXISTS] dataset_name.function_name


참고: BigQuery는 함수를 삭제하는 데 함수의 서명(인수 데이터 유형)을 사용할 필요가 없습니다.

BigQuery에서는 함수가 현재 프로젝트에 없는 경우 project_name을 지정해야 합니다.

추가 함수 명령어

이 섹션에서는 BigQuery에서 직접 사용할 수 없는 Snowflake에서 지원하는 추가 UDF 명령어를 다룹니다.

ALTER FUNCTION 구문

Snowflake에서는 ALTER FUNCTION 구문을 사용해 다음 작업을 지원합니다.

  • UDF 이름 변경
  • 보안 UDF로 변환(또는 되돌리기)
  • UDF 주석 추가, 덮어쓰기, 삭제

BigQuery에서는 함수 보안 구성 및 함수 주석 추가를 사용할 수 없으므로 ALTER FUNCTION 문법은 현재 지원되지 않습니다. 하지만 CREATE FUNCTION 문을 사용하여 동일한 함수 정의와 다른 이름으로 UDF를 만들 수 있습니다.

DESCRIBE FUNCTION 구문

Snowflake는 DESC[RIBE] FUNCTION 구문을 사용하여 UDF를 설명합니다. 이는 현재 BigQuery에서 지원되지 않습니다. 하지만 INFORMATION SCHEMA를 통해 UDF 메타데이터를 쿼리하는 기능은 제품 로드맵의 일부로 곧 제공될 예정입니다.

SHOW USER FUNCTIONS 구문

Snowflake에서 SHOW USER FUNCTIONS 구문을 사용하여 사용자에게 액세스 권한이 있는 모든 UDF를 나열할 수 있습니다. 이는 현재 BigQuery에서 지원되지 않습니다. 하지만 INFORMATION SCHEMA를 통해 UDF 메타데이터를 쿼리하는 기능은 제품 로드맵의 일부로 곧 제공될 예정입니다.

저장 프로시저

Snowflake 저장 프로시져는 JavaScript로 작성되며, JavaScript API를 호출하여 SQL 문을 실행할 수 있습니다. BigQuery에서 저장 프로시져는 SQL 문의 블록을 사용하여 정의됩니다.

CREATE PROCEDURE 구문

Snowflake에서 저장 프로시저는 CALL 명령어로 실행되는 반면 BigQuery에서는 저장 프로시저가 다른 BigQuery 함수처럼 실행됩니다.

다음 표에서는 Snowflake와 BigQuery 간 저장 프로시저 생성 구문의 차이점을 설명합니다.

Snowflake BigQuery

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS procedure_definition;


참고: Snowflake를 사용하려면 저장 프로시져가 단일 값을 반환해야 합니다. 따라서 반환 데이터 유형은 필수 옵션입니다.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_mode arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


arg_mode: IN | OUT | INOUT


참고: BigQuery는 저장 프로시저의 반환 유형을 지원하지 않습니다. 또한 전달된 각 인수에 인수 모드를 지정해야 합니다.

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

AS

$$

javascript_code

$$;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

statement_list

END;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[{CALLED ON NULL INPUT | {RETURNS NULL ON NULL INPUT | STRICT}}]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


참고: null 입력의 프로시저 동작은 BigQuery에서 암시적으로 처리되며 별도의 옵션으로 지정할 필요가 없습니다.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[VOLATILE | IMMUTABLE]

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


참고: 프로시저 변동성은 BigQuery에서 구성 가능한 매개변수가 아닙니다. Snowflake의 IMMUTABLE 변동성에 해당합니다.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[COMMENT = '<string_literal>']

AS procedure_definition;

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


참고: 프로시저 정의에 주석 또는 설명을 추가하는 기능은 현재 BigQuery에서 지원되지 않습니다.
CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

RETURNS data_type

[EXECUTE AS { CALLER | OWNER }]

AS procedure_definition;


참고: Snowflake에서는 실행 프로시저의 호출자 또는 소유자를 지정할 수 있습니다.

CREATE [OR REPLACE] PROCEDURE

procedure_name

([arg_name arg_data_type[,..]])

BEGIN

procedure_definition

END;


참고: BigQuery 저장 프로시저는 항상 호출자로 실행됩니다.

BigQuery는 CREATE PROCEDURE IF NOT EXISTS 문도 지원합니다. 이 문은 쿼리를 성공한 것으로 취급하고, 동일한 이름의 함수가 이미 있는 경우 조치를 취하지 않습니다.

DROP PROCEDURE 구문

다음 표에서는 Snowflake와 BigQuery 간 DROP FUNCTION 구문의 차이점을 설명합니다.

Snowflake BigQuery

DROP PROCEDURE [IF EXISTS]

procedure_name

([arg_data_type, ... ])

DROP PROCEDURE [IF EXISTS] dataset_name.procedure_name


참고: BigQuery는 프로시저를 삭제할 때 프로시저의 서명(인수 데이터 유형)을 사용할 필요가 없습니다.

BigQuery에서는 함수가 현재 프로젝트에 없는 경우 project_name을 지정해야 합니다.

추가 프로시저 명령어

Snowflake는 저장 프로시저를 관리하는 데 ALTER PROCEDURE, DESC[RIBE] PROCEDURE, SHOW PROCEDURES와 같은 추가 명령어를 제공합니다. 현재 BigQuery에서는 지원되지 않습니다.

메타데이터 및 트랜잭션 SQL 문

Snowflake BigQuery

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]; START_TRANSACTION [ name <name> ];

BigQuery는 항상 스냅샷 격리를 사용합니다. 자세한 내용은 이 문서의 다른 부분에서 일관성 보장을 참조하세요.

COMMIT;

BigQuery에는 사용되지 않습니다.

ROLLBACK;

BigQuery에는 사용되지 않습니다.

SHOW LOCKS [ IN ACCOUNT ]; SHOW TRANSACTIONS [ IN ACCOUNT ]; Note: If the user has the ACCOUNTADMIN role, the user can see locks/transactions for all users in the account.

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