为什么零件文件在HIVE输出中没有任何内容

时间:2016-04-17 10:05:21

标签: hadoop amazon-ec2 hive

我的问题是我在本地计算机上使用hadoop尝试了这个并使用AWS EC2进行检查,以下查询中没有返回记录。现在下面的脚本是正确的,我知道这是事实吗?

我的问题是在作业完成后我们在零件文件中看不到任何结果的原因

DROP TABLE IF EXISTS batting;
CREATE EXTERNAL TABLE IF NOT EXISTS batting(id STRING, year INT, team STRING,
league STRING, games INT, ab INT, runs INT, hits INT, doubles INT, triples
INT, homeruns INT, rbi INT, sb INT, cs INT, walks INT, strikeouts INT, ibb
INT, hbp INT, sh INT, sf INT, gidp INT) ROW FORMAT DELIMITED FIELDS
TERMINATED BY ',' LOCATION 's3://hive-test1/batting';
DROP TABLE IF EXISTS master;
CREATE EXTERNAL TABLE IF NOT EXISTS master(id STRING, byear INT, bmonth INT,
bday INT, bcountry STRING, bstate STRING, bcity STRING, dyear INT, dmonth
INT, dday INT, dcountry STRING, dstate STRING, dcity STRING, fname STRING,
lname STRING, name STRING, weight INT, height INT, bats STRING, throws
STRING, debut STRING, finalgame STRING, retro STRING, bbref STRING) ROW
FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION
's3://hive-test1/master';
INSERT OVERWRITE DIRECTORY 's3://hive-test1/output' SELECT n.fname,
n.lname, x.year, x.runs FROM master n JOIN (SELECT b.id as id, b.year as
year, b.runs as runs FROM batting b JOIN (SELECT year, max(runs) AS best     FROM
batting GROUP BY year) o WHERE b.runs=o.best AND b.year=o.year) x ON
x.id=n.id ORDER BY x.runs DESC;

1 个答案:

答案 0 :(得分:1)

当您使用Hive创建两个表时,您所做的只是创建名称,字段及其类型,位置等的定义。创建对数据没有任何作用。

根据您之前的类似问题,我认为您有一些CSV格式的现有HDFS文件,其中包含您要查询的数据,对吧?

在此之前,我建议您手动将记录插入到每个表中,例如INSERT INTO batting (id, year, team,league) VALUES ('1', 2016, 'Red Sox', 'AL Easr');。然后,使用SELECT * FROM batting;查询表格以确认您已记录其中包含一些值。

现在您需要解决下一个问题:如何将HDFS文件导入Hive表?如果安装了Hue,可以使用Hue执行此操作。如果没有,我建议您使用Google查找此问题的答案。

一般来说,您有三个问题需要解决:

  1. 在Hive中创建表,以便Hive megastore知道它们的结构。这称为数据定义语言,或SQL中的DDL。
  2. 将您现有的CSV数据集导入并将其作为HDFS上的文件添加到相应的Hive表
  3. 使用SQL查询表可能使用SELECT和JOIN,这在SQL中称为数据操作语言或DML。
  4. 每一步都是不同的一步。让它们一个接一个地工作,你将解决一个复杂的问题并将其分解为更容易理解的小问题。