Snowflakeで PostgreSQL データを表示する¶
注釈
Snowflake Connector for PostgreSQL は コネクタ規約 に従います。
コネクタは、コネクタの設定時および PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>')
の呼び出し時に定義された宛先データベースにデータをレプリケートします。
データテーブルにはレプリケートされたデータが含まれており、次の場合に識別子 dest_db.schema_name.table_name
で使用できます。
dest_db
が宛先データベースの名前である。schema_name
が元の PostgreSQL テーブルが存在するスキーマ名である。table_name
が元の PostgreSQL テーブルの名前である。
注釈
dest_db
、 schema_name
、 table_name
の名前に大文字と小文字が混在する場合は、二重引用符で囲む必要があります。
レプリケートされたテーブルには、次の追加のメタデータ列が含まれます。
列名 |
データ型 |
説明 |
---|---|---|
|
TIMESTAMP_NTZ |
行が宛先テーブルに挿入されたときのタイムスタンプ(UTC)。 |
|
TIMESTAMP_NTZ |
宛先テーブルで行が最後に更新されたときのタイムスタンプ(UTC)。 |
|
BOOLEAN |
行がソーステーブルから削除されている場合、値は |
レプリケートされたデータ型は、Snowflake型と一致するようにマップされます。詳細については、 PostgreSQL からSnowflakeへのデータ型マッピング をご参照ください。
レプリケートされたデータのアクセス制御¶
レプリケートされたデータへのアクセスを制御するには、 DATA_READER
アプリケーションロールを使用します。コネクタアプリケーションロールの詳細: Snowflake Connector for PostgreSQL でのアプリケーションロール 特定の宛先オブジェクトをより細かく制御するには、 ACCOUNTADMIN
ロールを使用して適切な権限を付与するか、データベースロールを作成します。
PostgreSQL からSnowflakeへのデータ型マッピング¶
Snowflakeでは、レプリケートされたテーブルの列名は大文字で表記され、型はSnowflake型と一致するようにマッピングされます。
次の表は、 PostgreSQL からSnowflake型へのマッピングを示しています。
PostgreSQL 型 |
Snowflake型 |
メモ |
---|---|---|
BIGINT / INT8 |
INT |
|
BIGSERIAL / SERIAL8 |
INT |
|
BIT [(N)] |
VARCHAR |
|
BIT VARYING [(N)] / VARBIT [(n)] |
VARCHAR |
|
BOOLEAN / BOOL |
BOOLEAN |
|
BOX |
VARCHAR |
|
BYTEA |
BINARY(N) |
Snowflakeの最大データポイントサイズ(16MB)までサポートされます。最大長1 GB。 |
CHARACTER [(N)] / CHAR [(N)] |
VARCHAR [N] |
最大長10485760 ~= 10 MB |
CHARACTER VARYING [(N)] / VARCHAR [(N)] |
VARCHAR [N] |
最大長10485760 ~= 10 MB |
CIDR |
VARCHAR |
|
CIRCLE |
VARCHAR |
|
DATE |
DATE |
|
DOUBLE PRECISION / FLOAT8 |
FLOAT |
|
INET |
VARCHAR |
|
INTEGER / INT / INT4 |
INT |
|
INTERVAL [FIELDS][(P)] |
VARCHAR |
|
JSON |
VARIANT |
Snowflakeの最大データポイントサイズ(16MB)までサポートされます。 |
JSONB |
VARIANT |
Snowflakeの最大データポイントサイズ(16MB)までサポートされます。 |
LINE |
VARCHAR |
|
LSEG |
VARCHAR |
|
MACADDR |
VARCHAR |
|
MACADDR8 |
VARCHAR |
|
MONEY |
VARIANT |
|
NUMERIC [(P, S)] / DECIMAL [(P, S)] |
DECIMAL(P, S) |
スケールと精度も、Snowflakeの制限を維持しながらSnowflake側で再現されます。 |
PATH |
VARCHAR |
|
PG_LNS |
VARCHAR |
|
POINT |
VARCHAR |
|
POLYGON |
VARCHAR |
|
REAL / FLOAT4 |
FLOAT |
|
SMALLINT / INT2 |
INT |
|
SMALLSERIAL / SERIAL2 |
INT |
|
SERIAL / SERIAL4 |
INT |
|
TEXT |
VARCHAR |
|
TIME [(P)] [ タイムゾーンなし ] |
TIME |
|
TIME [(P)] タイムゾーンあり |
TIME |
|
TIMESTAMP [(P)] [ タイムゾーンなし ] |
DATETIME / TIMESTAMP_NTZ |
|
TIMESTAMP [(P)] タイムゾーンあり |
TIMESTAMP_TZ |
|
TSQUERY |
VARCHAR |
|
TSVECTOR |
VARCHAR |
|
UUID |
VARCHAR |
|
XML |
VARCHAR |
配列、 ENUMs、カスタム型、範囲を含む他のすべての型は、Snowflakeでは VARCHAR 値にマッピングされます。次の表は、上記の表で明示されていない型がどのように処理されるかを示しています。
PostgreSQL 型 |
PostgreSQL のデータ |
Snowflakeの列 |
---|---|---|
ENUM |
monday |
"monday" |
INTEGER の配列 |
{1,2,3,5} |
"{1,2,3,5}" |
範囲 |
[6,31) |
"[6,31)" |
カスタム型(INT4 と TEXT の2つのフィールド) |
(text value,5432) |
"(text value,5432)" |
削除された列のデータを表示する¶
ソーステーブルで列が削除されても、宛先テーブルでは削除されません。代わりに、ソフトデリート方式が採用され、列名は <以前の名前>__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 PostgreSQL の進行中のタスク のプロセスを確認してください。