【问题标题】:Databricks - read table from Snowflake to DatabricksDatabricks - 从 Snowflake 读取表到 Databricks
【发布时间】:2021-11-21 18:42:41
【问题描述】:

我看过一些关于 Databricks to Snowflake 的问题,但我的问题是如何将一张表从 Snowflake 获取到 Databricks。

到目前为止我做了什么: 创建了一个集群并将集群附加到我的笔记本(我正在使用 Python)

# Use secrets DBUtil to get Snowflake credentials.
user = dbutils.secrets.get("snowflake-user", "secret-user")
password = dbutils.secrets.get("snowflake-pw", "secret-pw")
sf_url = dbutils.secrets.get("snowflake-url", "secret-sf-url")

# snowflake connection options
options = {
  "sfUrl": sf_url,
  "sfUser": user,
  "sfPassword": password,
  "sfDatabase": "DEV",
  "sfSchema": "PUBLIC",
  "sfWarehouse": "DEV_WH"
}

然后我尝试使用 spark.read 读取 Snowflake 中的 FBK_VIDEOS 表:

# Read table from Snowflake.
df = spark.read.format("snowflake").options(**options).option("dbtable", "FBK_VIDEOS").load()

我也试过:option("dbtable", "SELECT * FROM FBK_VIDEOS").load()

但我看到df 出现以下错误:

net.snowflake.client.jdbc.SnowflakeSQLException: SQL 编译 错误:

Traceback 在展开时显示:

Py4JJavaError                             Traceback (most recent call last)
<command-3339556253176158> in <module>
      1 # Read table from Snowflake.
----> 2 df = spark.read.format("snowflake").options(**options).option("dbtable", "FBK_VIDEOS").load()
      3 
      4 display(df)

/databricks/spark/python/pyspark/sql/readwriter.py in load(self, path, format, schema, **options)
    208             return self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(path)))
    209         else:
--> 210             return self._df(self._jreader.load())
    211 
    212     def json(self, path, schema=None, primitivesAsString=None, prefersDecimal=None,

/databricks/spark/python/lib/py4j-0.10.9-src.zip/py4j/java_gateway.py in __call__(self, *args)
   1302 
   1303         answer = self.gateway_client.send_command(command)
-> 1304         return_value = get_return_value(
   1305             answer, self.gateway_client, self.target_id, self.name)

【问题讨论】:

  • SQL编译错误码是什么?而且我没有看到正在使用 role,是否足够公开以能够从该表中读取?
  • 嘿@Sergiu 感谢您的回复。它没有显示 SQL 编译错误是什么,这是整个错误消息。但是是的,你是对的,这是因为缺少角色,这帮助了我并回答了我的问题。谢谢!

标签: pyspark apache-spark-sql snowflake-cloud-data-platform databricks azure-databricks


【解决方案1】:

为完整性和未来可能遇到类似问题的用户提供答案。

正如 cmets 中的回答:Snowflake 使用基于角色的访问控制系统,因此所使用的角色具有必要的权限至关重要。在这种情况下,代码中没有显示USE ROLE,因此在运行查询时处于活动状态的任何角色都没有足够的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2022-01-01
    • 2022-12-10
    相关资源
    最近更新 更多