1. 程式人生 > >Hive 程式設計專題 一 : 使用正則指定輸出列

Hive 程式設計專題 一 : 使用正則指定輸出列

環境:

Hive: 2.7.7
Oracle SQL Developer
Cloudera JDBC Driver

案例:

select type,nameobject,`*date`
from tblobj2 
limit 10 ;

錯誤:

1 - 使用 Oracle SQL Developer 執行上述 HQL 語句報錯:

[Cloudera][HiveJDBCDriver](500051) ERROR processing query/statement. Error Code: 40000, SQL state: TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid column reference '`*date`': Dangling meta character '*' near index 0
*date
^:17:16, org.apache.hive.service.cli.operation.Operation:toSQLException:Operation.java:380, org.apache.hive.service.cli.operation.SQLOperation:prepare:SQLOperation.java:206, org.apache.hive.service.cli.operation.SQLOperation:runInternal:SQLOperation.java:290, org.apache.hive.service.cli.operation.Operation:run:Operation.java:320, org.apache.hive.service.cli.session.HiveSessionImpl:executeStatementInternal:HiveSessionImpl.java:530, org.apache.hive.service.cli.session.HiveSessionImpl:executeStatementAsync:HiveSessionImpl.java:517, org.apache.hive.service.cli.CLIService:executeStatementAsync:CLIService.java:310, org.apache.hive.service.cli.thrift.ThriftCLIService:ExecuteStatement:ThriftCLIService.java:530, org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement:getResult:TCLIService.java:1437, org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement:getResult:TCLIService.java:1422, org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39, org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39, org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56, org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286, java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1142, java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:617, java.lang.Thread:run:Thread.java:745, *org.apache.hadoop.hive.ql.parse.SemanticException:Line 1:23 Invalid column reference '`*date`': Dangling meta character '*' near index 0
*date
^:31:15, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genColListRegex:SemanticAnalyzer.java:3419, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genSelectPlan:SemanticAnalyzer.java:4368, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genSelectPlan:SemanticAnalyzer.java:4167, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genPostGroupByBodyPlan:SemanticAnalyzer.java:9705, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genBodyPlan:SemanticAnalyzer.java:9644, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genPlan:SemanticAnalyzer.java:10549, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genPlan:SemanticAnalyzer.java:10427, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:genOPTree:SemanticAnalyzer.java:11125, org.apache.hadoop.hive.ql.parse.CalcitePlanner:genOPTree:CalcitePlanner.java:481, org.apache.hadoop.hive.ql.parse.SemanticAnalyzer:analyzeInternal:SemanticAnalyzer.java:11138, org.apache.hadoop.hive.ql.parse.CalcitePlanner:analyzeInternal:CalcitePlanner.java:286, org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer:analyze:BaseSemanticAnalyzer.java:258, org.apache.hadoop.hive.ql.Driver:compile:Driver.java:512, org.apache.hadoop.hive.ql.Driver:compileInternal:Driver.java:1317, org.apache.hadoop.hive.ql.Driver:compileAndRespond:Driver.java:1295, org.apache.hive.service.cli.operation.SQLOperation:prepare:SQLOperation.java:204], sqlState:42000, errorCode:40000, errorMessage:Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid column reference '`*date`': Dangling meta character '*' near index 0
*date
^), Query: select type,nameobject,`*date`
from tblobj2 
limit 10.

2 - 使用 Hive 同樣 也報錯:

hive> select nameobject,type,`*date` from tblobj2 limit 10 ;
FAILED: SemanticException [Error 10004]: Line 1:23 Invalid table alias or column reference '*date': (possible column names are: nameobject, object_id, principal_id, schema_id, parent_object_id, type, type_desc, create_date, modify_date, is_ms_shipped, is_published, is_schema_published)

解決方案:

set hive.support.quoted.identifiers=none 
select type,nameobject, `.+date`
from tblobj2 
where create_date is not null 
limit 10
set hive.support.quoted.identifiers=none

quoted.identifier 這才是解決問題的關鍵。《Hive Programming》中居然也沒有提到如何解決。

image

相關推薦

Hive 程式設計專題 使用指定出列

環境: Hive: 2.7.7 Oracle SQL Developer Cloudera JDBC Driver 案例: select type,nameobject,`*date` from tblobj2 limit 10 ; 錯誤: 1 - 使用

linux學習筆記之shell程式設計表示式與字元處理

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則表示式常用的字元(注意區別於萬用字元裡面的符號)#### -*

python核心程式設計第三版()學習筆記表示式

注:下面有些內容不全都來源於原著,這些都是通過各方面的資料收集合並的結果。 目錄 1、元字元 3、邊界詞 4、分組詞 一、正則表示式介紹 正則表示式為高階的文字模式匹配、抽取、與/或文字形式的搜尋和替換功

《零基礎入門學習Python》第057講隻爬蟲的自我修養5表示式

如果你在課後有勤加練習,那麼你對於字串的查詢應該是已經深惡痛絕了,你發現下載一個網頁是很容易的,但是要在網頁中查詢到你需要的內容,那就是困難的,你發現字串查詢並沒有你想象的那麼簡單,並不是說直接使用 find 方法找到匹配字串的位置就可以了。 我們來舉個例子,學習了前面幾節課你應該已經嘗試過

