首页 > 解决方案 > ApacheBeam-Java:MS-SQL - 子查询返回超过 1 个值

问题描述

我对 JdbcIO.read() 有疑问。当我尝试获取所有记录(SELECT * FROM MyTable)时,它会引发以下错误,但当我选择 TOP N 记录(SELECT TOP 100000 * FROM MyTable)时会起作用。源表有超过 1 亿条记录。

任何的意见都将会有帮助。

错误 :

“来自工作人员的错误消息:com.microsoft.sqlserver.jdbc.SQLServerException:子查询返回的值超过 1 个。当子查询遵循 =、!=、<、<=、>、>= 或子查询为用作表达式。com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)"

代码

return pipeline.apply("Get [" + objectDetails.getObjectName() + "]",
            JdbcIO.<TableRow>read()
                    .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
                            "com.microsoft.sqlserver.jdbc.SQLServerDriver",
                            String.format("jdbc:sqlserver://%1$s:%2$s;DatabaseName=%3$s", databaseDetails.getDatabaseHostName()
                                    , databaseDetails.getPort(), databaseDetails.getDatabaseName()))
                            .withUsername(databaseDetails.getUserName())
                            .withPassword(databaseDetails.getPassword()))
                    .withQuery("SELECT * FROM MyTable")
                    .withCoder(TableRowJsonCoder.of())
                    .withRowMapper(rowMapper));

问候, 马赫什

标签: javasql-serverapache-beamdataflowapache-beam-io

解决方案


推荐阅读