从Databricks到Snowflake的连接

4
使用Databricks笔记本,我能够从Databricks连接到'snowflake'并使用'scala'将内容写入Snowflake表中,但使用'python'无法正常工作。
我已向Databricks添加了两个库,这有助于建立Databricks和Snowflake之间的连接:snowflake-jdbc-3.6.8和spark-snowflake_2.11-2.4.4-spark_2.2。
我的目标是使用Databricks(用于机器学习-Spark)在Databricks和Snowflake之间移动数据。
这是我尝试将DataFrame的内容写入Snowflake的代码:
  1. 将数据加载到DataFrame中
    df1 = spark.read.format('csv').option("header", "true")\
               .option("inferSchema", "true")\
               .load("dbfs:/databricks-datasets/airlines/part-00000")
    display(df1)

我能看到数据已经加载到数据框中。

  1. 使用密钥管理器获取Snowflake用户的登录名和密码。
    user = dbutils.secrets.get(scope="jdbc", key="snowflake_username")
    password = dbutils.secrets.get(scope="jdbc", key="snowflake_password")
  1. 雪花连接选项:
    options = dict(sfUrl="https://***snowflake_username***.snowflakecomputing.com",
                   sfUser=user,
                   sfPassword=password,
                   sfDatabase="my_database",
                   sfSchema="PUBLIC",
                   sfWarehouse="my_warehouse")

    SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"

目前还没有出现错误

  1. 将DataFrame的内容写入Snowflake
    df1.write.format(SNOWFLAKE_SOURCE_NAME) \
        .options(**options) \
        .option("dbtable", "datafromspark") \
          .save()

这会导致:

**Error : 
java.sql.SQLException: No suitable driver found for jdbc:snowflake://https://*snowflake_username*.snowflakecomputing.com**
2个回答

4
我发现了错误:
在第三步中,不需要提到 "https://"。
即:
sfUrl="https://snowflake_username.snowflakecomputing.com"   # giving an error

sfUrl="snowflake_username.snowflakecomputing.com"          #works fine

sfUrl="https://snowflake_username.snowflakecomputing.com"我尝试了以下几种可能性:
  1. 从sfUrl中删除“https://”,并尝试使用sfUrl="snowflake_username.snowflakecomputing.com"
  2. 添加“jdbc:snowflake”,并将sfUrl设置为"jdbc:snowflake://https://snowflake_username.snowflakecomputing.com"
  3. 删除“https://”并添加“jdbc:snowflake”,并尝试使用sfUrl="jdbc:snowflake://snowflake_username.snowflakecomputing.com"
在所有情况下,我都收到了相同的错误。
- Madman
@Ktn Patel - 你能否分享整个代码片段?我正在尝试在Python中实现相同的功能,但对SnowFlake不熟悉。非常感谢您的帮助。 - testbg testbg
我也遇到了同样的问题...谢谢分享。 - la_femme_it

0

这实际上很好运作(考虑到用户被允许编写模式并稍后从中读取)

import dbutils

# Use secrets DBUtil to get Snowflake credentials.
user = dbutils.secrets.get("snowflake", "xx")
password = dbutils.secrets.get("snowflake", "xy")

# snowflake connection options
options = {
    "sfUrl": "XXXXXXX.snowflakecomputing.com",
    "sfUser": user,
    "sfPassword": password,
    "sfDatabase": "DBX_TEST",
    "sfSchema": "DBX_SCHEMA"
}

# write the dataset to Snowflake
# sparkDF = spark.createDataFrame(...)
sparkDF.write.format("snowflake").options(**options).option("dbtable", "name_table").save()

# Connect to Snowflake and build data frame
df = spark.read.format("net.snowflake.spark.snowflake") \
    .options(**options) \
    .option("query", "select * from name_table") \
    .load()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接