SQL変換リファレンス

TeradataからSnowflakeに移行する際に、変換されたコードがどのように見えるかを理解するためのガイドとしてこれを使用してください。SQL は方言間で同様の構文を持っていますが、各方言は新しい機能を拡張したり追加したりできます。

注釈

このページでは、SnowConvert で既に変換されている関数のみをリストしています。Teradataドキュメントの関数がここにリストされていない場合は、サポートされていないものとお考えください。

集計関数

Teradata

Snowflake

注意

AVG

AVG

CORR

CORR

COUNT

COUNT

COVAR_POP

COVAR_POP

COVAR_SAMP

COVAR_SAMP

GROUPING

GROUPING

KURTOSIS

KURTOSIS

MAXIMUM

MAX

MAX

MINIMUM

MIN

MIN

PIVOT

PIVOT

REGR_AVGX

REGR_AVGX

REGR_AVGY

REGR_AVGY

REGR_COUNT

REGR_COUNT

REGR_INTERCEPT

REGR_INTERCEPT

REGR_R2

REGR_R2

REGR_SLOPE

REGR_SLOPE

REGR_SXX

REGR_SXX

REGR_SXY

REGR_SXY

REGR_SYY

REGR_SYY

SKEW

SKEW

STDDEV_POP

STDDEV_POP

STDDEV_SAMP

STDDEV_SAMP

SUM

SUM

UNPIVOT

UNPIVOT

<p>複数関数によるピボット解除<br>はSnowflakeではサポートされていません</p>

VAR_POP

VAR_POP

VAR_SAMP

VAR_SAMP

集計関数​を参照してください

算術、三角、双曲線演算子/関数

Teradata

Snowflake

注意

ABS

ABS

CEILING

CEIL

DEGREES

DEGREES

EXP

EXP

FLOOR

FLOOR

HYPERBOLIC

ACOSH

ASINH

ATANH

COSH

SINH

TANH

HYPERBOLIC

ACOSH

ASINH

ATANH

COSH

SINH

TANH

LOG

LOG

LN

LN

MOD

MOD

NULLIFZERO(param)

CASE WHEN param=0 THEN null ELSE param END

POWER

POWER

RANDOM

RANDOM

RADIANS

RADIANS

ROUND

ROUND

SIGN

SIGN

SQRT

SQRT

TRUNC

TRUNC_UDF

TRIGONOMETRIC

ACOS

ASIN

ATAN

ATAN2

COS

SIN

TAN

TRIGONOMETRIC

ACOS

ASIN

ATAN

ATAN2

COS

SIN

TAN

ZEROIFNULL

ZEROIFNULL

算術、三角、双曲線演算子/関数 を参照してください​

属性関数

Teradata

Snowflake

注意

BIT_LENGTH

BIT_LENGTH

BYTE

BYTES

LENGTH

CHAR

CHARS

CHARACTERS

LEN

CHAR_LENGTH

CHARACTER_LENGTH

LEN

MCHARACTERS

LENGTH

OCTECT_LENGTH

OCTECT_LENGTH

属性関数 を参照してください

ビット/バイト操作関数

Teradata

Snowflake

注意

BITAND

BITAND

BITNOT

BITNOT

BITOR

BITOR

BITXOR

BITXOR

GETBIT

GETBIT

ビット/バイト関数 を参照してください

組み込み(システム関数)

Teradata

Snowflake

注意

ACCOUNT

CURRENT_ACCOUNT

CURRENT_DATE

CURDATE

CURRENT_DATE

CURRENT_ROLE

CURRENT_ROLE

CURRENT_TIME
CURTIME

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP

DATABASE

CURRENT_DATABASE

DATE

CURRENT_DATE

NOW

CURRENT_TIMESTAMP

PROFILE

CURRENT_ROLE

SESSION

CURRENT_SESSION

TIME

CURRENT_TIME

USER

CURRENT_USER

