真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

hiveWHERE語句的用法

本篇內(nèi)容介紹了“hive WHERE語句的用法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)專注于廣德企業(yè)網(wǎng)站建設,自適應網(wǎng)站建設,商城網(wǎng)站建設。廣德網(wǎng)站建設公司,為廣德等地區(qū)提供建站服務。全流程按需制作網(wǎng)站,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務


WHERE語句

      SELECT語句用于選取字段,WHERE語句用于過濾條件,兩者結(jié)合使用可以查找到符合過濾條件的記錄。之前我們已經(jīng)在很多簡單例子中使用過它了,現(xiàn)在我們深入學習一下它吧。

      WHERE語句使用謂詞表達式,對于列應用在謂詞操作符上的情況,稍后我們將進行討論。有幾種謂詞表達式可以使用AND和OR相連接。當謂詞表達式計算結(jié)果為true時,相應的行將被保留并輸出。

      注:WHERE后面是不可以使用別名的,如果想使用別名,那可以使用嵌套語句去查詢。

1.謂詞操作符

下面這些謂詞操作符可以用于JOIN... ON和HAVING語句中。

操作符

支持的數(shù)據(jù)類型

描述

A=B

基本數(shù)據(jù)類型

如果A等于B則返回TRUE,反之返回FLASE

A<=>B

基本數(shù)據(jù)類型

如果A和B都為NULL則返回TRUE,其他的和等號(=)操作符的結(jié)果一致,如果任一為NULL則結(jié)果為NULL

A==B

沒有

這個是錯誤的語法!SQL使用=,而不是==

A<>B,A!=B

基本數(shù)據(jù)類型

A或者B為NULL則返回NULL;如果A不等于B則返回TRUE,反之返回FALSE

A<=B

基本數(shù)據(jù)類型

A或者B為NULL則返回NULL;如果A小于或等于B則返回TRUE,反之返回FALSE

A>B

基本數(shù)據(jù)類型

A或者B為NULL則返回NULL;如果A大于B則返回TRUE,反之返回FALSE

A>=B

基本數(shù)據(jù)類型

A或者B為NULL則返回NULL;如果A大于或等于B則返回TRUE,反之返回FALSE

A[NOT] BETWEEN B AND C

基本數(shù)據(jù)類型

如果A,B或者C任一為NULL,則結(jié)果為NULL,如果A的值大于或等于B而且小于或等于C,則結(jié)果為TRUE,反之為FLASE。如果使用NOT關(guān)鍵字則可達到相反的效果

A IS NULL

所有數(shù)據(jù)類型

如果A等于NULL則返回TRUE;反之返回FLASE

A IS NOT NULL

所有數(shù)據(jù)類型

如果A不等于NULL則返回TRUE;反之返回FLASE

A [NOT] LIKE B

STRING 類型

B是一個SQL下的簡單正則表達式,如果A與其匹配的話,則返回TRUE;反之返回FLASE。B的表達式說明如下:'x%'表示A必須以字母'x'開頭,'%x'表示A必須以字母'x'結(jié)尾,而'%x%'表示A包含有字母'x',可以位于開頭,結(jié)尾或者字符串中間。類似地,下劃線'_'匹配單個字符。B必須要和整個字符串A相匹配才行。如果使用NOT關(guān)鍵字則可達到相反的效果

A RLIKE B,A REGEXP B

STRING 類型

B是一個正則表達式,如果A與其相匹配,則返回TRUE;反之返回FLASE。匹配使用的是JDK中的正則表達式接口實現(xiàn)的,因為正則規(guī)則也依據(jù)其中的規(guī)則。例如,正則表達式必須和整個字符串A想匹配,而不是只需與其子字符串匹配。

2.關(guān)于浮點數(shù)比較

       浮點數(shù)比較的一個常見陷井出現(xiàn)在不同類型間做比較的時候(也就是FLOAT和DOUBLE比較)。

       eg:下面這個對員工的查詢語句,該語句將返回員工姓名,工資和聯(lián)邦稅,過濾條件是薪水的減免稅款超過0.2(之前定義的deductions的map的值是FLOAT類型的)

hive> SELECT name,salary,deductions['Federal Taxes']
    > FROM employees WHERE deductions['Federal Taxes']>0.2;
John    Doe    100000.0    0.2
Mary    Smith    80000.0    0.2
Boss    Man    200000.0    0.3
Fred    Finance    150000.0    0.3
 

Wait!為什么deductions['Federal Taxes']=0.2的記錄也被輸出了?

        這是Hive的Bug嗎?這其實反映了內(nèi)部是如何進行浮點數(shù)比較的,這個問題幾乎影響了在現(xiàn)在數(shù)字計算機中所有使用各種各樣編程語言編寫的軟件。

實際上我們可以說0.2對于FLOAT類型是0.2000001,而對于DOUBLE類型是0.200000000001。這是因為一個8字節(jié)的DOUBLE值具有更多的小數(shù)位。當表中的FLOAT值通過Hive轉(zhuǎn)換為DOUBLE值時,其產(chǎn)生的DOUBLE值是0.200000100000,這個值實際要比0.200000000001大。這就是為什么這個查詢結(jié)果像是使用了>=似的。

        這個問題并非僅僅存在于Hive中或Java中,而其他系統(tǒng)也會出現(xiàn)這個問題。

        

Hive有兩種規(guī)避這個問題的方法。

1.如果使用存儲格式為TEXTFILE,那么Hive會從數(shù)據(jù)文件中讀取字符串"0.2",然后將其轉(zhuǎn)換成一個真實的數(shù)字。我們可以在表模式中定義對應的字段類型為DOUBLE而不是FLOAT,這樣我們就可以對deductions['Federal Taxes']這個DOUBLE值和0.2這個DOUBLE值進行比較。

2.使用cast操作符改變數(shù)據(jù)類型

          eg:下面是修改后的語句和結(jié)果

hive> SELECT name,salary,deductions['Federal Taxes']
                 > FROM employees WHERE deductions['Federal Taxes']>cast(0.2 AS FLOAT);
Boss    Man    200000.0    0.3
Fred    Finance    150000.0    0.3

“hive WHERE語句的用法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


分享題目:hiveWHERE語句的用法
文章位置:http://weahome.cn/article/pojddo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部