SnowConvert AI - Oracle - SQLステートメント¶
この文書では、SQL構文におけるすべての類似点、相違点、そしてSnowConvert AIがこれらのSQL構文をどのように機能的なSnowflake SQL構文に変換するかについて詳述します。
テーブルを変更¶
このセクションでは、ALTER TABLEに関連する変換を紹介します。
注釈
わかりやすくするため、出力コードの一部を省略しています。
1.説明¶
パーティショニングされていないテーブル、パーティショニングされたテーブル、テーブルパーティション、テーブルサブパーティションの定義を変更するには、 ALTER TABLE ステートメントを使用します。オブジェクトテーブルやオブジェクト列を持つリレーショナルテーブルの場合、ALTER TABLE を使用して、型が変更された後に参照される型の最新の定義にテーブルを変換します(Oracleドキュメント)。
Oracle構文
注釈
Snowflakeの構文を確認するには、以下の ドキュメント を参照してください。
2.サンプルソースパターン¶
2.1.句によるテーブルの変更¶
警告
memoptimize_read_clause、 memoptimize_read_clause はSnowflakeでは適用できないため削除されます。
Oracle¶
Snowflake¶
注釈
Snowflakeでは、 column_clausesとconstraint_clauses の一部のみが適用可能です。Oracleのテーブル変更では、作成されたパーティションからプロパティを変更できますが、Snowflakeではこれらのアクションは必要ありません
2.2.サポートされていないケースでのテーブルの変更¶
Oracle¶
Snowflake¶
2.3.ADD CONSTRAINT アクション¶
ADD CONSTRAINT アクションはSnowflakeで同等の機能を持っていますが、ALTER TABLE ステートメントごとに1つの制約しか追加できないため、ステートメントに2つ以上の制約が含まれる場合はコメントされます。
警告
enable_disable_clause は、Snowflakeでは関係ないため削除されます。
Oracle¶
Snowflake¶
既知の問題¶
テーブルのプロパティによっては、適応されるもの、または適用できないものがあります。
データベースリンクの作成¶
警告
現在、_ データベースリンクの作成 _ ステートメントは変換されていませんが、解析されています。また、ソースコードに データベースリンクの作成 ステートメントがある場合、それらは _ 評価レポート _ に記載されます。
ソースコードの例¶
Snowflakeの出力¶
データベースリンクリファレンス¶
入力コードでデータベースリンクのオブジェクトを使用した場合、出力コードではこれらのオブジェクトの名前は保持されますが、それらが使用しているデータベースリンクの名前は削除されます。
ソースコードの例¶
Snowflakeの出力¶
関連 EWIs¶
SSC-EWI-OR0123 :DBリンク接続はサポートされていません。
SSC-FDM-0007 :依存関係が欠落している要素。
テーブルを削除¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
テーブルを削除するには、テーブルの削除ステートメントを使用します。このステートメントは、Oracle と Snowflake で少し異なります。相違点の詳細については、各ドキュメントを再確認してください。
Oracleでは、テーブルの削除の構文は次のようになります。
Snowflakeでは、テーブルの削除の構文は次のようになります。
主な違いは、テーブルがシステムから永久に削除されないため、Snowflakeには PURGE 句のイコールがないことです。ただし、CASCADE CONSTRAINTS と CASCADE 句は 同じです。どちらも、このテーブルを参照する外部キーが存在しても、テーブルを削除します。
例¶
それでは、コードの例と、変換後のコードを見てみましょう。各例では、テーブルの削除ステートメントの異なるバリエーションを使用しています。
例1:¶
この例では、 テーブルの削除 ステートメントをできるだけシンプルに使用しています。
入力コード:
変換後のコード:
例2:¶
この例では、 テーブルの削除 ステートメントと PURGE 句を使用しています。Snowflakeには、テーブルの削除ステートメント内の PURGE 句に相当するものがないことを覚えておいてください。
入力コード:
変換後のコード:
例3:¶
この例では、 テーブルの削除 ステートメントと CASCADE CONSTRAINTS 句を使用しています。
入力コード:
変換後のコード:
変換後のコードでは、CASCADE CONSTRAINTS 句から CONSTRAINTS の単語が削除されています。
例4:¶
この例では、 テーブルの削除 ステートメントと、CASCADE CONSTRAINTS および PURGE 句を使用しています。
入力コード:
変換後のコード:
ご覧のように、コードが変わります。新しいSnowflakeコードでは、PURGE 句が削除され、CASCADE 句から CONSTRAINTS の単語も削除されています。
機能的等価性¶
機能的に同等であるかどうかを確認するには、次のコードを実行します。同等でない唯一の部分は PURGE 句であることに注意してください。Oracleでは、この句によってシステムからテーブルが完全に削除され、Snowflakeには同等のものが存在しません。どちらの場合も、テーブルが他のテーブルで参照されていても、そのテーブルは削除されます。
Oracle:
Snowflake:
関連 EWIs¶
関連 EWIs はありません。
インデックスの作成¶
警告
現在、_ Create Index _ ステートメントは変換されていませんが、解析されています。また、ソースコードにCreate index ステートメントがある場合、_ Assessment Report _ ではこれらも考慮されます。
インデックスの作成 を解析したコードの例:¶
注釈
アーキテクチャ上の理由により、Snowflakeはインデックスをサポートしていないため、SnowConvert AIはインデックスの作成に関連するすべてのコードを削除します。Snowflakeは、各テーブルに、DML操作のパフォーマンスを高速化するマイクロパーティションを自動的に作成します。ユーザーはこれらのマイクロパーティションの作成や管理を心配する必要はありません。
通常、これだけで非常に優れたクエリパフォーマンスが得られます。しかし、データクラスタリングキーを作成することで改善する方法があります。Snowflakeの公式ページ には、マイクロパーティションとデータクラスタリングに関する詳細情報が掲載されています。
シーケンスを作成¶
まずはコード例と、変換後のコードを見てみましょう。
Oracle:¶
Snowflake:¶
The first change that it is done is to apply the schema or datawarehouse to the name of the sequence. The second transformation consists in removing some elements and add them as comments, since oracle has some elements in the create sequence that are not supported in Snowflake.
Oracleでは、シーケンス名の後に、NOT コメントされる要素は以下の通りです
START WITH 1000
INCREMENT BY 1
これらの要素でない場合は、コメントされ、例のように作成シーケンスの直前に警告として追加されます。
削除されるのは以下の要素です
MAXVALUE
NOMAXVALUE
MINVALUE
NOMINVALUE
CYCLE
NOCYCLE
CACHE
NOCACHE
ORDER
NOORDER
KEEP
NOKEEP
SESSION
GLOBAL
SCALE
EXTEND
SCALE
NOEXTEND
NOSCALE
SHARD
EXTEND
SHARD
NOEXTEND
NOSHARD
SEQUENCE EXPRESSIONS¶
NEXTVAL:Snowflakeの文法はOracleの文法と同じです。
CURRVAL: Snowflake does not have an equivalent so it is transformed to a stub function. Check this link to understand Snowflake's approach.
Oracle:¶
Snowflake:¶
シーケンス START WITH¶
START WITH ステートメントの値は、Snowflakeが許容する最大値を超える場合があります。Snowflakeが開始値について述べていることは次の通りです: シーケンスによって返される最初の値を指定します。サポートされる値は、64ビットの2の補数整数(-2^63 から 2^63-1) で表現できる値です。従って、先に述べたところによると、許容される最大値は、正の数の場合は 9223372036854775807 で、負の数の場合は 9223372036854775808 となります。
コード例¶
Oracle:¶
Snowflake:¶
関連 EWIs¶
SSC-EWI-OR0069 :シーケンスCURRVALプロパティはSnowflakeではサポートされていません。
SSC-EWI-OR0068 :シーケンス開始値がSnowflakeで許容される最大値を超えています。
セッションを変更¶
セッションを変更¶
セッションの変更はSnowflakeで同等の機能を持っており、いくつかの変数はSnowflake変数にマッピングされています。セッションの変更の順列がサポートされていない場合、そのノードはコメントされ、警告が追加されます。
Oracle:¶
Snowflake:¶
セッションパラメーターリファレンス¶
注釈
テーブルに表示されていないセッションパラメーターは、現在変換されていません。
セッションパラメーター |
Snowflake変換 |
|---|---|
NLS_DATE_FORMAT |
DATE_INPUT_FORMAT および DATE_OUTPUT_FORMAT |
NLS_NUMERIC_CHARACTERS |
NOT SUPPORTED |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
同義語の作成¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
同義語の作成¶
同義語はSnowflakeではサポートされていません。同義語への参照は、元のオブジェクトに対して変更されます。
Oracle:¶
Snowflake:¶
例1:テーブルを指す同義語。¶
Oracleのソースコード:
Snowflakeが移行したコード: SELECT は元々同義語を参照していましたが、現在は同義語を指すテーブルを参照していることがわかります。
例2他の同義語を指す同義語。¶
Oracleのソースコード:
Snowflakeが移行したコード:元々、 SELECT 、 UPDATE 、 INSERT は同義語を指していましたが、現在はテーブルであるアトミックオブジェクトを指していることがわかります。
例3 :ビューを指す同義語¶
Oracleソースコード
Snowflakeが移行したコード: SELECT は元々同義語を指していましたが、現在はビューであるアトミックオブジェクトを指していることがわかります。
関連 EWIs¶
SSC-FDM-0001: 単一のテーブルからすべての列を選択するビューはSnowflakeでは必要ありません。
SSC-FDM-0006 :数値型の列はSnowflakeでは同様の動作をしない場合があります。
SSC-FDM-OR0005 :同義語はSnowflakeではサポートされていませんが、この同義語への参照は元のオブジェクト名で変更されました。