我在 Snowflake 中有一个查询,它会按行生成 json 输出。 29,000 多行。我正在使用此查询在 MDM 系统中创建记录。然而,这种摄取过程有点低效且成本高昂。此后,我采用了创建 json 的最终 SELECT 语句并将其放入 CTE 中。然后我做了一个新的最终 SELECT 语句
SELECT ARRAY_AGG(*) as clin_prov
FROM clin_prov
这使得系统的规模不堪重负。在 1000 甚至 5000 的 CTE 中使用 LIMIT 会产生结果,生成一个大的 json 记录,正如预期的那样。我想要 30 行带有 <= 1000 json records in the final output. Is there a way to do that? Can I create Arrays based on LIMIT and OFFSET and feed into separate rows? I
的数组我在 clin_prov cte 中尝试过使用 LIMIT 和不使用 LIMIT。我尝试使用基于 LIMIT 和 OFFSET 的单独 ctes,然后使用 UNION ALL。这也超载了。
是的,您可以批量处理。请尝试以下操作,更改批次数的
NTILE
值。
WITH clin_prov AS (
SELECT
...,
NTILE(50) OVER (ORDER BY some_column) AS batch
FROM
...
)
SELECT batch, ARRAY_AGG(your_json_column) AS clin_prov
FROM clin_prov
GROUP BY batch
ORDER BY batch