Общая ошибка привязки обновления 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 или есть другой способ?

0 ответов

Другие вопросы по тегам