Snowflakeで MySQL データを表示する

注釈

Snowflake Connector for MySQL は コネクタ規約 に従います。

コネクタは、コネクタの設定時および PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>') の呼び出し時に定義された宛先データベースにデータをレプリケートします。

データテーブルにはレプリケートされたデータが含まれており、次の場合に識別子 dest_db.schema_name.table_name で使用できます。

  • dest_db が宛先データベースの名前である。

  • schema_name が元の MySQL テーブルが存在するスキーマ名である。

  • table_name が元の MySQL テーブルの名前である。

注釈

dest_dbschema_nametable_name の名前に大文字と小文字が混在する場合は、二重引用符で囲む必要があります。

レプリケートされたテーブルには、次の追加のメタデータ列が含まれます。

列名

データ型

説明

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

行が宛先テーブルに挿入されたときのタイムスタンプ(UTC)。

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

宛先テーブルで行が最後に更新されたときのタイムスタンプ(UTC)。

_SNOWFLAKE_DELETED

BOOLEAN

行がソーステーブルから削除されている場合、値は true になります。

レプリケートされたデータ型は、Snowflake型と一致するようにマップされます。詳細については、 MySQL からSnowflakeへのデータ型マッピング をご参照ください。

レプリケートされたデータのアクセス制御

レプリケートされたデータへのアクセスを制御するには、 DATA_READER アプリケーションロールを使用します。コネクタアプリケーションロールの詳細: Snowflake Connector for MySQL でのアプリケーションロール 特定の宛先オブジェクトをより細かく制御するには、 ACCOUNTADMIN ロールを使用して適切な権限を付与するか、データベースロールを作成します。

MySQL からSnowflakeへのデータ型マッピング

Snowflakeでは、レプリケートされたテーブルの列名は大文字で表記され、型はSnowflake型と一致するようにマッピングされます。

次の表は、コネクタのデータ型がSnowflake型にどのようにマッピングされるかを示しています。

MySQL 型

Snowflake型

メモ

DECIMAL / NUMERIC

NUMBER

MySQL の DECIMAL 形式の最大桁数は65です。Snowflakeの場合、最大値は38です。

Snowflakeで許可されている最大桁数までサポートされます。これを超えると精度が失われます。詳細については、 数値データ型 をご参照ください。

INT / INTEGER

INT

TINYINT / BOOL

INT

SMALLINT

INT

MEDIUMINT

INT

BIGINT

INT

YEAR

INT

FLOAT

FLOAT

DOUBLE

FLOAT

VARCHAR

VARCHAR

TINYTEXT

VARCHAR

TEXT

VARCHAR

ENUM

VARCHAR

文字列として保存されます。たとえば、 ENUM('one', 'two')の場合、可能な値は'one', 'two'です。

SET

VARCHAR

列宣言順にカンマ結合された文字列として保存されます。たとえば、 SET('one', 'two')の場合、可能な値は' ', 'one', 'two', 'one,two'です。

MEDIUMTEXT

VARCHAR

Snowflakeの最大エントリサイズ(16MB)までサポートされます。

LONGTEXT

VARCHAR

Snowflakeの最大エントリサイズ(16MB)までサポートされます。

CHAR

VARCHAR

後続のスペースなしでSnowflakeに送信されます。

BIT

VARCHAR

16進数で表されます。例: '83060c183060c183'。

DATE

DATE

ターゲットテーブルに文字列として保存されます(例: '1971-01-31')。フラット化されたビューでは、日付は DATE に変換されます。

DATETIME

DATETIME / TIMESTAMP_NTZ

TIMESTAMP

TIMESTAMP_TZ

ターゲットテーブルに UTC で文字列として保存されます(例: '2000-12-30 23:59:59.001009+00:00')。フラット化されたビューでは、タイムスタンプは TIMESTAMP_TZ に変換されます。

TIME

TIME

ターゲットテーブルに文字列として保存されます(例: '23:59:59')。フラット化されたビューでは、時間の値は TIME に変換されます。

BINARY

BINARY

MEDIUMBLOB

BINARY

Snowflakeの最大エントリサイズ(16MB)までサポートされます。

LONGBLOB

BINARY

Snowflakeの最大エントリサイズ(16MB)までサポートされます。

BLOB

BINARY

VARBINARY

BINARY

TINYBLOB

BINARY

JSON

VARIANT

JSON は完全なドキュメントとして、または部分的な更新として MySQL BinLog に保存できます。デフォルトでは、完全なドキュメントとして保存されます。部分的な更新は現在サポートされていません。

JSONs は文字列としてSnowflakeに送信されますが、Snowpipe Streamingはそれらを VARIANT データ型に変換し、 ARRAY、 OBJECT などとして内部に保存します。

Snowflakeの最大エントリサイズ(16MB)までサポートされます。

削除された列のデータを表示する

ソーステーブルで列が削除されても、宛先テーブルでは削除されません。代わりに、ソフトデリート方式が採用され、列名は <以前の名前>__SNOWFLAKE_DELETED に変更されます。この処理により、過去の値をクエリできるようになります。

たとえば、列 A が削除された場合、宛先テーブルでは列名が A__SNOWFLAKE_DELETED に変更され、次のようにクエリできます。

SELECT A__SNOWFLAKE_DELETED FROM <TABLE_NAME>;
Copy

名前を変更した列のデータを表示する

列の名前を変更することは、列を削除して新しい名前で新しい列を作成する操作と同じです。削除は、前のセクションで説明したソフトデリート方式に従います。

たとえば、列 A の名前が B に変更された場合、宛先テーブルでは A の名前が A__SNOWFLAKE_DELETED に変更され、新しい列 B が追加されます。変更前に存在したすべての行は、 A__SNOWFLAKE_DELETED 列の値を保持し、変更後に追加された新しい行は、 B 列の値を保持します。名前を変更した列の値は、簡単なクエリを使用して単一の列として表示できます。

SELECT
     CASE WHEN B IS NULL THEN A__SNOWFLAKE_DELETED ELSE B END AS A_RENAMED_TO_B
FROM <TABLE_WITH_RENAMED_COLUMN>;
Copy

列の名前を変更した後の使用を簡素化するためにビューを作成できます。

次のステップ

これらの手順を完了したら、 Snowflake Connector for MySQL の進行中のタスク のプロセスを確認してください。