如何将所有数据提取到拆分行中的雪花对象数组中?

Posted

技术标签:

【中文标题】如何将所有数据提取到拆分行中的雪花对象数组中?【英文标题】:How to fetch all data into splitted row into array of objects in Snowflake? 【发布时间】:2021-01-13 14:56:02 【问题描述】:

我有这个过程,我们指定阶段文件的路径以及应该使用哪种文件格式,然后我们获取它的前 2 列并将其作为具有以下结构的类型数组的变体返回:

result = [
     dim_label_name: 'Test1', dim_ona_name: 'Ona Test1' ,
     dim_label_name: 'Test2', dim_ona_name: 'Ona Test2' ,
]

程序如下:

CREATE OR REPLACE PROCEDURE ADD_FIELD_AND_DIMENSION(FILE_FULL_PATH STRING, FILE_FORMAT_NAME STRING)
RETURNS VARIANT
LANGUAGE javascript
EXECUTE AS CALLER
AS
$$
    var dimension_array = [];
    try
      // Get the unique values of the available dimensions
      var unique_dimension_query = "SELECT t.$1, t.$2 FROM "+FILE_FULL_PATH+"(FILE_FORMAT=>"+FILE_FORMAT_NAME+") t GROUP BY t.$1, t.$2";
      var unique_dimension_stmt = snowflake.createStatement(sqlText: unique_dimension_query);
      var rs = unique_dimension_stmt.execute();
      var dimension_object = ;
      while (rs.next()) 
        dimension_object['dim_label_name'] += rs.getColumnValue(1);
        dimension_object['dim_ona_name'] += rs.getColumnValue(2);
      
      dimension_array.push(dimension_object);
      return dimension_array;
    
    catch(error) 
        return error;
    
$$;

CALL ADD_FIELD_AND_DIMENSION('@ingest_stage_temp/my_file.csv', 'my_file_format');

返回的dimension_array 的结构只有一个对象的所有值都适合每个属性:

[
     'dim_label_name': 'Test1Test2Test3...', 'dim_ona_name': 'ONA Test1 ONA Test2 ONA Test3...' 
]

如何在 Snowflake 中将所有数据提取到拆分行中的对象数组中?

【问题讨论】:

【参考方案1】:

您对维度数组的推送超出了收集结果集的循环。它只会将结果集中的最后一行推送到数组中。

另外,您希望使用 = 将字符串分配给数组的元素。 += 将值连接到字符串元素,这就是为什么它们都在一个字符串中。

这部分有问题:

  while (rs.next()) 
    dimension_object['dim_label_name'] += rs.getColumnValue(1);
    dimension_object['dim_ona_name'] += rs.getColumnValue(2);
  
  dimension_array.push(dimension_object);

应该是这样的:

  while (rs.next()) 
    dimension_object['dim_label_name'] = rs.getColumnValue(1);
    dimension_object['dim_ona_name'] = rs.getColumnValue(2);
    dimension_array.push(dimension_object);
  
  

【讨论】:

以上是关于如何将所有数据提取到拆分行中的雪花对象数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从雪花中的json对象数组中选择数据

如何分离从表行中获取的值并将其存储在雪花中的数组中

如何从 React 中的嵌套对象数组中提取数据?

将 json 对象中的元素数组保存到不同的行中

将对象属性的所有值提取到 Typescript 中的新数组 [重复]

如何将 Postgres Hstore 数据类型转换为雪花对象或变体