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

能否通过JavaScript API获取CREATE TABLE AS语句的插入行数?

问题解答

核心结论

对于CREATE TABLE AS SELECT (CTAS)这类语句,Snowflake的JavaScript存储过程API无法直接通过getNumRowsAffected()、getRowCount()等方法获取插入的行数,必须执行额外的SELECT COUNT(*)查询来统计行数。

原因说明

Snowflake中,CTAS属于DDL(创建表)+数据填充的组合操作,并非纯DML(如INSERT/UPDATE/MERGE)操作。Snowflake的Statement API仅会为纯DML操作返回受影响行数,CTAS这类操作的执行结果不会在Statement对象中记录行数统计信息,所以你尝试的方法均无法生效。

可行解决方案

在执行CTAS语句后,新增一条SELECT COUNT(*)查询来获取目标表的行数,示例代码如下:

CREATE OR REPLACE Procedure TEST()
returns STRING
language JAVASCRIPT
as $$
    const rawSelectInto = `
CREATE OR REPLACE TEMPORARY TABLE MYTABLE1
AS
SELECT TOP 2 URI FROM MYTABLE2;
    `;

    // 执行CTAS创建临时表
    snowflake.createStatement({ sqlText: rawSelectInto }).execute();

    // 查询临时表的行数
    const countStmt = snowflake.createStatement({ sqlText: "SELECT COUNT(*) FROM MYTABLE1" });
    const countResult = countStmt.execute();
    countResult.next(); // 定位到结果行
    const rowCount = countResult.getColumnValue(1);

    return `Rows inserted: ${rowCount}`;
$$;

CALL TEST();

补充说明

  • 由于你使用的是TEMPORARY TABLE,每个会话的临时表相互独立,无需担心并发修改导致行数统计不准确的问题。
  • 如果是永久表,可将操作包裹在事务中,确保CTAS和COUNT查询的原子性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:23:17