Использование HQL для переноса данных из одной таблицы в другую - PullRequest
0 голосов
/ 16 октября 2018

В настоящее время у меня есть таблица, которая выглядит примерно так:

Table_1

ID|NAME|INFO_CODE_1|INFO_CODE_2|INFO_CODE_3|INFO_CODE_4|INFO_TEXT|DESCRIPTION
1 |Test|123        |254        |556        |867        |Test Text|Test Description

Я пытаюсь вставить данные из Table_1 в Table_2, чтобы каждая запись из первой таблицыпревращается во четыре отдельные записи во второй таблице, например:

Table_2

ID|NAME|INFO_CODE|INFO_TEXT|DESCRIPTION
1 |Test|123      |Test Text|Test Description
1 |Test|254      |Test Text|Test Description
1 |Test|556      |Test Text|Test Description
1 |Test|867      |Test Text|Test Description

В Таблице_1 много тысяч записей, есть другие столбцы, данные которых нам не нужны,и значения от INFO_CODE_1 до INFO_CODE_4 все варьируются от записи к записи (и могут даже быть нулевыми).Я думал написать что-то вроде этого:

INSERT OVERWRITE TABLE example.TABLE_2
SELECT
A.ID AS ID,
A.NAME AS NAME,
A.INFO_CODE_1 AS INFO_CODE,
A.INFO_TEXT AS INFO_TEXT,
A.DESCRIPTION AS DESCRIPTION
FROM
example.TABLE_1 A
UNION ALL
SELECT
A.ID AS ID,
A.NAME AS NAME,
A.INFO_CODE_2 AS INFO_CODE,
A.INFO_TEXT AS INFO_TEXT,
A.DESCRIPTION AS DESCRIPTION
FROM
example.TABLE_1 A
UNION ALL
SELECT
A.ID AS ID,
A.NAME AS NAME,
A.INFO_CODE_3 AS INFO_CODE,
A.INFO_TEXT AS INFO_TEXT,
A.DESCRIPTION AS DESCRIPTION
FROM
example.TABLE_1 A
UNION ALL
SELECT
A.ID AS ID,
A.NAME AS NAME,
A.INFO_CODE_4 AS INFO_CODE,
A.INFO_TEXT AS INFO_TEXT,
A.DESCRIPTION AS DESCRIPTION
FROM
example.TABLE_1 A;
  1. Будет ли это работать?
  2. Если да, есть ли лучший способ написать утверждение?
  3. Есть ли способ гарантировать, что все записи с одинаковым идентификатором вставляются одна за другой?

Заранее благодарю всех за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 16 октября 2018

Другой способ без большого количества союзов - это.Для этого потребуется 1 задание maprecece вместо нескольких заданий, экономящих ресурсы.Вы можете объединить свои коды, разделить их, чтобы создать массив и взорвать массив.

INSERT OVERWRITE TABLE example.TABLE_2
SELECT
a.id,
a.name,
CODE
a.INFO_TEXT,
A.DESCRIPTION from 
(
SELECT
A.ID AS ID,
A.NAME AS NAME,
split(concat(A.INFO_CODE_1, ",",A.INFO_CODE_2,",",A.INFO_CODE_3,",",A.INFO_CODE_4),",") AS INFO_CODE_ARRAY,
A.INFO_TEXT AS INFO_TEXT,
A.DESCRIPTION AS DESCRIPTION
from TABLE_1
) t LATERAL VIEW explode(INFO_CODE_ARRAY) codea AS code;
...