組み込み関数 を参照してください

ビジネスカレンダー

Teradata

Snowflake

注意

DAYNUMBER_OF_MONTH(DatetimeValue, 'COMPATIBLE')

DAYOFMONTH

DAYNUMBER_OF_MONTH(DatetimeValue, 'ISO')

DAYNUMBER_OF_MONTH_ISO_UDF

DAYNUMBER_OF_MONTH(DatetimeValue, 'TERADATA')

DAYOFMONTH

DAYNUMBER_OF_WEEK(DatetimeValue, 'ISO')

DAYOFWEEKISO

DAYNUMBER_OF_WEEK(DatetimeValue, 'COMPATIBLE')

DAY_OF_WEEK_COMPATIBLE_UDF

DAYNUMBER_OF_WEEK(DatetimeValue, 'TERADATA')
DAYNUMBER_OF_WEEK(DatetimeValue)

TD_DAY_OF_WEEK_UDF

DAYNUMBER_OF_YEAR(DatetimeValue, 'ISO')

PUBLIC.DAY_OF_YEAR_ISO_UDF

DAYNUMBER_OF_YEAR(DatetimeValue)

DAYOFYEAR

QUARTERNUMBER_OF_YEAR

QUARTER

TD_SUNDAY(DateTimeValue)

PREVIOUS_DAY(DateTimeValue, '日曜日')

WEEKNUMBER_OF_MONTH

WEEKNUMBER_OF_MONTH_UDF

WEEKNUMBER_OF_QUARTER(dateTimeValue)

WEEKNUMBER_OF_QUARTER_UDF

WEEKNUMBER_OF_QUARTER(dateTimeValue, 'ISO')

WEEKNUMBER_OF_QUARTER_ISO_UDF

WEEKNUMBER_OF_QUARTER(dateTimeValue, 'COMPATIBLE')

WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF

WEEKNUMBER_OF_YEAR(DateTimeValue, 'ISO')

WEEKISO

YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, 'COMPATIBLE')

YEAR

YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, 'ISO')

YEAROFWEEKISO

ビジネスカレンダー を参照してください

カレンダー関数

Teradata

Snowflake

注意

DAYNUMBER_OF_WEEK(DatetimeValue)

TD_DAY_OF_WEEK_UDF

DAYNUMBER_OF_WEEK(DatetimeValue, 'COMPATIBLE')

DAY_OF_WEEK_COMPATIBLE_UDF

QuarterNumber_Of_Year(DatetimeValue, 'ISO')

QUARTER_OF_YEAR_ISO_UDF(DatetimeValue)

TD_DAY_OF_CALENDAR

TD_DAY_OF_CALENDAR_UDF

TD_DAY_OF_MONTH
DAYOFMONTH

DAYOFMONTH

TD_DAY_OF_WEEK
DAYOFWEEK

TD_DAY_OF_WEEK_UDF

TD_DAY_OF_YEAR

DAYOFYEAR

TD_MONTH_OF_CALENDAR(DateTimeValue)
MONTH_CALENDAR(DateTimeValue)

TD_MONTH_OF_CALENDAR_UDF(DateTimeValue)

TD_WEEK_OF_CALENDAR(DateTimeValue)
WEEK_OF_CALENDAR(DateTimeValue)

TD_WEEK_OF_CALENDAR_UDF(DateTimeValue)

TD_WEEK_OF_YEAR

WEEK_OF_YEAR_UDF

TD_YEAR_BEGIN(DateTimeValue)

YEAR_BEGIN_UDF(DateTimeValue)

TD_YEAR_BEGIN(DateTimeValue, 'ISO')

YEAR_BEGIN_ISO_UDF(DateTimeValue)

TD_YEAR_END(DateTimeValue)

YEAR_END_UDF(DateTimeValue)

TD_YEAR_END(DateTimeValue, 'ISO')

YEAR_END_ISO_UDF(DateTimeValue)

