如何将所有数据提取到 Snowflake 中的拆分行中的对象数组中?
How to fetch all data into splitted row into array of objects in Snowflake?
我正在执行此过程,其中我们指定阶段文件的路径和应使用的文件格式,然后我们得到它的前两列,return 它作为数组类型的变体具有以下结构:
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., t. FROM "+FILE_FULL_PATH+"(FILE_FORMAT=>"+FILE_FORMAT_NAME+") t GROUP BY t., t.";
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');
returned dimension_array
的结构只有一个对象,所有值都适合每个 属性:
[
{ 'dim_label_name': 'Test1Test2Test3...', 'dim_ona_name': 'ONA Test1 ONA Test2 ONA Test3...' }
]
如何在 Snowflake 中将所有数据提取到拆分行中的对象数组中?
您对 dimension_array 的推送超出了您收集结果集的循环。它只会将结果集中的最后一行推入数组。
此外,您还想使用 = 将字符串分配给数组的元素。
+= 将值连接到字符串元素,这就是为什么它们都在一个字符串中。
这部分有问题:
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);
}
我正在执行此过程,其中我们指定阶段文件的路径和应使用的文件格式,然后我们得到它的前两列,return 它作为数组类型的变体具有以下结构:
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., t. FROM "+FILE_FULL_PATH+"(FILE_FORMAT=>"+FILE_FORMAT_NAME+") t GROUP BY t., t.";
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');
returned dimension_array
的结构只有一个对象,所有值都适合每个 属性:
[
{ 'dim_label_name': 'Test1Test2Test3...', 'dim_ona_name': 'ONA Test1 ONA Test2 ONA Test3...' }
]
如何在 Snowflake 中将所有数据提取到拆分行中的对象数组中?
您对 dimension_array 的推送超出了您收集结果集的循环。它只会将结果集中的最后一行推入数组。
此外,您还想使用 = 将字符串分配给数组的元素。 += 将值连接到字符串元素,这就是为什么它们都在一个字符串中。
这部分有问题:
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);
}