8

hiveテーブルの一部でもある列でテーブルを分割する必要があります。

例:

表:従業員

列: employeeId、employeeName、employeeSalary

employeeSalary を使用してテーブルを分割する必要があります。そこで、次のクエリを書きます。

 CREATE TABLE employee (employeeId INT, employeeName STRING, employeeSalary INT) PARTITIONED BY (ds INT); 

同じ名前を付けることができなかったので、ここでは「ds」という名前を使用しましたemployeeSalary

これは私がしていることですか?また、テーブルに値を挿入するときは、カンマ区切りのファイルを使用する必要があります。これで、ファイルは次のような行で構成されます: 2019,John,2000

1行として。給与を使用してパーティション分割する必要がある場合、最初のパーティションは給与 2000 のすべての人になります。したがって、クエリは次のようになります。

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=2000);

ここでも、給与が 2000 の 100 エントリの後、給与が 4000 の次の 500 エントリがあります。したがって、クエリを再度実行します。

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=4000);

私が正しいかどうか教えてください...

4

3 に答える 3

6

指定した列にパーティションを持つハイブテーブルを作成する方法は次のとおりです

CREATE TABLE employee (employeeId INT, employeeName STRING) PARTITIONED BY (employeeSalary INT);

パーティション列はPARTITIONED BYセクションで指定されます。
Hiveシェルで実行するdescribe employee;と、テーブル内のすべての列が表示されます。CREATE TABLE取得しようとしている3つの列ではなく、4つの列が表示されます。

loadコマンドでは、書き込むすべてのパーティションを指定する必要があります。(私はこれらにあまり精通しておらず、主にhttp://wiki.apache.org/hadoop/Hive/LanguageManual/DML#Syntaxに基づいています。

だから何かのような

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (employeeSalary=2000, employeeSalary=4000);
于 2011-03-15T21:10:04.013 に答える
0

おそらく、最初にすべてのデータを 1 つのテーブルにロードしてから、Hive 拡張 (複数の挿入) を使用する必要があると思います。

FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT          EXISTS]] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] 
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
FROM from_statement
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] 
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;

その後、必要に応じて、

from big_data_table
insert overwrite table table1 partiton (ds=2000)
select * where employeeId>0 && employeeId<101>
insert overwrite table table2 partition (ds=4000)
select * where employeeId>=101&&employeeId<=600
于 2012-08-01T02:36:15.273 に答える