Java 为包含大量数据的表生成CSV

Java 为包含大量数据的表生成CSV,java,postgresql,csv,bigdata,amazon-redshift,Java,Postgresql,Csv,Bigdata,Amazon Redshift,我在postgres数据库中有一个表(实际上是AWS红移),在一些操作之后,这个表中的数据需要导出到CSV。 例如,, 考虑一个表测试,其中列A、B、C、D、 Column A, Column B, Column C, Column D ValueA1 , ValueB1 , ValueC1 , 1 ValueA1 , ValueB2 , ValueC2 , 2 其中A、B、C是字符串,D是整数 此表中的条目表示A列、B列、C列、D列的值为计数 A、B、C之间的关系是分层的A>B>C

我在postgres数据库中有一个表(实际上是AWS红移),在一些操作之后,这个表中的数据需要导出到CSV。 例如,, 考虑一个表测试,其中列A、B、C、D、

Column A, Column B, Column C, Column D
ValueA1 , ValueB1 , ValueC1 , 1
ValueA1 , ValueB2 , ValueC2 , 2     
其中A、B、C是字符串,D是整数

此表中的条目表示A列、B列、C列、D列的值为计数

A、B、C之间的关系是分层的A>B>C

我的要求是CSV必须有与postgres汇总操作相对应的数据。 即, 示例CSV:

Column A, Column B, Column C, Sum(D)
ValueA1 ,         ,         ,  3
        , ValueB1  ,         , 1
        ,         , ValueC1 ,  1 
        , ValueB2  ,         , 2
        ,         , ValueC2 ,  2
目前,我的方法是对a、B、C进行分组,然后得到D列的总和。应用程序中正在进行分层聚合。 我无法一次获得整个结果集(7000万左右),但如果我在postgres中使用limit和offset以分页方式获取数据,则有可能最终拆分分层数据,导致ValueA在CSV中出现两次(或更多)

应用程序是使用Java和JOOQ构建的。数据被发送到前端(使用react构建),CSV被写入其中


非常感谢您提供有关如何完成此CSV的任何帮助。

如果我理解正确,请确保每次发送数据块时,该数据块必须包含列a(该数据块中存在)任何给定值的所有行。您可以使用如下所示的稠密秩函数-

SELECT *
FROM (
       SELECT
         ColumnA,
         ColumnB,
         ColumnC,
         dense_rank()
         OVER (
           ORDER BY ColumnA ASC ) AS dr,
         sum(ColumnD)             AS sumD
       FROM SomeTable
       GROUP BY ColumnA,
         ColumnB,
         ColumnC) AS sub_table
WHERE sub_table.dr BETWEEN 1 AND 5
在最后一种情况下,您可以在块中提供所需的记录编号范围(每次更改ColumnA的值时,稠密的_rank()都会递增)

你可以参考-