我的问题是,我用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条答案
按热度按时间siv3szwd1#
当您使用配置单元创建这两个表时,您所做的只是创建名称、字段及其类型、位置等的定义。create不处理数据。
基于您之前的类似问题,我认为您有一些csv格式的hdfs文件,其中包含您要查询的数据,对吗?
在此之前,我建议您在每个表中手动插入一条记录,如
INSERT INTO batting (id, year, team,league) VALUES ('1', 2016, 'Red Sox', 'AL Easr');
. 然后,使用SELECT * FROM batting;
来确认你的记录中有一些值。现在您要解决的下一个问题是:如何将hdfs文件导入配置单元表?如果你已经安装了hue,你可以使用它。如果没有,我建议你用谷歌来找到这个问题的答案。
一般来说,您有三个问题需要解决:
在配置单元中创建表,以便配置单元megastore了解其结构。这在sql中称为数据定义语言(ddl)。
将现有的csv数据集作为hdfs上的文件导入并lin到相应的配置单元表中
使用sql查询表可能使用select和join,这在sql中称为数据操作语言或dml。
每一步都是不同的。让他们一个接一个地工作,你就会把一个复杂的问题分解成更容易理解的小问题。