You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake PHP ODBC中设置STATEMENT_TIMEOUT_IN_SECONDS?

实现Snowflake查询超时(STATEMENT_TIMEOUT_IN_SECONDS)的三种方式

问题背景

需要配置查询超时规则,让运行超过60秒的查询自动终止,优先在查询层面实现。以下是原始PHP ODBC连接Snowflake的代码:

<?php
    $server = 'abc.us-east-1.snowflakecomputing.com';
    $user = 'mukul';
    $pass = 'xyz123456';
    $port='443';
    $database = 'db';

    $connection_string = "DRIVER={SnowflakeDSIIDriver};SERVER=$server;PORT=$port;DATABASE=$database";

    $conn = odbc_connect($connection_string,$user,$pass);
    if ($conn) {
        echo "Connected";
    } else{
        die("Connection could not be established.");
    }

    $sql = "SELECT * FROM table limit 50";

    $result = odbc_exec($conn,$sql);
    while ($data[] = odbc_fetch_array($result));
    odbc_free_result($result);
    odbc_close($conn);
    print_r($data);
?>

解决方案

1. 查询层面(推荐,单查询生效)

使用Snowflake的查询提示直接为单个SQL设置超时,无需修改连接或会话配置,完全匹配需求:

// 修改SQL语句,添加查询提示设置60秒超时
$sql = "/*+ STATEMENT_TIMEOUT(60) */ SELECT * FROM table limit 50";
$result = odbc_exec($conn,$sql);

这种方式仅对当前执行的SQL生效,其他查询不受影响,是最灵活的实现方式。

2. 连接字符串层面(全局生效)

在连接字符串中添加STATEMENT_TIMEOUT_IN_SECONDS=60参数,所有通过该连接执行的查询都会默认使用这个超时时间:

// 修改连接字符串,加入超时参数
$connection_string = "DRIVER={SnowflakeDSIIDriver};SERVER=$server;PORT=$port;DATABASE=$database;STATEMENT_TIMEOUT_IN_SECONDS=60";
$conn = odbc_connect($connection_string,$user,$pass);

3. 会话层面(当前连接所有查询生效)

连接成功后,执行SET语句设置当前会话的超时参数,后续所有查询都会应用该设置:

$conn = odbc_connect($connection_string,$user,$pass);
if ($conn) {
    echo "Connected";
    // 设置会话级查询超时为60秒
    odbc_exec($conn, "SET STATEMENT_TIMEOUT_IN_SECONDS=60");
}

// 后续执行的查询都会自动应用超时
$sql = "SELECT * FROM table limit 50";
$result = odbc_exec($conn,$sql);

内容的提问来源于stack exchange,提问作者Mukul Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:17:23