【问题标题】:Pulling Snowflake table into Dataframe将雪花表拉入数据框
【发布时间】:2021-10-20 03:06:42
【问题描述】:

我继续得到并报错“ProgrammingError: 002003 (42502): SQL compiler error: Object 'Table' does not exist or not authorized. 我正在使用以下代码:

con = snowflake.connector.connect(
user = "user.name",
authenticator="externalbrowser",
warehouse = "ware house name",
database = "db name",
schema = "schema name"
)
cur.con.cursor()
sql = "select * from Table"
cur.execute(sql)
df = cur.fetch_pandas_all()

当我在 Jupyter Notebook 中执行代码时,浏览器窗口打开并验证我的凭据,但是当它到达 sql 执行行时,错误上升并告诉我该表不存在。当我在浏览器中打开 Snowflake 时,我可以看到该表确实存在于我的代码中的正确仓库、数据库和架构中。

有没有其他人经历过这种情况?我是否需要授权我的用户才能通过 Python 和 Jupyter Notebook 访问此表?对此的任何帮助或建议都会很棒!提前致谢。

【问题讨论】:

  • 您能否查看history page 中发送给 Snowflake 的实际查询?表名可能区分大小写,需要用SELECT * FROM "Table_name_here" 包装
  • 我查看了历史记录,看起来大多数都失败了。我尝试用双引号将表名括起来,但脚本仍然失败。还有其他建议吗?

标签: python sql jupyter-notebook snowflake-cloud-data-platform


【解决方案1】:

您的会话可能没有分配给它的角色(当前角色)。 您可以在连接会话参数列表中添加角色, 例如添加如下内容

role = 'RICH_ROLE',

您可能需要考虑为您的用户设置一个默认角色。

ALTER USER userNameHere SET DEFAULT_ROLE = 'THE_BEST_ROLE';

文档链接:https://docs.snowflake.com/en/sql-reference/sql/alter-user.html

此外,当所有其他方法都失败时,请使用完全限定的表名,请注意,如果未设置角色,这将无济于事:

sql = "select * from databaseName.schemaName.TableName"

我希望这会有所帮助...丰富

附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案,方法是单击答案旁边的复选标记,将其从“灰色”切换为“已填写”。

【讨论】:

  • 感谢您的建议。当我使用我的角色尝试此操作时,它说该角色不存在或未授权。它的角色名称中确实有“-” - 这可能与它有关吗?我还尝试将整个“databaseName”。“SchemaName”。“Tablename”放在 sql 查询中
  • 如果您尝试使用该角色但未能成功,则您无权访问它,因此您需要与您的管理员交谈和/或按照您团队的流程来获取该角色.如果您使用与您的代码具有相同用户名和角色的 webUI,并且可以在 webUI 中查询表,但不能在代码中查询,则您的代码会话中的当前上下文不正确,您的连接参数有问题。
  • Rich - 我将错误的角色列为变量。我现在可以访问该表。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-03-27
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多