Общая ошибка привязки обновления JDBC: размер запрашиваемого массива превышает ограничение виртуальной машины
При простом обновлении в PostgreSQL с использованием привязки Generic JDBC Update конвейер завершается ошибкой из-за следующей ошибки.
Ниже приводится полная трассировка стека.
com.snaplogic.snap.api.SnapDataException: SQL operation failed
at com.snaplogic.snap.api.sql.DatabaseUtils.writeErrorView(DatabaseUtils.java:664)
at com.snaplogic.snap.api.sql.operations.JdbcOperationsImpl.update(JdbcOperationsImpl.java:835)
at com.snaplogic.snaps.sql.SimpleSqlUpdateSnap.processData(SimpleSqlUpdateSnap.java:130)
at com.snaplogic.snaps.sql.SimpleSqlWriteSnap.processDocument(SimpleSqlWriteSnap.java:100)
at com.snaplogic.snaps.sql.SimpleSqlSnap.process(SimpleSqlSnap.java:257)
at com.snaplogic.snap.api.ExecutionUtil.process(ExecutionUtil.java:95)
at com.snaplogic.snap.api.ExecutionUtil.execute(ExecutionUtil.java:107)
at com.snaplogic.snap.api.ExecutionUtil.execute(ExecutionUtil.java:75)
at com.snaplogic.snap.api.SimpleSnap.execute(SimpleSnap.java:67)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.executeSnap(SnapRunnableImpl.java:721)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.execute(SnapRunnableImpl.java:497)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.doRun(SnapRunnableImpl.java:782)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.access$000(SnapRunnableImpl.java:110)
at com.snaplogic.cc.snap.common.SnapRunnableImpl$1.run(SnapRunnableImpl.java:340)
at com.snaplogic.cc.snap.common.SnapRunnableImpl$1.run(SnapRunnableImpl.java:336)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.call(SnapRunnableImpl.java:335)
at com.snaplogic.cc.snap.common.SnapRunnableImpl.call(SnapRunnableImpl.java:110)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Я знаю, что при работе с Java мы получаем эту ошибку, когда массивы становятся слишком большими и имеют размер между пределом платформы и Integer.MAX_INT. В этих случаях нам нужно проверить кодовую базу, чтобы увидеть, действительно ли нам нужны такие большие массивы. Затем мы можем уменьшить размер массивов и покончить с этим. Или разделите массив на более мелкие порции и загрузите данные, необходимые для работы внутри пакетов, вписываясь в ограничение платформы.
Ранее мы получали эту ошибку для размера пакета 500. Таким образом, исходя из этого, я уменьшил размер пакета до 150 (не то, что 500 - большое число, но все же). Но мы все равно получили ту же ошибку.
Ниже приведены настройки учетной записи.
Я не уверен, что это ошибка, которую мы могли бы исправить в процессе разработки. Нужно ли менять конфигурацию SnapLogic или есть другой способ?