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 |
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') |
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 |
|
TD_DAY_OF_WEEK |
TD_DAY_OF_WEEK_UDF |
|
TD_DAY_OF_YEAR |
DAYOFYEAR |
|
TD_MONTH_OF_CALENDAR(DateTimeValue) |
TD_MONTH_OF_CALENDAR_UDF(DateTimeValue) |
|
TD_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 |
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 |
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_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_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');
4を返しますが、Snowflakeでは CHARINDEX に相当するものは以下のようになります。
SELECT CHARINDEX('5', 35);
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'));
これはTeradataのコードと同じ4を返します。
既知の問題¶
問題は見つかりませんでした。