Добавьте несколько строк вверху таблицы улья - PullRequest
1 голос
/ 12 июня 2019

У меня есть таблица этой формы в улье (До):

AB_dimp|SF_0060H00000nhSrmQAE|EBA Order 1127735|Execute|New From
AB_dimp|SF_0060H00000nhSwkQAE|EBA Order 1127725|Execute|New From
AB_Dimp|SF_0060H00000nhSyDQAU|EBA Order 1127728|Execute|New From

И я хочу поместить эти 3 строки в верхней части таблицы в улье в этой форме (После):

[Yellow]
Cat ID|AN_Net|
[network]
AB_dimp|SF_0060H00000nhSkPQAU|EBA Order 1127708|Execute|New From
AB_DIMP|SF_0060H00000nhSl8QAE|EBA Order 1127709|Execute|New From
AB_DIMP|SF_0060H00000nhSrmQAE|EBA Order 1127735|Execute|New From

Как мне добиться этого в Улей, пожалуйста?

Ответы [ 2 ]

1 голос
/ 12 июня 2019

а.) Сначала создайте другую таблицу (скажем, NewTable) и вставьте эти 3 записи

b.) Теперь вставьте ваши существующие данные в другую таблицу

insert overwrite table NewTable select * from ExisitngTable;

c.) Удалить ExisitngTable

d.) Теперь вставьте данные из NewTable в ExisitngTable

insert overwrite table ExisitngTable select * from NewTable name;
0 голосов
/ 12 июня 2019

Использовать объединение всех:

select '[Yellow]' as col_name union all
select 'ID|AN_Net|'           union all
select '[network]'            union all
select col_name from your_table;

Если вы хотите добавить эти строки в таблицу, а не только выбрать их, вам не нужна промежуточная таблица для достижения этого:

insert overwrite your_table 
select * from 
(
    select '[Yellow]' as col_name union all
    select 'ID|AN_Net|'           union all
    select '[network]'            union all
    select col_name from your_table
)s;

Но имейте в виду, что строки в таблице не упорядочены. Когда вы выбираете таблицу без order by, выбор выполняется параллельно на многих преобразователях. Базовый файл (ы) разделяются, и маперы читают каждое собственное разбиение. Они выполняются достаточно изолированно друг от друга параллельно и возвращают результаты также независимо. Чем быстрее, тем быстрее будет возвращен результат, видите ли, только order by гарантирует порядок возвращаемых строк. Это означает, что в следующий раз, когда вы выберете эту таблицу с некоторой вероятностью, эти дополнительные строки могут быть возвращены не первыми. Только ORDER BY может гарантировать порядок строк. И у вас должен быть какой-то столбец, который вы можете использовать для упорядочивания строк, например, id, или ваш столбец может быть использован в порядке. Если таблица небольшая, есть вероятность, что она будет прочитана на одном устройстве отображения, и строки будут возвращены в исходном порядке, как в базовом файле.

Чтобы сохранить порядок строк в файле, вы можете добавить столбец row_order и использовать его в верхнем запросе в ORDER BY:

select  DRM_Pln_Parent, opportunityid, opportunity_name
   from
   (
   SELECT 1 as row_order, '[hier]' as DRM_Pln_Parent, '' as opportunityid, '' as opportunity_name
UNION ALL
   SELECT 2 as row_order, 'Opportunity ID|SF_AllOpportunities|' as DRM_Pln_Parent, '' as opportunityid, '' as opportunity_name
UNION ALL
   SELECT 3 as row_order, '[relation]' as DRM_Pln_Parent, '' as opportunityid, '' as opportunity_name
UNION ALL 
   SELECT DISTINCT 4 as row_order, 'SF_AllOpportunities' AS DRM_Pln_Parent, 
CONCAT('SF_',opportunityid) as opportunityid, 
opportunity_name, 
from ...

   )s
order by row_order  

Для лучшего понимания см. Также этот ответ: https://stackoverflow.com/a/43368113/2700344

...