我必须将hive中的表分区为一列,该列也是表的一部分。

例如:

表:员工

列: employeeId,employeeName,employeeSalary

我必须使用employeeSalary对表进行分区。
所以我写了以下查询:

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

我在这里只使用了“ds”这个名字,因为它不允许我输入相同的名字employeeSalary

这是我在做什么吗?同样,在将值插入表中时,我必须使用逗号分隔的文件。现在,该文件由以下行组成:
2019年,约翰,2000年

作为一排。
如果我必须使用薪水进行分区,那么我的第一个分区将是薪水为2000的所有人。因此查询将是
LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=2000);

同样,在有100个薪水为2000的条目之后,我接下来有500个薪水为4000的条目。
所以我会再次触发查询:
LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=4000);

请让我知道我是否正确...

最佳答案

以下是在您指定的列上创建带有分区的配置单元表的方法

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

分区列在PARTITIONED BY部分中指定。
在Hive Shell中,您可以运行describe employee;,它将显示表中的所有列。使用CREATE TABLE,您应该看到4列,而不是您试图获得的3列。

对于您的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);

关于hive - hive 中的分区列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5316960/

10-16 21:35