Получение первичного ключа из вставленного набора данных для объединения в другие вставки - PullRequest
0 голосов
/ 07 февраля 2019

Предположим, у меня есть следующие таблицы в базе данных Oracle

Foo:

+--------+---------+---------+
| id_foo | string1 | string2 |
+--------+---------+---------+
|      1 | foo     | bar     |
|      2 | baz     | bat     |
+--------+---------+---------+

Bar:

+--------+-----------+--------+
| id_bar | id_foo_fk | string |
+--------+-----------+--------+
|      1 |         1 | boo    |
|      2 |         1 | bum    |
+--------+-----------+--------+

Когда я вставляю в Foo, используянабор данных и JDBC, такие как

Dataset<Row> fooDataset = //Dataset is initialized
fooDataset.write().mode(SaveMode.Append).jdbc(url, table, properties)

, идентификатор автоматически генерируется базой данных.Теперь, когда мне нужно сохранить Bar, используя ту же стратегию, я хочу иметь возможность связать ее с Foo через id_foo_fk.

Я рассмотрел некоторые возможности, такие как monotonically_increasing_id() как предложено в этом вопросе , но это не решит проблему, так как мне нужен идентификатор, сгенерированный базой данных.Я попробовал то, что было предложено в этом вопросе , но это приводит к той же проблеме уникальных идентификаторов, не связанных с базой данных

Также невозможно снова выбрать из JDBC, так как string1и string2 не может быть уникальным.Также невозможно изменить базу данных.Например, я не могу изменить его на UUID и не могу добавить триггер для него.Это устаревшая база данных, которую мы можем использовать только

Как этого добиться?Возможно ли это с Apache Spark?

1 Ответ

0 голосов
/ 07 февраля 2019

Я не специалист по Java, поэтому вам придется изучить уровень базы данных, чтобы узнать, как действовать, но есть 3 способа сделать это:

  • Вы можете создать процедуру храненияесли сервер базы данных, который вы используете, способен (большинство делает) и вызывает его из вашего кода.
  • Создайте триггер, который возвращает номер идентификатора при первой вставке, и используйте его при следующей вставке в БД.
  • Используйте UUID и используйте его в качестве ключа вместо автоматически сгенерированного ключа базы данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...