为 Snowpark Scala 创建会话¶
要在应用程序中使用 Snowpark,您需要创建一个会话。为了方便编写代码,您还可以导入包和对象的名称。
本主题内容:
从 Snowpark 的包和对象导入名称¶
Snowpark API 提供了许多在不同包中可用的类、对象和函数。为方便起见,可以从包和对象中导入类、对象和函数名称,以避免使用限定名称。
例如:
com.snowflake.snowpark 包 中包含了 Snowpark API 的主要类。要导入此包中的名称,请使用:
import com.snowflake.snowpark._
com.snowflake.snowpark.functions 对象 定义效用函数(包括 系统定义的函数)。要从此对象导入函数名称,请使用:
import com.snowflake.snowpark.functions._
com.snowflake.snowpark.types 包 定义可用于定义半结构化数据架构的类和对象。
import com.snowflake.snowpark.types._
备注
如果使用了 run.sh
脚本 启动 Scala REPL,则该脚本已导入名称 com.snowflake.snowpark
和 com.snowflake.snowpark.functions
。
为 Snowpark 创建会话¶
使用该库的第一步是与 Snowflake 数据库建立会话。要创建会话,请使用 SessionBuilder
对象。您可以通过 Session
伴生对象中的 builder
字段访问 SessionBuilder
对象:
import com.snowflake.snowpark._
...
// Get a SessionBuilder object.
val builder = Session.builder
若要提供用 Snowflake 数据库建立会话的详细信息(例如,账户标识符、用户名等),请创建属性文件(文本文件)或以编程方式构建一个包含属性的 Map
。
在属性文件或 Map
中,设置以下属性:
URL
:按照https://account_identifier.snowflakecomputing.cn
形式,将此属性设置为您账户的 URL。请参阅 账户标识符。
如果账户标识符包含下划线 (
_
),请用连字符 (-
) 替换这些下划线。连接到 Snowflake 所需的任何其他 JDBC 参数(请参阅 JDBC 驱动程序文档中的 JDBC 驱动程序连接参数参考),例如
USER
、ROLE
、WAREHOUSE
、DB
、SCHEMA
等。备注
要更改日志记录级别(例如,从
INFO
更改为DEBUG
),请参阅 更改日志记录设置。(可选)
snowpark_request_timeout_in_seconds
:将此项设置为 Snowpark 库在以下情况下应等待的最大秒数:此属性的默认值为 86400 秒(1 天)。
备注
此属性是在 Snowpark 0.10.0 中引入的。
若要进行身份验证,可以使用 JDBC 驱动程序支持的相同机制。例如,您可以使用:
基于密码的身份验证(通过设置
PASSWORD
属性)
对于密钥对身份验证,您可以:
将
PRIVATE_KEY_FILE
属性设置为私钥文件的路径。如果私钥已加密,请将
PRIVATE_KEY_FILE_PWD
属性设置为用于解密私钥的密码。将
PRIVATEKEY
属性设置为私钥文件中 未加密私钥 的字符串值。(如果私钥已加密,则必须先解密私钥,然后才能将其设置为PRIVATEKEY
属性的值。)
要创建会话,请执行以下操作:
设置
Session.builder
对象中的属性。如果创建了属性文件,请将属性文件的路径传递给
Session.builder.configFile
方法。如果以编程方式构建了属性的
Map
,请将Map
传递给Session.builder.configs
方法。
这两种方法都返回具有这些属性的
builder
对象。调用
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>
或者,可以将 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>
以下示例使用此属性文件创建新会话:
// Create a new session, using the connection properties
// specified in a file.
val session = Session.builder.configFile("/path/to/properties/file").create
以下示例使用 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
结束会话¶
如果不再需要使用会话来执行查询,并且想要取消当前正在运行的任何查询,请调用 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();