为 Snowpark Java 创建会话¶
要在应用程序中使用 Snowpark,您需要创建一个会话。为了方便编写代码,您还可以导入包和对象的名称。
本主题内容:
从 Snowpark 的包导入名称¶
Snowpark API 提供了许多不同包中的类。为方便起见,可以导入这些包,以避免对类不得不使用限定名称。
例如:
com.snowflake.snowpark_java 包 包含 Snowpark API 的主要类。要导入此包中的名称,请执行以下操作:
import com.snowflake.snowpark_java.*;
com.snowflake.snowpark_java.types 包 定义可用于定义半结构化数据架构的类。
import com.snowflake.snowpark_java.types.*;
为 Snowpark 创建会话¶
使用该库的第一步是与 Snowflake 数据库建立会话。若要创建会话,请使用 SessionBuilder
类中的方法。可以通过调用 Session
类中的静态 builder
方法来访问 SessionBuilder
对象:
import com.snowflake.snowpark_java.*;
...
// Get a SessionBuilder object.
SessionBuilder 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
属性设置为私钥文件中 未加密私钥`的字符串值。(如果私钥已加密,则必须先解密私钥,然后才能将其设置为 :code:`PRIVATEKEY 属性的值。)
要创建会话,请执行以下操作:
设置
SessionBuilder
对象中的属性。如果创建一个属性文件,请将属性文件的路径传递给
SessionBuilder
对象的configFile
方法。如果以编程方式构建了属性
Map
,请将Map
传递SessionBuilder
对象的configs
方法 。
这两种方法都返回具有这些属性的
SessionBuilder
对象。调用
SessionBuilder
对象的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.
Session session = Session.builder().configFile("/path/to/properties/file").create();
以下示例使用 Map 来设置属性:
import com.snowflake.snowpark_java.*;
import java.util.HashMap;
import java.util.Map;
...
// Create a new session, using the connection properties
// specified in a Map.
// Replace the <placeholders> below.
Map<String, String> properties = new HashMap<>();
properties.put("URL", "https://<account_identifier>.snowflakecomputing.cn:443");
properties.put("USER", "<user name>");
properties.put("PRIVATE_KEY_FILE", "</path/to/private_key_file.p8>");
properties.put("PRIVATE_KEY_FILE_PWD", "<if the private key is encrypted, set this to the passphrase for decrypting the key>");
properties.put("ROLE", "<role name>");
properties.put("WAREHOUSE", "<warehouse name>");
properties.put("DB", "<database name>");
properties.put("SCHEMA", "<schema name>");
Session session = Session.builder().configs(properties).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();