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_db
、 schema_name
、 table_name
の名前に大文字と小文字が混在する場合は、二重引用符で囲む必要があります。
レプリケートされたテーブルには、次の追加のメタデータ列が含まれます。
列名 |
データ型 |
説明 |
---|---|---|
|
TIMESTAMP_NTZ |
行が宛先テーブルに挿入されたときのタイムスタンプ(UTC)。 |
|
TIMESTAMP_NTZ |
宛先テーブルで行が最後に更新されたときのタイムスタンプ(UTC)。 |
|
BOOLEAN |
行がソーステーブルから削除されている場合、値は |
レプリケートされたデータ型は、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です。
|
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>;
名前を変更した列のデータを表示する¶
列の名前を変更することは、列を削除して新しい名前で新しい列を作成する操作と同じです。削除は、前のセクションで説明したソフトデリート方式に従います。
たとえば、列 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>;
列の名前を変更した後の使用を簡素化するためにビューを作成できます。
次のステップ¶
これらの手順を完了したら、 Snowflake Connector for MySQL の進行中のタスク のプロセスを確認してください。