복붙노트

[HADOOP] 하이브 테이블의 상단에 몇 줄 추가

HADOOP

하이브 테이블의 상단에 몇 줄 추가

나는 하이브 (전)에서이 형식의 테이블이 있습니다 :

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

어떻게 하이브에서이 좀 얻을 수 있을까요?

해결법

  1. ==============================

    1.노동 조합을 모두 사용

    노동 조합을 모두 사용

    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는 행의 순서를 보장 할 수 있습니다. 그리고 당신은 당신이 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

  2. ==============================

    2.가.) 첫째, 다른 테이블 (의 말 NewTable하자)를 만들고이 3 개 레코드를 삽입

    가.) 첫째, 다른 테이블 (의 말 NewTable하자)를 만들고이 3 개 레코드를 삽입

    나.) 이제, 다른 테이블에 기존 데이터를 삽입

    insert overwrite table NewTable select * from ExisitngTable;
    

    다.) 삭제 ExisitngTable

    D.) 이제부터 NewTable ExisitngTable에 데이터를 삽입

    insert overwrite table ExisitngTable select * from NewTable name;
    
  3. from https://stackoverflow.com/questions/56564050/add-some-lines-at-the-top-of-hive-table by cc-by-sa and MIT license