SnappyData snappy-sql PUT INTO вызывает ошибку:spark.sql.execution.id уже установлен
Я использовал SQL-оболочку SnappyData (snappy-sql) и выполнял операторы SQL (PUT INTO) и столкнулся с ошибкой:
ERROR 38000: (SQLState=38000 Severity=20000) (Server=localhost/127.0.0.1[1528] Thread=pool-3-thread-3) The exception 'com.pivotal.gemfirexd.internal.engine.jdbc.GemFireXDRuntimeException: myID: s4-03(19442)<v1>:43452, caused by java.lang.IllegalArgumentException: spark.sql.execution.id is already set' was thrown while evaluating an expression.
Caused by: ServerException: Server STACK: java.sql.SQLException(38000): The exception 'com.pivotal.gemfirexd.internal.engine.jdbc.GemFireXDRuntimeException: myID: s4-03(19442)<v1>:43452, caused by java.lang.IllegalArgumentException: spark.sql.execution.id is already set' was thrown while evaluating an expression.
at com.pivotal.gemfirexd.internal.iapi.error.StandardException.newException(StandardException.java:473)
at com.pivotal.gemfirexd.internal.engine.Misc.processFunctionException(Misc.java:808)
at com.pivotal.gemfirexd.internal.engine.Misc.processFunctionException(Misc.java:753)
at com.pivotal.gemfirexd.internal.engine.sql.execute.SnappySelectResultSet.setup(SnappySelectResultSet.java:282)
at com.pivotal.gemfirexd.internal.engine.distributed.message.GfxdFunctionMessage.e
xecuteFunction(GfxdFunctionMessage.java:332)
at com.pivotal.gemfirexd.internal.engine.distributed.message.GfxdFunctionMessage.executeFunction(GfxdFunctionMessage.
(truncated for brevity.)
И вот что я сделал: Загрузите двоичные файлы SnappyData с https://www.snappydata.io/download (v0.8). Разархивировал, побежал
sbin/snappy-start-all.sh
bin/snappy-sql
snappy> connect client 'localhost:1527';
snappy> create table table_a(key1 INT primary key, val INT);
snappy> create table table_b(key1 INT primary key, val INT);
snappy> insert into table_a values (1, 1);
snappy> insert into table_b values (1, 2);
snappy> insert into table_b values (2, 3);
snappy> select * from table_a;
KEY1 |VAL
-----------------------
1 |1
1 row selected
snappy> select * from table_b;
KEY1 |VAL
-----------------------
2 |3
1 |2
2 rows selected
snappy> put into table_a select * from table_b;
(then the above error.)
Поиск ошибки (spark.sql.execution.id уже установлен) приводит к следующему: https://issues.apache.org/jira/browse/SPARK-13747(параллельное выполнение в SQL не работает с Scala ForkJoinPool), которое похоже, что ошибка исправлена в Spark 2.2.0.
Возможно, это может быть связано с тем, что SnappyData все еще использует spark 2.0 (по крайней мере, теперь в github говорится, что он перешел на spark 2.0). Но я не уверен.
Теперь я пытаюсь использовать PUT INTO
заявления в SnappyData, если возможно, будет очень признателен, если кто-то может помочь мне с этой проблемой. Заранее спасибо:)
1 ответ
Вам просто нужно предоставить схему table_a в операторе put in. Поэтому она должна быть: snappy> вставлена в table_a (key1, val) select * from table_b;
Мы увидим, что можно сделать для проблемы "0 строк вставлено / обновлено / удалено". "положить в" немного сложнее, так как он может делать вставки и обновления в одном DML.