WEEKNUMBER_OF_MONTH(DateTimeValue)

WEEKNUMBER_OF_MONTH_UDF(DateTimeValue)

WEEKNUMBER_OF_QUARTER(DateTimeValue)

WEEKNUMBER_OF_QUARTER_UDF(DateTimeValue)

WEEKNUMBER_OF_QUARTER(DateTimeValue, 'ISO')

WEEKNUMBER_OF_QUARTER_ISO_UDF(DateTimeValue)

WEEKNUMBER_OF_QUARTER(DateTimeValue, 'COMPATIBLE')

WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF(DateTimeValue)

WEEKNUMBER_OF_YEAR(DateTimeValue)

WEEK_OF_YEAR_UDF(DateTimeValue)

WEEKNUMBER_OF_YEAR(DateTimeValue, 'COMPATIBLE')

WEEK_OF_YEAR_COMPATIBLE_UDF(DateTimeValue)

カレンダー関数 を参照してください

ケース関数

Teradata

Snowflake

注意

COALESCE

COALESCE

NULLIF

NULLIF

ケース関数 を参照してください

比較関数

Teradata

Snowflake

注意

DECODE

DECODE

GREATEST

GREATEST

LEAST

LEAST

比較関数 を参照してください

データ型の変換

Teradata

Snowflake

注意

CAST

CAST

CAST(DatetimeValue AS INT)

DATE_TO_INT_UDF

CAST (VarcharValue AS INTERVAL)

INTERVAL_UDF

TRYCAST

TRY_CAST

FROM_BYTES

TO_NUMBER
TO_BINARY

ASCII パラメーターはSnowflakeではサポートされていません。

データ型変換 をご参照ください

データ型変換関数

Teradata

Snowflake

注意

TO_BYTES(Input, 'Base10')

INT2HEX_UDF(Input)

TO_NUMBER

TO_NUMBER

TO_CHAR

TO_CHAR または同等の式

TO_DATE

TO_DATE

TO_DATE(input, 'YYYYDDD')

JULIAN_TO_DATE_UDF

データ型変換関数 を参照してください

DateTime および間隔関数

Teradata

Snowflake

注意

ADD_MONTHS

ADD_MONTHS

EXTRACT

EXTRACT

LAST_DAY

LAST_DAY

MONTH

MONTH

MONTHS_BETWEEN

MONTHS_BETWEEN_UDF

NEXT_DAY

NEXT_DAY

OADD_MONTHS

ADD_MONTHS

ROUND(Numeric)

ROUND

ROUND(Date)

ROUND_DATE_UDF

TRUNC(Date)

TRUNC_UDF

YEAR

YEAR

DateTime と間隔関数と式 を参照してください

ハッシュ関数

Teradata

Snowflake

注意

HASH_MD5

MD5

HASHAMP

HASHBACKAM

HASHBUCKET

HASHROW

サポート対象外

TeradataとSnowflakeのアーキテクチャの違いに関するメモをチェックしてください

ハッシュ関数 を参照してください

JSON 関数

Teradata

Snowflake

注意

NEW JSON

TO_JSON(PARSE_JSON() )

JSON_CHECK

CHECK_JSON

JSON_CHECK をチェックしてください

JSON_TABLE

同等のクエリ

JSONExtract

JSONExtractValue
JSONExtractLargeValue

JSON_EXTRACT_UDF

JSON ドキュメント を参照してください

Nullハンドリング関数

Teradata

Snowflake

注意

NVL

NVL

NVL2

NVL2

Nullハンドリング関数 を参照してください

順序分析/ウィンドウ集計関数

Teradata

Snowflake

注意

CSUM(col1, col2)

SUM(col_1) OVER (PARTITION BY null ORDER BY col_2 ROWS UNBOUNDED PRECEDING)

CUME_DIST

CUME_DIST

DENSE_RANK

DENSE_RANK

