SnowConvert AI - Vertica - VerticaとSnowflakeの識別子の違い

引用符で囲まれている識別子

Verticaでは、引用符で囲まれた識別子は 大文字と小文字の区別のルール に従います。つまり、たとえば列名は引用符で囲まれても大文字と小文字は区別されません。したがって、識別子 "ABC""ABc" および "aBc" は、 ABCABc および aBc と同義です。

Vertica

CREATE TABLE test.quotedIdentTable
(
  "col#1" INTEGER
);

SELECT "col#1" FROM test.quotedIdentTable;

SELECT "COL#1" FROM test.quotedIdentTable;
Copy

Snowflakeでは、引用符で囲まれた識別子の大文字と小文字の区別はセッションパラメーター QUOTED_IDENTIFIERS_IGNORE_CASE に依存します。デフォルトでは、引用符で囲まれた識別子の比較で大文字と小文字が区別されます。つまり、上記の例を移行した場合の結果コードは次のようになります。

Snowflake

CREATE TABLE test.quotedIdentTable
(
  "col#1" INTEGER
);

SELECT
  "col#1"
FROM
  test.quotedIdentTable;

SELECT
  "COL#1"
FROM
  test.quotedIdentTable;
Copy

セッションパラメーターが TRUE に設定されていない限り、2番目の選択を実行すると失敗します。

SnowConvert AI が引用符付き識別子を移行する方法

SnowConvert AI は引用符で囲まれた識別子を分析し、英数字以外の文字が含まれているか、Snowflakeの予約語であるかどうかを判断します。含まれている場合、 SnowConvert AI はそれらをそのままにし、英数字の識別子は引用符で囲まれません。

Vertica

CREATE TABLE test.identsTable1
(
  "col#1" INTEGER,
  "col2" INTEGER
);

-- Group is a reserved word
SELECT 
"col#1" AS "group",
"col2" AS "hello"
FROM
test.identsTable1;
Copy

Snowflake

CREATE TABLE test.identsTable1
(
  "col#1" INTEGER,
  col2 INTEGER
);

-- Group is a reserved word
SELECT
  "col#1" AS "group",
  col2 AS hello
FROM
  test.identsTable1;
Copy