복붙노트

[HADOOP] HIVE QL의 테이블에 열 추가

HADOOP

HIVE QL의 테이블에 열 추가

HIVE에 1300 개의 행과 6 개의 열로 구성된 표를 작성하는 코드를 작성했습니다.

create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;

이제 모든 1300 행에 대해 하나의 고유 한 값으로 구성된 access_count1로 다른 열을 추가하고 값은 sum (max_count)이됩니다. max_count는 기존 테이블의 열입니다. 내가 어떻게 할 수 있니? 나는이 코드에 의해 테이블을 변경하려고 노력하고있다. ALTER TABLE test1 Add COLUMNS (access_count1 int) set default sum (max_count);

해결법

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

    1.하이브에 기본값이있는 열을 추가 할 수 없습니다. ALTER TABLE test1 ADD COLUMNS (access_count1 int) 열을 추가하는 올바른 구문을 사용하면 기본 합계 (max_count)를 제거하면됩니다. 열을 추가 한 결과 테이블을 백업하는 해당 파일은 변경되지 않습니다. Hive는 NULL을 해당 열의 모든 셀에 대한 값으로 해석하여 누락 된 데이터를 처리합니다.

    하이브에 기본값이있는 열을 추가 할 수 없습니다. ALTER TABLE test1 ADD COLUMNS (access_count1 int) 열을 추가하는 올바른 구문을 사용하면 기본 합계 (max_count)를 제거하면됩니다. 열을 추가 한 결과 테이블을 백업하는 해당 파일은 변경되지 않습니다. Hive는 NULL을 해당 열의 모든 셀에 대한 값으로 해석하여 누락 된 데이터를 처리합니다.

    이제는 열을 채울 필요가 있다는 문제가 생겼습니다. 불행히도 하이브에서는 본질적으로 전체 테이블을 다시 작성해야하며 이번에는 채워진 열로 채워야합니다. 새 열을 사용하여 원래 쿼리를 다시 실행하는 것이 더 쉬울 수 있습니다. 또는 지금 가지고있는 테이블에 열을 추가 한 다음 모든 열과 새 열의 값을 선택할 수 있습니다.

    또한 컬럼을 원하는 기본값으로 항상 공백으로 채우고 지금 NULL로 남겨 둘 수 있습니다. 이 옵션은 NULL이 원하는 기본값과 별개의 의미를 갖도록하려는 경우 실패합니다. 또한 항상 COALESCE를 기억하는 데 의존해야합니다.

    Hive를 뒷받침하는 파일을 처리 할 수있는 능력이 매우 자신있는 경우 직접 파일을 변경하여 기본값을 추가 할 수도 있습니다. 일반적으로 나는 대부분의 시간이 더 천천히 그리고 더 위험하기 때문에 이것을 반대하는 것이 좋습니다. 그래도 이해가가는 경우가있을 수 있으므로이 옵션을 완전성을 위해 포함 시켰습니다.

  2. from https://stackoverflow.com/questions/19589489/add-a-column-in-a-table-in-hive-ql by cc-by-sa and MIT license