0

ログ ファイルのセットがあり、Hive テーブルを作成しました。列に基づいてテーブルをパーティション分割したいのですが、理解できず、例を見ていないのは、パーティションの列を指定する方法です。列/フィールドを指定する方法です。元。ここにログからの行があります

2012-04-11 16:49:10,629 ~ [http-7001-11] ~DE1F6F6667913022AE2620D1228817D6 ~ END ~ /admin/bp/setup/newedit/ok ~ pt ~ 219 ~

table struc は CREATE TABLE ログです (starttime STRING、thread STRING、session STRING、method STRING、targeturl STRING、registry string、ipaddress STRING、details STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'; 6the colie 'registry'をログのパーティションにしたい場合、どのようにパーティション ステートメントを記述すればよいでしょうか。 一般に、列 c1、c2、..... c10 の行 (行) がある場合、パーティションで列 ci を指定する方法を教えてください。 ありがとう

4

2 に答える 2

0

最初に行う必要があるのは、テーブルを作成するときに、どの列がパーティションになると予想されるかを明示的に伝えることです。registryパーティションを作成するには:

CREATE TABLE log(starttime STRING, thread STRING, session STRING, method STRING, targeturl STRING, ipaddress STRING, details STRING)
PARTITIONED BY (registry STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'

必要な数のパーティションを追加できます。各パーティションはネストされたサブフォルダーになり、パーティションを宣言する順序がPARTITIONED BY問題になります。最初のパーティションは最上位のパーティションになり、2 番目のパーティションは 1 になります。レベルダウン、... 例:

|--- mytable
      `---- mypartition1=x
                   `-------- mypartition2=x
                                     `------- ...

私がすることは次のとおりです。

  1. ログ ディレクトリの場所を指す外部テーブルを作成します。パーティションはまったくなく (未加工のログ ファイルのみが含まれます)、テーブルraw_logにはすべてのデータが入力されますが、パーティションは (まだ) ありません。

    CREATE EXTERNAL TABLE raw_log(starttime STRING, thread STRING, session STRING, method STRING, targeturl STRING, registry STRING, ipaddress STRING, details STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'
    LOCATION '/path/to/your/log/dir'
    
  2. Hive の動的パーティション機能を使用して、次のように読み取りraw_logおよび挿入しlogます。

    FROM raw_log raw
    INSERT OVERWRITE TABLE log PARTITION(registry)
           SELECT raw.starttime, raw.thread, raw.session, raw.method, raw.targeturl, raw.ipaddress, raw.details
    

動的パーティションの詳細については、公式の Apache wiki を参照してください。

于 2012-04-21T00:50:50.297 に答える
0

さらに、Hive には、パーティション化された外部テーブルに関する問題がありました。たとえば、dt=21012-04-01 などの形式のサブディレクトリやその他の同様のディレクトリにデータを設定した後、テーブルを外部宣言して作成するとします。データが選択に表示されないことを除いて、すべて問題ないように見えます。

Elastic map reduce は、この問題を解決する機能を追加しました

ALTER TABLE log RECOVER PARTITIONS;

私のデータがそこになかった理由を見つけるのに時間がかかったので、この情報を追加しています。

于 2012-04-21T06:22:49.220 に答える