从Snowflake查询PostgreSQL数据库

3

PostgreSQL 提供了通过 dblink 查询远程数据库的方式。

同样地(有点类似),Exasol 通过以下语法提供了连接到远程 Postgres 数据库的方法:

CREATE CONNECTION JDBC_PG
  TO 'jdbc:postgresql://...'
  IDENTIFIED BY '...';

SELECT * FROM (
  IMPORT FROM JDBC AT JDBC_PG
  STATEMENT 'SELECT * FROM MY_POSTGRES_TABLE;'
)

-- one can even write direct joins such as
SELECT
  t.COLUMN,
  r.other_column
FROM MY_EXASOL_TABLE t
LEFT JOIN (
  IMPORT FROM JDBC AT JDBC_PG
  STATEMENT 'SELECT key, other_column FROM MY_POSTGRES_TABLE'
) r ON r.key = t.KEY

通过直接导入数据从PostgreSQL到Exasol非常方便,无需使用临时文件(例如csv、pg_dump等)。

从Snowflake是否也可以实现同样的功能?也就是通过直接在线连接,从Snowflake查询远程PostgreSQL数据库。我在文档中没有发现任何提及此事的内容。


Snowflake不支持“数据库链接”。您可以尝试从PostgreSQL到Snowflake创建ODBC或JDBC驱动程序。 - Gokhan Atil
1
只是一个提醒...尽管人们喜欢在从一个数据源加载数据到Snowflake数据库时避免中间文件,但这是将数据导入Snowflake的最有效方式。不要试图避免这一步骤。 - Mike Walton
1
来自Exasol的MikeWalton,我可以轻松地从远程AWS服务器查询PostgreSQL表(如上面的示例所示),并将其包含在连接中(请参见编辑)。这种方法可以在几秒钟内获取数百万行数据(几个GB的数据),并实时执行连接,而无需任何中间文件。我不明白还有什么比这更有效率的方法了。 - Jivan
1
@Jivan 我误解了问题。我以为你想在不将数据丢到CSV的情况下将数据加载到Snowflake中? - Mike Walton
1
这实际上是其中一个用例,但比如说对于批量导入,我理解需要将其转储到S3上的Parquet文件中,这没有问题。然而,我希望像Snowflake这样昂贵的数据库系统至少允许直接查询外部数据库,这样我们就不必为此目的维护整个流水线,需要注意何时更新等。Snowflake非常昂贵,似乎不允许这样做,这很奇怪,也没有真正推动我们选择它进行评估。 - Jivan
1个回答

1

你是否考虑过使用外部函数?虽然这不完全符合你的需求(Snowflake目前还没有这个功能),但在某些情况下可以用作解决方法。例如,你可以在AWS Lambda上创建一个Python函数,查询PostgreSQL获取小量数据(由于Lambda限制),或者触发一个将数据导出到S3以触发Snowpipe进行批量导入的PostgreSQL进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接