【问题标题】:Querying a PostgreSQL database from Snowflake从 Snowflake 查询 PostgreSQL 数据库
【发布时间】:2020-05-16 16:27:59
【问题描述】:

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 驱动程序。
  • 请注意...尽管人们喜欢在将数据从一个源加载到 Snowflake 数据库时避免使用中间文件,但这是将数据导入 Snowflake 的最有效方式。不要试图避免这一步。
  • @MikeWalton 来自 Exasol,我可以从远程 AWS 服务器无缝查询 PostgreSQL 表(如我上面的示例所示)并将其包含到连接中(参见编辑)。此方法在几秒钟内获取数百万行(几 Gigs 的数据)并实时执行连接,无需任何中间文件。我看不出有什么办法比这更有效率。
  • @Jivan 我误解了这个问题。我以为您是在尝试将数据加载到 Snowflake 中而不将数据放到 CSV 中?
  • 这实际上是用例之一,但是对于批量导入,我理解需要将其转储到 s3 上的镶木地板文件中,这没有问题。但是,我希望像 Snowflake 这样昂贵的数据库系统至少允许以直接方式查询外部数据库,这样我们就不必为了这个目的而维护整个管道,而不必照顾何时更新等。Snowflake 非常昂贵,似乎不允许这样做,这很奇怪,并没有真正推动我们在评估中选择它。

标签: postgresql snowflake-cloud-data-platform


【解决方案1】:

您是否考虑过使用external functions?这并不完全是您正在寻找的东西(Snowflake 还没有该功能),但它可以在某些用例中用作解决方法。例如,您可以在 AWS Lambda 上创建一个 Python 函数来查询 PostgreSQL 的少量数据(由于 Lambda 限制),或者让它触发一个 PostgreSQL 进程转储到 S3 以触发 Snowpipe 以进行批量导入用例。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2016-02-21
    • 2015-04-01
    • 2021-10-13
    • 2015-01-25
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多