Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 雪花和存储过程如何循环存储在内部阶段的文件行?_Javascript_Mysql_Stored Procedures_Snowflake Cloud Data Platform - Fatal编程技术网

Javascript 雪花和存储过程如何循环存储在内部阶段的文件行?

Javascript 雪花和存储过程如何循环存储在内部阶段的文件行?,javascript,mysql,stored-procedures,snowflake-cloud-data-platform,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_form

我有一个雪花阶段的文件,我想在每一行上循环,并将列值垂直插入到
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) {
        
    }
    
$$;
创建过程添加观察值()
返回字符串
语言JAVASCRIPT
作为
$$
//获取行数
var num_rows_sql=“从@inset_stg/load/(file_format=>'csv_format',pattern=>'.[.]csv.gz')t中选择COUNT(*);
var stmt=snowflake.createStatement({sqlText:num\u rows\u sql});
var rows_result=stmt.execute();
行_result.next();
num_rows=rows_result.getColumnValue(1);

而(i下面的代码将演示如何从一个stage读取多个列(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 |
+-------+-------+
因此,该过程将从stage中读取这些行,然后将所有这些列合并为一行,并将其插入到target_表中:

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';
$$;
在存储过程中,我读取每一行(我假设它有两列),然后将它们放入一个JavaScript数组(value_数组).读取所有行后,我将这些值发送到INSERT语句。当然,在发送之前,可以进行一些转换。因为我知道文件中有3行,所以我没有设置任何限制,但为了避免任何错误,您可以在读取足够的数据后停止读取文件

结果是:

call ADD_OBSERVATION_VALUES();

select * from target_table;

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

您好,在“将其列值插入另一个表中,但垂直”语句中,“垂直”是什么意思?另外,为什么您试图通过Proc而不是简单的复制到…语句中加载数据?因为数据在表中是以行的形式存在的,而不是以垂直的形式存在的,这意味着,每一行都被拆分为键/值对,每一对都被拆分为@NickW行。请提供一些示例源数据,并说明您希望它在目标选项卡中的显示方式乐