我们正在将数据加载到事实表中,我们在 Snowflake 上的原始临时表如下所示:
其中indicator_nbr
字段是调查中提出的问题。
我们正在使用数据建模技术来构建我们的仓库数据库,因此数据将被添加到事实表中,如下所示:
如果还有其他问题,则对指标 2 和 3 以此类推。
每个字段及其值将作为一行。当然,还有其他元数据要添加load_dt
,record_src
但它们不是问题。
当前脚本正在执行以下操作:
将字段放入数组 =>
fields_array = ['indicator_1', 'indicator_2', 'indicator_3']
一个循环将在数组上运行,并开始为每行添加每个字段及其值。所以假设我们有 100 行,我们将运行 300 次插入,一次一个:
for (var col_num = 0; col_num<fields_array.length; col_num = col_num+1) {
var COL_NAME = fields_array[col_num]; var field_value_query = "INSERT INTO SAT_FIELD_VALUE SELECT md5(id), CURRENT_TIMESTAMP(), NULL, 'SRC', "+COL_NAME+", md5(foreign_key_field) FROM "+TEMP_TABLE_NAME+"";
}
正如在显示完整脚本的这篇文章的评论中提到的,最好循环连接每个from values
插入查询的字符串。
建议的解决方案有两个问题:
- Snowflake 上的查询有大小限制(应小于 1 MB);
- 如果我们要遍历每个字段并连接
from values
,我们也应该select
从临时表中进行查询以获取列的值,因此不会进行优化,或者我们会减少一点时间但不会太多了。
编辑:一个可能的解决方案
我正在考虑做一个 sql 查询,从临时表中选择所有内容,然后进行散列和所有内容,并在转置后将其保存到数组中,但我不知道该怎么做。