我必须将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/