SnowConvert AI - Teradata - Teradataのセッションモード¶
Teradataセッションモードの説明¶
Teradataデータベースには、クエリを実行するためのさまざまなモードがあります: ANSI モード(ANSI SQL:2011仕様に基づくルール)と TERA モード(Teradataが定義したルール)。詳細情報については、以下の Teradataドキュメント を参照してください。
文字列情報テーブルのTeradataモード¶
文字列の場合、Teradataモードは異なる動作をします。Teradataのドキュメント に基づき、以下のテーブルで説明されています。
機能 |
ANSI モード |
Teradataモード |
|---|---|---|
文字比較のデフォルト属性 |
CASESPECIFIC |
NOT に CASESPECIFIC |
デフォルトの TRIM 動作 |
TRIM(BOTH FROM) |
TRIM(BOTH FROM) |
翻訳仕様概要¶
| Mode | Column constraint values | Teradata behavior | SC expected behavior |
|---|---|---|---|
| ANSI Mode | CASESPECIFIC | CASESPECIFIC | No constraint added. |
| NOT CASESPECIFIC | CASESPECIFIC | Add COLLATE 'en-cs' in column definition. | |
| Teradata Mode | CASESPECIFIC | CASESPECIFIC | In most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM( expression ) |
| NOT CASESPECIFIC | NOT CASESPECIFIC | In most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM(UPPER( expression )) |
利用可能な翻訳仕様オプション¶
文字列比較の ANSI モード - COLLATE¶
このセクションでは、COLLATE を使用した ANSI モードでの文字列の翻訳仕様を定義します。
説明¶
文字列比較と COLLATE 使用の ANSI モード¶
ANSI モードの文字列比較は、必要に応じて、COLLATE 制約を列またはステートメントに適用します。デフォルトのケース仕様トリム動作が考慮される場合があります。
Teradataでは、デフォルトのケース仕様は'CASESPECIFIC'であり、Snowflakeの'case-sensitive' と同じデフォルトであることに注意してください。 したがって、これらのケースは冗長になるため、COLLATE を使用して翻訳されることはありません。
サンプルソースパターン¶
セットアップデータ¶
Teradata¶
Snowflake¶
比較操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
ケース3: CAST NOT CASESPECIFIC 列を CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
注釈
COLLATE 'en-cs'は機能的等価性のために必要です。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
ケース5: CAST NOT CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
注釈
それには COLLATE が必要です。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
LIKE 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
ケース3: CAST NOT CASESPECIFIC 列を CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
IN 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
注釈
このケースには COLLATE(_ column_name_ , 'en-cs-rtrim') が必要です
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
注釈
このケースの場合、列には列制約がありませんが、Teradata ANSI モードのデフォルト制約は CASESPECIFIC です。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
ORDER BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
first_name |
|---|
GeorgE |
GEORGE |
GEORGE |
George |
John |
JOHN |
JOHN |
Marco |
Mary |
WIlle |
Snowflake¶
警告
FDM をご確認ください。_ 追加を保留中です。 _
クエリ¶
出力¶
first_name |
|---|
GeorgE |
George |
GEORGE |
GEORGE |
John |
JOHN |
JOHN |
Marco |
Mary |
WIlle |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
SalEs |
SaleS |
販売 |
salEs |
sales |
Snowflake¶
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
SalEs |
SaleS |
販売 |
salEs |
sales |
GROUP BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
警告
ケースや順序により出力が異なる場合があります。
注釈
RTRIM は選択された列で必要です。
クエリ¶
出力¶
first_name |
|---|
John |
Marco |
George |
GeorgE |
WIlle |
Mary |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
注釈
順序が異なる場合があります。
クエリ¶
出力¶
first_name |
|---|
Snow |
SNOW |
SnoW |
SnoW |
snow |
HAVING 句¶
HAVING 句は、以下のパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
Snowflake¶
クエリ¶
出力¶
CASE WHEN ステートメント¶
CASE WHEN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
Teradata¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
その他 |
|
Mary |
その他 |
|
GeorgE |
GLOBAL に SALES |
|
GEORGE |
その他 |
Snowflake¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
Mary |
その他 |
|
GEORGE |
その他 |
|
GEORGE |
その他 |
|
GeorgE |
GLOBAL に SALES |
JOIN 句¶
警告
評価操作による単純なシナリオをサポートします。
JOIN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
10 |
JOHN |
snow |
ファイナンス |
Snowflake¶
注釈
d.department_name は NOT CASESPECIFIC ですので、COLLATE が必要です。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
10 |
JOHN |
snow |
ファイナンス |
文字列比較の ANSI モード - NO COLLATE¶
このセクションでは、COLLATE を使用しない ANSI モードでの文字列の翻訳仕様を定義します。
説明¶
ANSI mode for string comparison and NO COLLATE usages.¶
COLLATE を使用しない ANSI モードの文字列比較では、必要に応じて RTRIM と UPPER が適用されます。デフォルトのケース仕様トリム動作が考慮されるため、Teradata ANSI モードで列がケース仕様を持っていない場合、Teradataはデフォルトとして CASESPECIFIC を持ちます。
サンプルソースパターン¶
セットアップデータ¶
Teradata¶
Snowflake¶
比較操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
ケース3: CAST NOT CASESPECIFIC 列を CASESPECIFIC にし、データベースモードが ANSI モード¶
警告
(CASESPECIFIC)はテーブル定義の列制約を上書きします。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
LIKE 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース3: CAST NOT CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
IN 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
ORDER BY 句¶
注釈
この機能的等価性は異なる可能性があることに注意してください。
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
SalEs |
SaleS |
販売 |
salEs |
sales |
Snowflake¶
注釈
FDM をご確認ください。データの挿入順序により順序が異なります。
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
SalEs |
SaleS |
販売 |
salEs |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
department |
|---|
ファイナンス |
人事 |
Information Technology |
販売 |
Snowflake¶
クエリ¶
出力¶
department |
|---|
ファイナンス |
人事 |
Information Technology |
販売 |
GROUP BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
John |
Marco |
GEORGE |
Snowflake¶
クエリ¶
出力¶
FIRST_NAME |
|---|
George |
John |
WIlle |
Marco |
Mary |
GEORGE |
GEORGE |
GeorgE |
JOHN |
JOHN |
ケース2: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
HAVING 句¶
HAVING 句は、以下のパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
Snowflake¶
クエリ¶
出力¶
CASE WHEN ステートメント¶
CASE WHEN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
Teradata¶
クエリ¶
出力¶
| first_name | last_name | department_full_name |
|---|---|---|
| GEORGE | Department Full Name | |
| Mary | GLOBAL SALES | |
| GeorgE | Other | |
| GEORGE | Department Full Name |
Snowflake¶
クエリ¶
出力¶
| first_name | last_name | department_full_name |
|---|---|---|
| GEORGE | Department Full Name | |
| Mary | GLOBAL SALES | |
| GeorgE | Other | |
| GEORGE | Department Full Name |
JOIN 句¶
警告
単純なシナリオがサポートされています。
JOIN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が CASESPECIFIC で、データベースモードが ANSI モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
10 |
JOHN |
snow |
ファイナンス |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
10 |
JOHN |
snow |
ファイナンス |
関連 EWIs¶
SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE
文字列比較の TERA モード - COLLATE¶
このセクションでは、COLLATE を使用したTeraモードでの文字列の翻訳仕様を定義します。
説明¶
文字列比較と COLLATE 使用のTeraモード¶
Teraモードの文字列比較は、必要に応じて、 COLLATE 制約を列またはステートメントに適用します。デフォルトのケース仕様トリム動作が考慮される場合があります。Teradataの TERA モードのデフォルトの大文字と小文字の指定は NOT CASESPECIFIC です。したがって、大文字と小文字の指定がない列は、 COLLATE('en-ci') の制約を持つことになります。
サンプルソースパターン¶
セットアップデータ¶
Teradata¶
Snowflake¶
比較操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
ケース3: CAST NOT CASESPECIFIC 列を CASESPECIFIC にし、データベースモードが TERA モード¶
注釈
以下のクエリに注目してください
SELECT * FROM employees WHERE first_name = 'JOHN ' (CASESPECIFIC)SELECT * FROM employees WHERE first_name (CASESPECIFIC) = 'JOHN '
は同じ値を返します。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
9 |
JOHN |
SnoW |
IT |
10 |
JOHN |
snow |
ファイナンス |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
9 |
JOHN |
SnoW |
IT |
10 |
JOHN |
snow |
ファイナンス |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが TERA モード¶
注釈
比較の左側の列への CAST が優先されます。
\ 例:
SELECT * FROM employees WHERE last_name (NOT CASESPECIFIC) = 'snoW';_では、 5行が返されます。 _SELECT * FROM employees WHERE last_name = 'snoW' (NOT CASESPECIFIC);では、このセットアップデータで 0行 が返されます。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
4 |
Marco |
SnoW |
EngineerinG |
10 |
JOHN |
snow |
ファイナンス |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
2 |
John |
SNOW |
エンジニアリング |
3 |
WIlle |
SNOW |
Human resources |
4 |
Marco |
SnoW |
EngineerinG |
10 |
JOHN |
snow |
ファイナンス |
LIKE 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース3: CAST NOT CASESPECIFIC 列を CASESPECIFIC にし、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
ケース4: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
IN 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が定義されておらず、データベースモードが TERA モード¶
注釈
Teraモードでは、大文字と小文字の指定が定義されていない場合、 NOT CASESPECIFIC を意味します。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
5 |
Mary |
SaleS |
|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
|
8 |
GeorgE |
SalEs |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
5 |
Mary |
SaleS |
|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
|
8 |
GeorgE |
SalEs |
ケース3: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
ORDER BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
| employee_id | first_name |
|---|---|
| 1 | George |
| 2 | John |
| 3 | WIlle |
| 4 | Marco |
| 5 | Mary |
| 6 | GEORGE |
| 7 | GEORGE |
| 8 | GeorgE |
| 9 | JOHN |
| 10 | JOHN |
Snowflake¶
クエリ¶
出力¶
| employee_id | first_name |
|---|---|
| 1 | George |
| 2 | John |
| 3 | WIlle |
| 4 | Marco |
| 5 | Mary |
| 6 | GEORGE |
| 7 | GEORGE |
| 8 | GeorgE |
| 9 | JOHN |
| 10 | JOHN |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
| employee_id | last_name |
|---|---|
| 1 | Snow |
| 2 | SNOW |
| 3 | SNOW |
| 4 | SnoW |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | SnoW |
| 10 | snow |
Snowflake¶
クエリ¶
出力¶
| employee_id | last_name |
|---|---|
| 1 | Snow |
| 2 | SNOW |
| 3 | SNOW |
| 4 | SnoW |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | SnoW |
| 10 | snow |
GROUP BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
警告
出力の大文字と小文字の指定は、選択した列数によって異なる場合があります。
クエリ¶
出力¶
first_name |
|---|
John |
Marco |
George |
GeorgE |
WIlle |
Mary |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
HAVING 句¶
HAVING 句は、以下のパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
注釈
出力の大文字と小文字の指定は、選択した列数によって異なる場合があります。これは GROUP BY 句にも関連しています。
クエリ¶
出力¶
| employee_id | first_name |
|---|---|
| 7 | GEORGE |
| 1 | George |
| 6 | GEORGE |
Snowflake¶
クエリ¶
出力¶
| employee_id | first_name |
|---|---|
| 7 | GEORGE |
| 1 | George |
| 6 | GEORGE |
CASE WHEN ステートメント¶
CASE WHEN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
Teradata¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
GLOBAL に SALES |
|
Mary |
その他 |
|
GeorgE |
その他 |
|
GEORGE |
GLOBAL に SALES |
Snowflake¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
GLOBAL に SALES |
|
Mary |
その他 |
|
GeorgE |
その他 |
|
GEORGE |
GLOBAL に SALES |
JOIN 句¶
警告
評価操作による単純なシナリオをサポートします。
JOIN ステートメントでは、以下で説明するパターンを使用します。
Evaluation of comparison operations.
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
3 |
WIlle |
SNOW |
人事 |
5 |
Mary |
販売 |
|
6 |
GEORGE |
販売 |
|
7 |
GEORGE |
販売 |
|
8 |
GeorgE |
販売 |
|
10 |
JOHN |
snow |
ファイナンス |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
販売 |
3 |
WIlle |
SNOW |
人事 |
5 |
Mary |
販売 |
|
6 |
GEORGE |
販売 |
|
7 |
GEORGE |
販売 |
|
8 |
GeorgE |
販売 |
|
10 |
JOHN |
snow |
ファイナンス |
関連 EWIs¶
SSC-EWI-TD0007: GROUP BY REQUIRED COLLATE FOR CASE INSENSITIVE COLUMNS
SC-FDM-TD0032 : [NOT] CASESPECIFIC CLAUSE WAS REMOVED
文字列比較の TERA モード - NO COLLATE¶
このセクションでは、COLLATE を使用しないTeraモードでの文字列の翻訳仕様を定義します。
説明¶
文字列比較と NO COLLATE 使用のTeraモード¶
COLLATE を使用しないTeraモードの文字列比較では、必要に応じて RTRIM と UPPER が適用されます。デフォルトのケース仕様トリム動作が考慮される場合があります。
サンプルソースパターン¶
セットアップデータ¶
Teradata¶
Snowflake¶
比較操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
この例では、 first_name 列であるため、 NOT CASESPECIFIC としてセットアップされた列の使用を示します。文字列 「GEorge」 を要求する場合でも、クエリの実行では大文字と小文字の指定が考慮されないため、Teradataで結果が取得されます。
Snowflakeでこのシナリオをエミュレートするために、2つの関数が実装されています。文字列では大文字と小文字の指定が確認されないため、このシナリオでは RTRIM(UPPER(string_evaluation))、 UPPER が必要です。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
この例では、列制約は CASESPECIFIC です。「Snow」が「SNOW」と等しくないため、この例ではTeradataの行を取得しません。
Snowflakeでは、大文字と小文字の指定が重要であるため、結果の移行は RTRIM 関数の使用のみを指します。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
エンジニアリング |
ケース3: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが TERA モード¶
Teradata¶
警告
(CASESPECIFIC)はテーブル定義の列制約を上書きします。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Snowflake¶
注釈
左側には RTRIM が必須で、右側には RTRIM が必須です。
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
ケース4: CAST NOT CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース5: 空白スペースのケース。列制約は NOT CASESPECIFIC、データベースモードは TERA モードで、等価演算を使用しています¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
5 |
Mary |
SaleS |
|
8 |
GeorgE |
SalEs |
|
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
5 |
Mary |
SaleS |
|
8 |
GeorgE |
SalEs |
|
6 |
GEORGE |
sales |
LIKE 操作¶
注釈
この操作は別の操作とは異なります。情報を取得するためには、空白スペースは同じ量でなければなりません。
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
この例では、大文字と小文字の指定は関係ないため、1行が表示されます。
注釈
Snowflakeでは、移行は ILIKE 操作を使用します。これは大文字と小文字を区別しない比較を実行します。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
first_name |
last_name |
department |
|---|---|---|
George |
Snow |
販売 |
Jonh |
Snow |
エンジニアリング |
Snowflake¶
クエリ¶
出力¶
first_name |
last_name |
department |
|---|---|---|
George |
Snow |
販売 |
Jonh |
Snow |
エンジニアリング |
ケース3: CAST CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース4: CAST NOT CASESPECIFIC 列を NOT CASESPECIFIC にし、データベースモードが ANSI モード¶
注釈
このケースは ILIKE に翻訳する必要があります。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
IN 操作¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
販売 |
6 |
GEORGE |
sales |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
この例では、Teradataデータベースでは大文字と小文字の指定が結果に関係するため、 UPPER 関数の使用は必要ありません。
Teradata¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
クエリ¶
出力¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
ORDER BY 句¶
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
危険
この出力順序は異なる可能性があることに注意してください。
Teradata¶
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
sales |
SalEs |
販売 |
SaleS |
salEs |
Snowflake¶
クエリ¶
出力¶
department |
|---|
EngineerinG |
エンジニアリング |
ファイナンス |
Human resources |
IT |
sales |
SalEs |
販売 |
SaleS |
salEs |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
危険
この出力は順序が異なる可能性があることに注意してください。
Teradata¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SNOW |
SnoW |
Snow |
snow |
GROUP BY 句¶
警告
この出力は異なる可能性があることに注意してください。 機能的等価性を保証するためには、 COLLATE 式を使用する必要があります。
詳細は SSC-EWI-TD0007 をご覧ください。
以下は、 collate を使用しない回避策です。
SELECT RTRIM(UPPER(first_name))
FROM employees
GROUP BY RTRIM(UPPER(first_name));
列動作について
危険
Snowflakeのデータ挿入についてご確認ください。Snowflakeでは、大文字と小文字の指定が列と明示的に結合されていないため、エラーを表示することなく'GEORGE'や'georges'のような値を挿入することができます。
以下のようなテーブルとデータがあるとします。
このサンプルでは、 NOT CASESPECIFIC 列に大文字と小文字の値を挿入することができないことに注意してください。これは、同じ値とみなされるからです。列は大文字と小文字の指定を管理しないため、'GEORGE'と'george'の値は同じ情報としてチェックされます。
以下の行は 重複行エラー とみなされます。
ケース1: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
クエリ¶
出力¶
first_name |
|---|
George |
John |
WIlle |
Marco |
Mary |
GEORGE |
GEORGE |
GeorgE |
JOHN |
JOHN |
ケース2: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
クエリ¶
出力¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
HAVING 句¶
HAVING 句は、以下のパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
last_name |
|---|
Snow |
Snowflake¶
クエリ¶
出力¶
last_name |
|---|
Snow |
CASE WHEN ステートメント¶
CASE WHEN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
Teradata¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
その他 |
|
JOHN |
SnoW |
その他 |
Mary |
その他 |
|
JOHN |
snow |
その他 |
WIlle |
SNOW |
GLOBAL COOL SALES |
George |
Snow |
その他 |
GeorgE |
その他 |
|
GEORGE |
その他 |
|
Marco |
SnoW |
Information Technology |
John |
SNOW |
Information Technology |
Snowflake¶
クエリ¶
出力¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
その他 |
|
JOHN |
SnoW |
その他 |
Mary |
その他 |
|
JOHN |
snow |
その他 |
WIlle |
SNOW |
GLOBAL COOL SALES |
George |
Snow |
その他 |
GeorgE |
その他 |
|
GEORGE |
その他 |
|
Marco |
SnoW |
Information Technology |
John |
SNOW |
Information Technology |
JOIN 句¶
警告
単純なシナリオがサポートされています。
JOIN ステートメントでは、以下で説明するパターンを使用します。
評価操作。
例:
=、!=、<、>。
LIKE 操作。
IN 操作。
評価操作への CAST。
LIKE 操作への CAST。
次のサンプルは、評価操作のパターンを示しています。
サンプル: 列制約が NOT CASESPECIFIC で、データベースモードが TERA モード¶
Teradata¶
クエリ¶
出力¶
| employee_id | first_name | last_name | department_name |
|---|---|---|---|
| 1 | George | Snow | Sales |
| 3 | WIlle | SNOW | Human Resources |
| 5 | Mary | Sales | |
| 6 | GEORGE | Sales | |
| 7 | GEORGE | Sales | |
| 8 | GeorgE | Sales | |
| 10 | JOHN | snow | Finance |
Snowflake¶
クエリ¶
出力¶
| employee_id | first_name | last_name | department_name |
|---|---|---|---|
| 1 | George | Snow | Sales |
| 3 | WIlle | SNOW | Human Resources |
| 5 | Mary | Sales | |
| 6 | GEORGE | Sales | |
| 7 | GEORGE | Sales | |
| 8 | GeorgE | Sales | |
| 10 | JOHN | snow | Finance |
既知の問題¶
モード固有の SQL ステートメント制限があります:
BEGIN TRANSACTION、END TRANSACTION、COMMIT [WORK]。Snowflakeでは、大文字と小文字の指定が列宣言に束縛されないため、データ挿入が異なる場合があります。
GROUP BYは順序が異なる場合がありますが、正しい値をグループ化します。ORDER BYはSnowflakeでは異なる動作をします。関数がソースコードから TRIM()を持っている場合、この回避策はソースコードに必要な関数を追加します。そのため、 RTRIM は TRIM()ソース関数に適用されます。
関連 EWIs¶
SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE