javascript - 雪花和存储过程我们如何循环保存在内部阶段中的文件行?

标签 javascript mysql stored-procedures snowflake-cloud-data-platform

我有一个处于雪花阶段的文件,我想循环遍历每一行,并将列值垂直插入 SAT 表中。我启动了以下 JavaScript 存储过程:

CREATE PROCEDURE ADD_OBSERVATION_VALUES()
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
    
    // Get number of rows
    var num_rows_sql = "SELECT COUNT(*) FROM @ingest_stg/load/(file_format => 'csv_format', pattern => '.*[.]csv.gz') t";
    var stmt = snowflake.createStatement( {sqlText: num_rows_sql} );
    var rows_result = stmt.execute(); 
    rows_result.next();
    num_rows = rows_result.getColumnValue(1);
    
    while(i<num_rows) {
        
    }
    
$$;

在这种情况下,如何循环遍历文件的每一行,以便可以将列值作为新行逐一插入?

换句话说,假设我有 100 行。我想循环每一行,并将其列值插入到另一个表中,但垂直插入。

最佳答案

以下代码将演示如何从阶段读取多列 (2),然后插入表中。

这是我的目标表:

create or replace table target_Table( 
v1 varchar, v2 varchar,
v3 varchar, v4 varchar,
v5 varchar, v6 varchar);

这是文件中的数据:

select $1, $2 from @gokhan;

+-------+-------+
|  $1   |  $2   |
+-------+-------+
| zozo0 | hoho0 |
| zozo1 | hoho1 |
| zozo2 | hoho2 |
+-------+-------+

因此,该过程将从舞台中读取这些行,然后将所有这些列合并为一行并将其插入到 target_table 中:

CREATE PROCEDURE ADD_OBSERVATION_VALUES()
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
    var num_rows_sql = "SELECT $1, $2 FROM @gokhan (file_format => 'csv_format', pattern => '.*[.]csv.gz') t";
    var stmt = snowflake.createStatement( {sqlText: num_rows_sql} );
    var rows_result = stmt.execute(); 
    var value_array = [];
    
    while(rows_result.next()) {
        value_array.push( rows_result.getColumnValue(1) );
        value_array.push( rows_result.getColumnValue(2) );
    }
    
    snowflake.createStatement( { sqlText: 'INSERT INTO target_Table VALUES (?, ?, ?, ?, ?, ?)', 
    binds: value_array } ).execute();    
    
    return 'OK';
$$;

在存储过程中,我读取每一行(我假设有 2 列,然后将它们插入 JavaScript 数组 (value_array) 中。读取所有行后,我将这些值发送到 INSERT 语句。当然,在发送之前,可以做一些转换。据我所知,文件中有3行,所以我没有做任何限制,但为了避免任何错误,您可以在读取足够的数据后停止读取文件。

这是结果:

call ADD_OBSERVATION_VALUES();

select * from target_table;

+-------+-------+-------+-------+-------+-------+
|  V1   |  V2   |  V3   |  V4   |  V5   |  V6   |
+-------+-------+-------+-------+-------+-------+
| zozo0 | hoho0 | zozo1 | hoho1 | zozo2 | hoho2 |
+-------+-------+-------+-------+-------+-------+

关于javascript - 雪花和存储过程我们如何循环保存在内部阶段中的文件行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65615004/

相关文章:

javascript - 链接在 Bootstrap 导航栏中不起作用的菜单项

oracle - 将大 BLOB 传递给存储过程

sql - MS access(2003) 是否有任何可与存储过程相媲美的东西。我想在 MS Access 中运行一个复杂的查询

javascript - 禁用小屏幕模式

javascript - 为什么getComputedStyle不返回显示:none for an element hidden by a parent?

javascript - 使用单选按钮使 Div 在页面上随机移动?

php - 如何获取从下拉菜单中选择的选项并将其插入到mysql表中

mysql - 仅当值不存在时返回行

java - 如何通过jdbc连接mysql

MySql IN 参数 - 在存储过程中使用时,VarChar IN 参数 val 是否需要单引号?