Чтобы добавить к этому вариант использования, который часто не обсуждается, я буду представлять решение при подаче приложения Spark
через spark-submit
в локальном режиме.
Согласно gitbook Освоение Apache Spark Яцек Ласковски :
Вы можете запустить Spark в локальном режиме. В этом нераспределенном режиме развертывания с одним JVM Spark генерирует все компоненты исполнения - драйвер, исполнитель, бэкэнд и мастер - в той же JVM. Это единственный режим, когда драйвер используется для выполнения.
blockquote>Таким образом, если вы испытываете ошибки
OOM
сheap
, достаточно скорректироватьdriver-memory
, а неexecutor-memory
.Вот пример:
spark-1.6.1/bin/spark-submit --class "MyClass" --driver-memory 12g --master local[*] target/scala-2.10/simple-project_2.10-1.0.jar
Я не уверен, что полностью понимаю ваш вопрос, однако, если вы просто хотите вставить свой user_id в другую таблицу одновременно с вставкой записи в другую таблицу, вы можете добавить INSERT TRIGGER в таблицу. который первым получает данные, которые добавляют запись в любую дополнительную таблицу (таблицы).
Например, предположим, что у вас есть Таблица1, которая также должна вставлять данные в Таблицу 2. Вы можете сделать это, добавив этот триггер в Таблицу 1:
CREATE TRIGGER trg_Table1_ins
ON dbo.Table1
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.Table2 ( [user_id] )
SELECT [user_id] FROM inserted;
END
GO
Опять же, это основано на моем понимании - или его отсутствии - вашего вопроса.
Команда INSERT
поставляется в двух вариантах:
(1) либо у вас есть все доступные значения в виде литералов или переменных SQL Server - в этом случае вы можете использовать подход INSERT .. VALUES()
:
DECLARE @User_ID INT;
SELECT @User_ID = User_ID
FROM dbo.Users
WHERE (some condition here) -- most likely
INSERT INTO dbo.Attendance (User_ID, [Month], [Year], Status)
VALUES (@User_ID, @Month, @Year, @Status)
Примечание: я бы рекомендовал всегда явно указывать список столбцов для вставки данных - таким образом, у вас не будет никаких неприятных сюрпризов если вдруг в вашей таблице есть дополнительный столбец, или если в ваших таблицах есть IDENTITY
или вычисляемый столбец. Да - это чуть-чуть больше работы - один раз - но тогда ваше утверждение INSERT
будет настолько надежным, насколько это возможно, и вам не придется постоянно возиться с ним, если ваша таблица изменится. [ 1116]
(2) , если у вас нет всех ваших значений в виде литералов и / или переменных, но вместо этого вы хотите полагаться на другую таблицу, несколько таблиц или представлений, чтобы предоставить значения, вы можете использовать подход INSERT ... SELECT ...
:
INSERT INTO dbo.Attendance (User_ID, [Month], [Year], Status)
SELECT User_ID, @Month, @Year, @Status
FROM dbo.Users
Здесь вы должны определить ровно столько элементов в SELECT
, сколько ожидает ваш INSERT
- и это могут быть столбцы из таблицы (ов) (или представлений), или они могут быть литералами или переменными. Опять же: явно предоставьте список столбцов для вставки - см. Выше.
Вы можете использовать один или другой - но вы не можете смешать два - вы не можете использовать VALUES(...)
и затем иметь запрос SELECT
в середине вашего списка значений - выберите одно из двух - придерживайтесь его. И конструкция WITH VALUES(....)
совершенно не является допустимым кодом T-SQL ...
Для получения более подробной информации и дальнейшего углубленного освещения см. в официальной электронной документации по MSDN SQL Server Books на INSERT
- отличный ресурс для всех вопросов, связанных с SQL Server!