FIRST_VALUE

FIRST_VALUE

LAG

LAG

LAST_VALUE

LAST_VALUE

LEAD

LEAD

MAVG(csales, 2, cdate, csales)

AVG(csales) OVER ( ORDER BY cdate, csales ROWS 1 PRECEDING)

MEDIAN

MEDIAN

MSUM(csales, 2, cdate, csales)

SUM(csales) OVER(ORDER BY cdate, csales ROWS 1 PRECEDING)

PERCENT_RANK

PERCENT_RANK

PERCENTILE_CONT

PERCENTILE_CONT

PERCENTILE_DISC

PERCENTILE_DISC

QUANTILE

QUANTILE

RANK

RANK

ROW_NUMBER

ROW_NUMBER

ウィンドウ関数 を参照してください

期間関数と演算子

Teradata

Snowflake

注意

BEGIN

PERIOD_BEGIN_UDF

END

PERIOD_END_UDF

INTERVAL

TIMESTAMPDIFF

LAST

PERIOD_LAST_UDF

LDIFF

PERIOD_LDIFF_UDF

OVERLAPS

PUBLIC.PERIOD_OVERLAPS_UDF

PERIOD

PERIOD_UDF

PERIOD(datetimeValue, UNTIL_CHANGED)

PERIOD(datetimeValue, UNTIL_CLOSED)

PERIOD_UDF(datetimeValue, '9999-12-31 23:59:59.999999')

RDIFF

PERIOD_RDIFF_UDF

期間関数と演算子 を参照してください

クエリバンド関数

Teradata

Snowflake

注意

GETQUERYBANDVALUE

GETQUERYBANDVALUE_UDF

クエリバンド関数 を参照してください

正規表現関数

Teradata

Snowflake

注意

REGEXP_INSTR

REGEXP_INSTR

REGEXP_REPLACE

REGEXP_REPLACE

REGEXP_SIMILAR

REGEXP_LIKE

REGEXP_SUBSTR

REGEXP_SUBSTR

正規表現関数 を参照してください

文字列演算子と関数

Teradata

Snowflake

注意

ASCII

ASCII

CHAR2HEXINT

CHAR2HEXINT_UDF

CHR

CHR/CHAR

CHAR_LENGTH

LEN

CONCAT

CONCAT

EDITDISTANCE

EDITDISTANCE

INDEX

CHARINDEX

INITCAP

INITCAP

INSTR

REGEXP_INSTR

INSTR(StringValue, StringValue ,NumericNegativeValue, NumericValue)

INSTR_UDF(StringValue, StringValue ,NumericNegativeValue, NumericValue)

LEFT

LEFT

LENGTH

LENGTH

LOWER

LOWER

LPAD

LPAD

LTRIM

LTRIM

OREPLACE

REPLACE

OTRANSLATE

TRANSLATE

POSITION

POSITION

REVERSE

REVERSE

RIGHT

RIGHT

RPAD

RPAD

RTRIM

RTRIM

SOUNDEX

SOUNDEX_P123

STRTOK

STRTOK

STRTOK_SPLIT_TO_TABLE

STRTOK_SPLIT_TO_TABLE

SUBSTRING

SUBSTR/SUBSTR_UDF

TRANSLATE_CHK

TRANSLATE_CHK_UDF

TRIM(LEADING '0' FROM aTABLE)

LTRIM(aTABLE, '0')

TRIM(TRAILING '0' FROM aTABLE)

RTRIM(aTABLE, '0')

TRIM(BOTH '0' FROM aTABLE)

TRIM(aTABLE, '0')

TRIM(CAST(numericValue AS FORMAT '999'))

LPAD(numericValue, 3, 0)

UPPER

UPPER

文字列演算子と関数 を参照してください​​​

St_Point関数

Teradata

Snowflake

注意

ST_SPHERICALDISTANCE

HAVERSINE
ST_DISTANCE

