32

1300 行と 6 列で構成されるテーブルを作成するコードを HIVE で書いています。

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;

access_count1ここで、1300 行すべてに対して 1 つの一意の値で構成される別の列を追加したいと思います。値は になりますsum(max_count)。max_count は、既存のテーブルの列です。どうすればそれができますか?このコードでテーブルを変更しようとしていますALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

4

1 に答える 1

50

Hive でデフォルト値を持つ列を追加することはできません。列を追加するため の正しい構文があります。削除するALTER TABLE test1 ADD COLUMNS (access_count1 int);必要があるだけですdefault sum(max_count)。列を追加しても、テーブルをバックアップするファイルは変更されません。Hive は、その列のすべてのセルの値として解釈することにより、「不足している」データを処理NULLします。

したがって、列にデータを入力する必要があるという問題があります。残念ながら、Hive では基本的にテーブル全体を書き直す必要がありますが、今回は列に値が入力されています。新しい列を使用して元のクエリを再実行する方が簡単な場合があります。または、現在のテーブルに列を追加してから、そのすべての列と新しい列の値を選択することもできます。

また、列を常にCOALESCE目的のデフォルトにして、今はそのままにしておくオプションもありますNULLNULLこのオプションは、目的のデフォルトとは異なる意味を持たせたい場合に失敗します。また、常に覚えておく必要がありますCOALESCE

Hive をサポートするファイルを処理する能力に非常に自信がある場合は、ファイルを直接変更してデフォルトを追加することもできます。ほとんどの場合、速度が遅くなり、危険性が高くなるため、一般的にはこれをお勧めしません。ただし、それが理にかなっている場合があるかもしれないので、完全を期すためにこのオプションを含めました。

于 2013-10-25T17:05:56.470 に答える