在hive中从 stocks 表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close)大于 50 美元的年份及年平均调整后收盘价。涉及的表stocks(exchange varchar(100),symbol varchar(100),ymd varchar(100),price_open float,price_high float,price_low float,price_close float,volume int,price_adj_close float);)
时间: 2024-03-25 16:36:58 浏览: 18
可以使用以下HiveQL语句实现:
```
SELECT year(ymd) AS year, AVG(price_adj_close) AS avg_price_adj_close
FROM stocks
WHERE symbol = 'AAPL' AND price_adj_close > 50
GROUP BY year(ymd);
```
其中,通过WHERE子句筛选出符合条件的数据,即股票代码为AAPL且年平均调整后收盘价大于50美元的记录。然后使用GROUP BY子句按年份分组,并计算每组的年平均调整后收盘价。最后将年份和平均调整后收盘价作为结果返回。需要注意的是,HiveQL中的函数名是不区分大小写的,因此year和YEAR等价。
相关问题
分别在hive和mysql执行如下查询,1.查询IBM公司(symbol = IBM)从 2000 年起所有支付股息的交易日(dividends 表中有对应记录)的收盘价(price_close)。2.查询苹果公司(symbol = AAPL)2008 年 10 月每个交易日的涨跌情况,涨显示 rise,跌显示 fall,不变显示 unchange。3.查询苹果公司(symbol = AAPL)2008 年 10 月每个交易日的涨跌情况,涨显示 rise,跌显示 fall,不变显示 unchange。查询 stocks 表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。4.从 stocks 表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close)大于 50 美元的年份及年平均调整后收盘价。只有第二个查询hive的执行时间更短,对比Hive和MySQL查询的时间,进行分析
1. 在Hive中执行查询:
```
SELECT s.price_close
FROM stocks s
JOIN dividends d ON s.symbol = d.symbol AND s.ymd = d.ymd
WHERE s.symbol = 'IBM' AND s.ymd >= '2000-01-01' AND d.dividend_amount > 0;
```
在MySQL中执行查询:
```
SELECT s.price_close
FROM stocks s
JOIN dividends d ON s.symbol = d.symbol AND s.ymd = d.ymd
WHERE s.symbol = 'IBM' AND s.ymd >= '2000-01-01' AND d.dividend_amount > 0;
```
2. 在Hive中执行查询:
```
SELECT
CASE WHEN price_close > price_open THEN 'rise'
WHEN price_close < price_open THEN 'fall'
ELSE 'unchange'
END AS change
FROM stocks
WHERE symbol = 'AAPL' AND ymd BETWEEN '2008-10-01' AND '2008-10-31';
```
在MySQL中执行查询:
```
SELECT
CASE WHEN price_close > price_open THEN 'rise'
WHEN price_close < price_open THEN 'fall'
ELSE 'unchange'
END AS change
FROM stocks
WHERE symbol = 'AAPL' AND ymd BETWEEN '2008-10-01' AND '2008-10-31';
```
3. 在Hive中执行查询:
```
SELECT
CASE WHEN price_close > price_open THEN 'rise'
WHEN price_close < price_open THEN 'fall'
ELSE 'unchange'
END AS change,
*
FROM stocks
WHERE symbol = 'AAPL' AND ymd BETWEEN '2008-10-01' AND '2008-10-31';
```
在MySQL中执行查询:
```
SELECT
CASE WHEN price_close > price_open THEN 'rise'
WHEN price_close < price_open THEN 'fall'
ELSE 'unchange'
END AS change,
*
FROM stocks
WHERE symbol = 'AAPL' AND ymd BETWEEN '2008-10-01' AND '2008-10-31';
```
4. 在Hive中执行查询:
```
SELECT
YEAR(ymd) AS year,
AVG(price_adj_close) AS avg_price
FROM stocks
WHERE symbol = 'AAPL' AND price_adj_close > 50
GROUP BY YEAR(ymd);
```
在MySQL中执行查询:
```
SELECT
YEAR(ymd) AS year,
AVG(price_adj_close) AS avg_price
FROM stocks
WHERE symbol = 'AAPL' AND price_adj_close > 50
GROUP BY YEAR(ymd);
```
我们可以看到在这个例子中,Hive的执行时间更短。这是因为Hive通常用于处理大规模数据,可以利用Hadoop集群进行分布式计算,而MySQL则更适合处理小规模数据。此外,Hive还支持更复杂的查询语句和更多的数据处理功能,但是需要花费更多的时间来构建和维护Hadoop集群。因此,在选择使用哪个工具时,需要根据数据的规模和处理任务的要求进行权衡。
对比不同执行机制下的MySQL和Hive执行时间,执行如下查询,查询IBM公司(symbol = IBM)从 2000 年起所有支付股息的交易日(dividends 表中有对应记录)的收盘价(price_close)。查询苹果公司(symbol = AAPL)2008 年 10 月每个交易日的涨跌情况,涨显示 rise,跌显示 fall,不变显示 unchange。查询 stocks 表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。从 stocks 表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close)大于 50 美元的年份及年平均调整后收盘价。对比Hive和MySQL查询的时间,进行分析
对于第一个查询,Hive和MySQL的查询时间相对接近。由于查询条件较为简单,数据量不大,两者的执行速度差异不大。
对于第二个查询,Hive的执行时间可能会比MySQL更长一些。因为Hive采用MapReduce的并行计算方式,而MapReduce的初始化和启动过程比较耗时,因此对于查询简单、数据量较小的情况下,Hive的执行时间可能会比MySQL更长。
对于第三个查询,MySQL的执行时间可能会比Hive更短。因为MySQL采用的是基于行的存储方式,可以更快地查询单条记录。而Hive采用的是基于列的存储方式,对于单条记录的查询速度会相对较慢。但是如果查询的是大量数据,Hive的并行计算能力会比MySQL更强,执行速度也会更快。
总体来说,Hive适合处理大规模数据集,适合对数据进行批量处理和分析,而MySQL适合处理小型和中型数据集,适合对数据进行复杂的事务和高并发性能处理。但是在具体的使用场景中,需要根据数据量、查询复杂度等因素综合考虑,选择合适的数据库管理系统。