当前位置:首页 » 编程语言 » sqlhive题目
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlhive题目

发布时间: 2022-06-10 13:57:58

A. Hive sql 计算前10名商品的SKU是哪些每个SKU的有效销售总量是多少

从你的表单来看,一个小类号就应该是一个SKU(sku就是单品数量)。但是你又有商品编码。
从表单看商品编码似乎又跟小类号没有关联。
所以,你自己要清楚你的SKU是以小类号为依据,还是以商品编码为依据。
然后做数据透视——这样同一个小类号或者商品编码号就在透视表中出现一次。
这样,你就能很清楚知道SKU数量了。

B. hive sql 怎么不能这样写啊 (mysql 是没有问题的)

你可以先用hive或者手写map/rece程序。建议你直接使用hive,hive也像mysql一样可以建表。表里的数据就是对应从本地load到hadoop上的文件,格式自己定。然后用JDBC可以像操作mysql一样操作hive(sql语法稍有不同)

C. hive sql语言问题,怎么按一列聚合第二列的多个值合并成1个值,再按这个值group by

--假设表名为tb
selectys,count(*)
from
(
selectx,to_char(wm_concat(y))ys
fromtb
groupbyx
)w
groupbyys
;

D. 求一个hive的sql语句。

有点不太明白你的意思,我只按照我自己的理解说了

一般hive 表应该建立一个以day(每一天,比如day=20141227,代表2014-12-27的数据)作为分区,每一天都存一个分区,这个如果想统计7天的 你可以再shell中得到今天作为变量,然后往前推7天那一天作为变量,这两个变量就可以写个sql
select * from tablename where day<=today and day>=sevenbeforeday
如果你想从关系型数据库中导出七个表到hive,就每一天作为分区

E. 以上sql,在hive中哪个能正确执行

贴一下你的SQL。
这个启动的MapredLocalTask,应该是数据增加到200000时,超过了本地任务的最大限制。

F. 下列hive-sql语句,关于空值的处理方法正确的是哪几个

A 和 D
A是判断非null的方法
D是空则为9999的处理

G. hive sql里,帮我描述一个简单的sql的原理

select a.id,a.info,b.num from a join b on a.id=b.id and where b.num>=10

两个表做关联,首先where会过滤掉不需要的数据。
至于表怎么做map和rece操作,在hive里的表是虚拟的,其实还是对hdfs文件进行操作,你可以在hdfs:///user/hive/warehouse路径下找到以表名来命名的文件,里面就是表的内容,可以执行-cat命令查看。所以,它的map操作很简单,就是按行读文件,然后会根据hive的默认分隔符\001对每行进行切分。切分完成后就会按照你SQL指定的逻辑进行合并,最后再输出成hdfs文件,只不过在hive里面看它是以表的形式展现的。

job数会在你执行sql语句之后紧接着有相应的日志记录,

Total MapRece jobs = 2
Launching Job 1 out of 2
Number of rece tasks not specified. Estimated from input data size: 2
In order to change the average load for a recer (in bytes):
set hive.exec.recers.bytes.per.recer=<number>
In order to limit the maximum number of recers:
set hive.exec.recers.max=<number>
In order to set a constant number of recers:

这样就是有两个job,正在执行第一个job。

Hadoop job information for Stage-1: number of mappers: 5; number of recers: 2
而这个就会告诉你有多少个mapper和recer。
像你写的这个sql有join操作,而且是hiveSQL里面最普通的join,那么一定会有recer参与,如果数据量很大,比如上千万条记录,join就会特别慢,job进度就会一直卡在rece操作。可以改成mapjoin或者sort merge bucket mapjoin。

其实hive效率不高,不适合实时查询,即使一个表为空,用hive进行查询也会很耗时,因为它要把sql语句翻译成MR任务。虽然简化了分布式编程,但是效率上就会付出代价。

你的这句sql应该会翻译成一个JOB来执行,就是简单地map和rece。

maprece就是按行读文件,然后切分,合并,输出成文件。

H. 以下哪些sql语句在hive中执行可以得到系统当前时间年月日

substring(now(),1,10)
from_unixtime(unix_timestamp,'yyyy-MM-dd')

I. Hivesql计算两个时间戳相差的分钟数

1.Hive row_number() 函数的高级用法 row_num 按照某个字段分区显示第几条数据

select imei,ts,fuel_instant,gps_longitude,gps_latitude,row_number() over (PARTITION BY imei ORDER BY ts ASC) as row_num from sample_data_2

2.row_num 是相互连续的,join 自身,然后时间相减可求差
create table obd_20140101 as

select a.imei,a.row_num,a.ts,COALESCE(unix_timestamp(a.ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(b.ts, 'yyyy-MM-dd HH:mm:ss.S') as intervel ,a.fuel_instant,a.gps_speed as obd_speed,a.gps_status,a.gps_longitude,a.gps_latitude,a.direct_angle,a.obdspeed from obddata_20140101 a join obddata_20140101 b on a.imei = b.imei and a.row_num = b.row_num +1

J. hive中sql运算出现倾斜的情况,主要原因有哪些

1. Mapjoin是一种避免避免数据倾斜的手段

允许在map阶段进行join操作,MapJoin把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了rece运行的效率也会高很多

在《hive:join遇到问题》有具体操作

在对多个表join连接操作时,将小表放在join的左边,大表放在Jion的右边,

在执行这样的join连接时小表中的数据会被缓存到内存当中,这样可以有效减少发生内存溢出错误的几率

2. 设置参数

hive.map.aggr = true

hive.groupby.skewindata=true 还有其他参数

3.SQL语言调节

比如: group by维度过小时:采用sum() group by的方式来替换count(distinct)完成计算

4.StreamTable

将在recer中进行join操作时的小table放入内存,而大table通过stream方式读取