Databricks - 从 Snowflake 读取 table 到 Databricks
Databricks - read table from Snowflake to Databricks
我看到了一些关于 Databricks 到 Snowflake 的问题,但我的问题是如何将 table 从 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 table:
# 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 compilation
error:
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)
回答的完整性和未来可能有类似问题的用户。
正如评论中的回答:Snowflake 使用基于角色的访问控制系统,因此使用的角色具有必要的权限至关重要。在这种情况下,代码中没有显示 USE ROLE
,因此当查询 运行 时激活的任何角色都没有足够的权限。
我看到了一些关于 Databricks 到 Snowflake 的问题,但我的问题是如何将 table 从 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 table:
# 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 compilation error:
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)
回答的完整性和未来可能有类似问题的用户。
正如评论中的回答:Snowflake 使用基于角色的访问控制系统,因此使用的角色具有必要的权限至关重要。在这种情况下,代码中没有显示 USE ROLE
,因此当查询 运行 时激活的任何角色都没有足够的权限。