为 Snowpark Scala 创建会话

要在应用程序中使用 Snowpark,您需要创建一个会话。为了方便编写代码,您还可以导入包和对象的名称。

本主题内容:

从 Snowpark 的包和对象导入名称

Snowpark API 提供了许多在不同包中可用的类、对象和函数。为方便起见,可以从包和对象中导入类、对象和函数名称,以避免使用限定名称。

例如:

备注

如果使用了 run.sh 脚本 启动 Scala REPL,则该脚本已导入名称 com.snowflake.snowparkcom.snowflake.snowpark.functions

为 Snowpark 创建会话

使用该库的第一步是与 Snowflake 数据库建立会话。要创建会话,请使用 SessionBuilder 对象。您可以通过 Session 伴生对象中的 builder 字段访问 SessionBuilder 对象:

import com.snowflake.snowpark._

...
// Get a SessionBuilder object.
val builder = Session.builder
Copy

若要提供用 Snowflake 数据库建立会话的详细信息(例如,账户标识符、用户名等),请创建属性文件(文本文件)或以编程方式构建一个包含属性的 Map

在属性文件或 Map 中,设置以下属性:

  • URL:按照 https://account_identifier.snowflakecomputing.cn 形式,将此属性设置为您账户的 URL。

    请参阅 账户标识符

    如果账户标识符包含下划线 (_),请用连字符 (-) 替换这些下划线。

  • 连接到 Snowflake 所需的任何其他 JDBC 参数(请参阅 JDBC 驱动程序文档中的 JDBC 驱动程序连接参数参考),例如 USERROLEWAREHOUSEDBSCHEMA 等。

    备注

    要更改日志记录级别(例如,从 INFO 更改为 DEBUG),请参阅 更改日志记录设置

  • (可选) snowpark_request_timeout_in_seconds:将此项设置为 Snowpark 库在以下情况下应等待的最大秒数:

    此属性的默认值为 86400 秒(1 天)。

    备注

    此属性是在 Snowpark 0.10.0 中引入的。

若要进行身份验证,可以使用 JDBC 驱动程序支持的相同机制。例如,您可以使用:

对于密钥对身份验证,您可以:

  • PRIVATE_KEY_FILE 属性设置为私钥文件的路径。

    如果私钥已加密,请将 PRIVATE_KEY_FILE_PWD 属性设置为用于解密私钥的密码。

  • PRIVATEKEY 属性设置为私钥文件中 未加密私钥 的字符串值。(如果私钥已加密,则必须先解密私钥,然后才能将其设置为 PRIVATEKEY 属性的值。)

要创建会话,请执行以下操作:

  1. 设置 Session.builder 对象中的属性。

    • 如果创建了属性文件,请将属性文件的路径传递给 Session.builder.configFile 方法。

    • 如果以编程方式构建了属性的 Map,请将 Map 传递给 Session.builder.configs 方法。

    这两种方法都返回具有这些属性的 builder 对象。

  2. 调用 builder 对象的 create 方法来建立会话。

下面是一个属性文件的示例,该文件设置用于连接到 Snowflake 数据库的基本参数。此示例设置为使用密钥对身份验证。将 PRIVATE_KEY_FILE 设置为私钥文件的路径。此外,如果私钥已加密,则必须将 PRIVATE_KEY_FILE_PWD 设置为用于解密私钥的密码:

# profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.cn
USER = <username>
PRIVATE_KEY_FILE = </path/to/private_key_file.p8>
PRIVATE_KEY_FILE_PWD = <if the private key is encrypted, set this to the passphrase for decrypting the key>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

或者,可以将 PRIVATEKEY 属性设置为私钥文件中 未加密的 私钥。

# profile.properties file (a text file)
URL = https://<account_identifier>.snowflakecomputing.cn
USER = <username>
PRIVATEKEY = <unencrypted_private_key_from_the_private_key_file>
ROLE = <role_name>
WAREHOUSE = <warehouse_name>
DB = <database_name>
SCHEMA = <schema_name>
Copy

以下示例使用此属性文件创建新会话:

// Create a new session, using the connection properties
// specified in a file.
val session = Session.builder.configFile("/path/to/properties/file").create
Copy

以下示例使用 Map 来设置属性:

// Create a new session, using the connection properties
// specified in a Map.
val session = Session.builder.configs(Map(
    "URL" -> "https://<account_identifier>.snowflakecomputing.cn",
    "USER" -> "<username>",
    "PRIVATE_KEY_FILE" -> "</path/to/private_key_file.p8>",
    "PRIVATE_KEY_FILE_PWD" -> "<if the private key is encrypted, set this to the passphrase for decrypting the key>",
    "ROLE" -> "<role_name>",
    "WAREHOUSE" -> "<warehouse_name>",
    "DB" -> "<database_name>",
    "SCHEMA" -> "<schema_name>"
)).create
Copy

结束会话

如果不再需要使用会话来执行查询,并且想要取消当前正在运行的任何查询,请调用 Session 对象的 close 方法。例如:

// Close the session, cancelling any queries that are currently running, and
// preventing the use of this Session object for performing any subsequent queries.
session.close();
Copy
语言: 中文