St_Point関数 をご参照ください

テーブル演算子

Teradata

Snowflake

注意

TD_UNPIVOT

同等のクエリ

テーブル演算子 を参照してください

XML 関数

Teradata

Snowflake

注意

XMLAGG

LISTAGG

XMLQUERY

サポート対象外

XML 関数 を参照してください

拡張性 UDFs

このセクションには、Teradataのシステム組み込み関数としては提供されていないが、 SnowConvert によって変換される UDFs およびその他の拡張関数が含まれています

Teradata

Snowflake

注意

CHKNUM

CHKNUM_UDF

この UDF ダウンロードページ をご覧ください

注意

TeradataとSnowflakeのアーキテクチャの違い

Teradataは、アクセスモジュールプロセッサー(AMP)によるシェアードナッシングアーキテクチャを採用しており、各 AMP が独自のディスクストレージのシェアを管理し、クエリ実行時にハッシュを通じてアクセスします。並列性を利用するためには、格納された情報を AMPs に均等に分散する必要があります。そのためにTeradataは、実際のプライマリインデックスがどの程度優れているかを判断するために使用できるハッシュ関連関数のグループを提供しています。

一方、Snowflakeのアーキテクチャは異なり、データの保存方法を独自に管理するため、ユーザーはデータ配布の最適化について心配する必要がありません。

終了境界定数(UNTIL_CHANGED および UNTIL_CLOSED)

UNTIL_CHANGED と UNTIL_CLOSED はどちらもTeradataの定数で、期間の未定義の終了境界を表します。内部的には、これらの定数はタイムスタンプが持ちうる最大値、つまり「9999-12-31 23:59:59.999999」として表現されます。PERIOD 関数の移行中に、終了境界が存在するかどうかがチェックされ、それがこれらの定数の1つであるかどうかが判断され、その場合は値「9999-12-31 23:59:59.999999」のvarcharに置き換えられます。その後、Snowflakeは、 PERIOD___UDF を呼び出すときに、開始境界のタイプに応じてvarcharを日付またはタイムスタンプにキャストします。

暗黙的な変換

INDEX や POSITION のようなTeradataの文字列関数の中には、文字列以外のデータ型を受け入れ、暗黙的に文字列に変換するものがあります。このため、TeradataとSnowflakeの間でこれらの関数の結果に矛盾が生じることがあります。例えば、以下のTeradataコードです。

SELECT INDEX(35, '5');
Copy

4を返しますが、Snowflakeでは CHARINDEX に相当するものは以下のようになります。

SELECT CHARINDEX('5', 35);
Copy

2を返します。これはTeradataが暗黙的な変換時に使用する独自の デフォルト形式 を持っているために起こります。上記の例では、Teradataは数値定数 35を BYTEINT と解釈し、文字列への暗黙の変換に BYTEINT デフォルト形式 '-999' を使用するため、変換後の値は ' 35' となります。一方、Snowflakeは独自の デフォルト形式 を使用するため、結果に矛盾が生じます。

これを解決するために、これらの関数のパラメーターに以下の変更を加えます。

  • パラメータに形式を持つキャストが ない 場合は、代わりに、SnowflakeのデフォルトのTeradata形式に相当するSnowflake TO_VARCHAR 関数が追加されます。

  • パラメーターが形式を持つキャストを持つ場合、その形式はSnowflakeの同等の形式に変換され、 TO_VARCHAR 関数が追加されます。

    • 余談ですが、Teradataは明示的に形式内に数値の符号を入れなければ無視しますが、Snowflakeは指定されていなくても常に空白を追加して符号を挿入するため、そのような場合は符号が指定されているかどうかをチェックし、指定されていない場合はSnowflakeの文字列から符号を削除します。

これらの変更後のコードは次のようになります。

SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
Copy

これはTeradataのコードと同じ4を返します。

既知の問題

問題は見つかりませんでした。