当前位置: 首页 > 知识库问答 >
问题:

雪花Javascript SP输出为表?

夏炎彬
2023-03-14

我正在编写一个SP,其中输出预期为表。但不能像表格式那样获得输出,而是在使用数组作为返回类型时,将其作为一个对象、单个值或一列中的所有行接收。

'''

create or replace table monthly_sales(empid int, amount int, month text)
as select * from values
(1, 10000, 'JAN'),
(1, 400, 'JAN'),
(2, 4500, 'JAN'),
(2, 35000, 'JAN'),
(1, 5000, 'FEB'),
(1, 3000, 'FEB'),
(2, 200, 'FEB'),
(2, 90500, 'FEB'),
(1, 6000, 'MAR'),
(1, 5000, 'MAR'),
(2, 2500, 'MAR'),
(2, 9500, 'MAR'),
(1, 8000, 'APR'),
(1, 10000, 'APR'),
(2, 800, 'APR'),
(2, 4500, 'APR'),
(2, 10000, 'MAY'),
(1, 800, 'MAY');

创建或替换过程getRowCount(TABLENAME VARCHAR(1000))返回variant not null language javascript作为$$//动态编写要执行的SQL语句。

var sql_command = " SELECT * FROM "+TABLENAME+";"

// Prepare statement.
var stmt = snowflake.createStatement({sqlText: sql_command});
return rs;

'''

预期输出:在此处输入图像描述

共有1个答案

暨承平
2023-03-14

雪花存储过程不能具有表的输出类型。你有几个选择。一种选择是编写一个存储过程,返回一个数组或JSON,您可以将这些数组或JSON平展成一个表。但是请注意,您不能直接使用存储过程的返回。您必须首先运行存储过程,并在会话中执行的下一条语句中收集输出,如下所示:

select * from  table(result_scan(last_query_id()));

另一个选择是编写用户定义表函数(UDTF),这是在Snowflake中返回表的唯一函数类型。下面是一个简单的UDTF示例:

create or replace function COUNT_LOW_HIGH(LowerBound double, UpperBound double)
    returns table (MY_NUMBER double)
    LANGUAGE JAVASCRIPT
    AS
$$
{
    processRow: function get_params(row, rowWriter, context){
        for (var i = row.LOWERBOUND; i <= row.UPPERBOUND; i++) {
            rowWriter.writeRow({MY_NUMBER: i});
        }
   }
}
$$;

然后可以使用如下表函数调用UDTF:

SELECT * FROM TABLE(COUNT_LOW_HIGH(1::double, 1000::double));
 类似资料:
  • 当我在snowflake中查询外部表(指向CSV文件)时,结果以JSON格式显示。 我如何检索我的结果在表格格式,而不使用任何这样的sql下面。我想做,我希望它以显示格式显示。 有什么想法吗?谢了。

  • 我正在重新设计我们公司的API以使用来自SQL Server的Snowflake。我们的第一个直接障碍是现有的SQL Server存储过程返回表输出,而Snowflake不允许这种类型的输出。我不想完全重新设计一切,所以我在想: null 我知道对于编码来说,使用python这样的东西会容易得多,但是,我不想维护另一个python应用程序,只用于在Snowflake中检索数据。

  • 我正在使用雪花,我正在寻找插入数据到一个表,而使用一个变量,使用变量的目的是,当我可以改变它,而不做查找和替换所有 以下作品 以下操作不起作用 然而,这是有效的。 https://docs.snowflake.com/en/sql-reference/session-variables.html

  • 我知道我们将无法使用雪花中的GET_DDL函数获取外部表的DDL。是否有任何变通方法来获取雪花中外部表的DDL(Create语句)?

  • 我正在搜索TABLE命令的官方文档(它与TABLE( ))不同。 我搜索了所有命令/查询语法,但没有太多成功。