當前位置:首頁 » 編程語言 » 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方式讀取