Как вы копируете одну таблицу в другую, одновременно вставляя данные

Чтобы добавить к этому вариант использования, который часто не обсуждается, я буду представлять решение при подаче приложения 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 

0
задан marc_s 15 January 2019 в 21:11
поделиться

2 ответа

Я не уверен, что полностью понимаю ваш вопрос, однако, если вы просто хотите вставить свой 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

Опять же, это основано на моем понимании - или его отсутствии - вашего вопроса.

0
ответ дан Critical Error 15 January 2019 в 21:11
поделиться

Команда 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!

0
ответ дан marc_s 15 January 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: