使用 Snowflake+DBT 时随机发生无效的 JWT 令牌

Mar*_*Roy 7 snowflake-cloud-data-platform dbt

我们已经使用带有密钥对身份验证的Snowflake+DBT很长时间了,并且从未遇到过任何问题。

\n

最近,我们开始在某些型号上遇到随机连接错误:

\n
250001 (08001): Failed to connect to DB: account.region.snowflakecomputing.com:443. JWT token is invalid.\n
Run Code Online (Sandbox Code Playgroud)\n

大多数模型都可以工作,但其中一些可能会失败。这种情况可能发生在任何模型上,而且永远不会是同一个模型——有时是第一个模型,有时是最后一个模型,有时是一堆模型。它发生在运行多个模型或运行单个模型时。

\n

它非常不一致,而且似乎没有任何模式。有时它有效,有时则无效。

\n

我们还尝试过 1、4 或 8 个线程,无论如何都会发生这种情况。

\n

显然,凭据或配置 \xe2\x80\x94 没有任何问题,否则什么都不会运行。所以我认为 DBT 处理连接的方式一定有问题。

\n

有趣的是,错误仅发生在本地(到目前为止)。我们在 DBT Cloud 运行中还没有看到它。

\n

两种情况下的 DBT 版本均为 0.20.2。我们尝试了其他版本(0.21.0、0.20.0 和 0.19.1),但问题仍然存在。我不知道为什么我们会遇到这种情况,因为我们之前使用过这些其他版本,没有任何问题。

\n

它与这个问题类似,只是在我们的例子中它根本没有一致地发生。我们尝试“无区域”连接(使用Snowflake Organizations),但没有任何区别:

\n
250001 (08001): Failed to connect to DB: organization-account.snowflakecomputing.com:443. JWT token is invalid.\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以做些什么来解决这个问题吗?

\n

编辑:发生错误时,模型会挂起 60 秒,直到出现错误。

\n

编辑2:我认为当我们开始使用DBT 提供的 Docker 镜像时,错误可能已经开始发生。不确定它们到底出了什么问题,但我们会尝试回到我们自己的自定义图像,看看是否有效。

\n

Mar*_*Roy 1

此后这种情况不再发生。\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f

\n

可能是因为Snowflake 的这一变化:

\n
\n

“Snowflake 的云服务层已添加改进,以放宽有效性限制。”

\n
\n

另外,我们现在使用不同的 Docker 容器,因此这也可能与此有关:

\n
    \n
  • 首先,我们从 Docker Hub 切换到xemuliam/dbt
  • \n
  • 但由于不再维护,我们现在使用来自 GitHub 的官方 DBT Docker 映像(在发布问题时该映像不可用):\n\n
  • \n
\n