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_dbschema_nametable_name の名前に大文字と小文字が混在する場合は、二重引用符で囲む必要があります。

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

列名

データ型

説明

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

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

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

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

_SNOWFLAKE_DELETED

BOOLEAN

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

レプリケートされたデータ型は、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>;
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 PostgreSQL の進行中のタスク のプロセスを確認してください。