在 Snowflake 中查看 PostgreSQL 数据

备注

使用 Snowflake Connector for PostgreSQL 需遵守 Connector 条款

连接器将数据复制到目标数据库,该数据库是在设置连接器并调用 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"

INTEGER 的数组

{1,2,3,5}

"{1,2,3,5}"

整数范围

[6,31)

"[6,31)"

自定义类型(2 个字段,INT4 和 TEXT)

(文本值,5432)

"(text value,5432)"

查看已删除列的数据

如果源表中删除了一列,则目标表中不会删除该列。相反,采用软删除的方法,列将会重命名为 <previous name>__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 正在进行的任务 中查看流程

语言: 中文