《零基礎入門學習Python》第060講隻爬蟲的自我修養8表示式4

有了前面幾節課的準備,我們這一次終於可以真刀真槍的幹一場大的了,但是呢,在進行實戰之前,我們還要講講正則表示式的實用方法和擴充套件語法,然後再來實戰,大家多把持一會啊。 我們先來翻一下文件: 首先,我們要舉的例子是講得最多的 search() 方法,search() 方法 既有模組級別的

《零基礎入門學習Python》第059講隻爬蟲的自我修養7表示式3

今天我們先接著上節課的內容,把 Python3 正則表示式特殊符號及用法(詳細列表)這個表格講完: 上節課我們介紹了正則表示式的特殊字元中的 元字元,正則表示式的特殊字元除了 元字元之外呢,還有 一種就是通過反斜槓加上一個普通字元組成的特殊符號。我們接下來談談它們的含義。 \序

《零基礎入門學習Python》第058講隻爬蟲的自我修養6表示式2

上一節課我們通過一個例子(匹配 ip 地址)讓大家初步瞭解到正則表示式的魔力,也讓大家充分了解到學習正則表示式是一個相對比較困難的事情。所以這一節課我們將繼續學習 正則表示式的語法。 我們依稀還記得在Python中,正則表示式是以字串的形式來描述的,正則表示式的強大之處在於特殊符號的應用,我

二十、Go基礎程式設計表示式

正則表示式是一種進行模式匹配和文字操縱的複雜而又強大的工具。雖然正則表示式比純粹的文字匹配效率低,但是它卻更靈活。按照它的語法規則,隨需構造出的匹配模式就能夠從原始文字中篩選出幾乎任何你想要得到的字元組合。 Go語言通過regexp標準包為正則表示式提供了官方支援,如果你已

python3基礎

簡介 正則是一個字串規則,本身也是一個字元型,用來檢查一個串是否含有字串。可以做精確匹配,模糊匹配,進行字串替換,切割,尤其是在造資料,分析日誌時用的非常多。 python中處理正則表示式的模組是re模組,正則表示式由一些普通字元和一些元字元組成,普通字元包括大小寫字母、數字和列印符號,而元

Python核心程式設計第三版練習參考(第一章表示式)

1-1 識別後續的字串:“bat”、“bit”、“but”、“hat”、“hit”或者“hut”。 答:'[bh][aiu]t' 1-2 匹配由單個空格分隔的任意單詞對,也就是姓和名。 答:'\w+\s\w+' 1-3 匹配由單個逗號和單個空白符分隔的任何單詞和單個字

面試常見程式設計專題連結串列

最近在準備找實習,各種刷題。準備把刷過的題以專題的形式做個總結。 先說說連結串列,連結串列是一種動態的資料結構,其操作需要通過指標來完成,因此常被用作考察重點。 本文中的單向連結串列節點定義如下: struct ListNode { int value; ListNode

解決過擬合的方式(

一、過擬合 監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練資料,而規則化引數是防止我們的模型

Python核心程式設計第二版第十五章表示式(課後習題)----我的答案

15-1.識別下列字串:“bat”,“bit”,“but”,“hat”,“hit“或”hut“。import re key = 'batshdajbut' p1 = r'(bat|bit|but|hat|hit|hut)' pattern1 = re.compile(p1)

python1

itl .com fis 使用 pos clas nbsp com 正則表達式 魚c(擴展閱讀): Python3 如何優雅地使用正則表達式(詳解一) Python3 如何優雅地使用正則表達式(詳解二) Python3 如何優雅地使用正則表達式(詳解三) Python3 如

Shell第二篇表達式和文本處理工具

chan 金字塔 文本 lar 乘法 res 每次 比較 而是 一 什麽是正則   正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。 生活中處處都是正則: 比如我們描述:4條腿

小tips表達式中的RegExp.$1

屬性 pre con clas 對象 logs 出生日期 tip log RegExp 是javascript中的一個內置對象。為正則表達式。RegExp.$1是RegExp的一個屬性,指的是與正則表達式匹配的第一個子匹配(以括號為標誌)字符串,以此類推,RegExp.$2

學了丟丟的皮毛

als 裏的 match 方法 str null true 替換字符串 bsp 正則 怎樣識別正則:兩個斜杠開頭"/\" 註意:正則只對字符串有用 替換字符串repalce 例: var str =‘123;123;123‘; str.repalce(‘ / \ ; /g

python學習筆記9表達式

使用 引入 常用 常用的正則表達式 需要 style pan 表達式 span 一、簡介   正則表達式就是用來查找字符串的;用來匹配一些比較復雜的字符串。   使用正確表達式需要引入re模塊 (regular定期的有規律的)    二、匹配字符串的方法

Day13表達式

接下來 name 去除 arc 貪婪 特殊 進制數 編程 dha 一.re模塊 就其本質而言,正則表達式(或 RE)是一種小型的、高度專業化的編程語言,(在Python中)它內嵌在Python中,並通過 re 模塊實現。正則表達式模式被編譯成一系列的字節碼,然後由用 C 編

第二篇表達式

utf-8 re模塊 數字 Coding 爬蟲 無限 正則 lfa this 爬蟲需要用到正則,python內置了正則re模塊 #!/usr/bin/env python3.5 # _*_coding:utf-8 _*_ import re #要匹配對象 line