2015-01-20 4 views
0

iPython 노트에서 하이브를 쿼리하기 위해 pyhs2를 사용하고 있습니다. 나는 사용하고 싶다. Hive 쿼리의 WHERE 절에 있습니다. numpy 내의 체크 ndarray 오브젝트.아파치 하이브에서 numpy ndarray 객체를 사용하십시오 WHERE 조건

q = """ 
    SELECT * 
    FROM luca.pmp_imps iq 
    WHERE GUIDBINTOSTR(iq.bidrequestpid) IN {interestingbids} 
    """.format(interestingbids = interesting_bids) 
results = QueryDataFromHive(q) 

지금, 무엇을 QueryDataFromHive() 단순히 수행하는 하이브에서 쿼리를 실행하고 팬더 DataFrame 객체의 결과를 가져올 수 있습니다 :

쿼리는이 같은 것입니다. 그보다 더 복잡한 것은 없습니다. GuidBinToStr은 단순히 바이너리에서 변수를 문자열로 변환합니다.

하이브의 조회는 다음 될 것입니다 무언가 같이 : 물론

Pyhs2Exception       Traceback (most recent call last) 
<ipython-input-42-d535411ad0e2> in <module>() 
     9 
    10 # print(q) 
---> 11 imps_raw = QueryDataFromHive(q) 
    12 imps_raw.columns = ['bidrequest', 'userpid', 'mediacost', 'date', 'market'] 
    13 imps_raw.head() 

<ipython-input-21-8db015266821> in QueryDataFromHive(query) 
    10    cur.execute("CREATE TEMPORARY FUNCTION guidBinToStr AS 'com.companyname.hive.udf.UDFBinaryToGUID'") 
    11    cur.execute("CREATE TEMPORARY FUNCTION guidStrToBin AS 'com.companyname.hive.udf.GenericUDFGUIDToBinary'") 
---> 12    cur.execute(query) 
    13    df = pd.DataFrame() 
    14    for i in cur.fetch(): 

/usr/local/lib/python2.7/site-packages/pyhs2/cursor.pyc in execute(self, hql) 
    61   self.operationHandle = res.operationHandle 
    62   if res.status.errorCode is not None: 
---> 63    raise Pyhs2Exception(res.status.errorCode, res.status.errorMessage) 
    64 
    65  def fetch(self): 

Pyhs2Exception: "Error while processing statement: FAILED: ParseException line 4:44 cannot recognize input near 'IN' '[' ''00009eed-9756-437f-8e83-b0cbb3d375d2'' in expression specification\n" 

하이브 제대로 읽지 않습니다 때문에이 작동하지 않습니다

SELECT * 
    FROM luca.pmp_imps iq 
    WHERE GUIDBINTOSTR(iq.bidrequestpid) IN ['00009eed-9756-437f-8e83-b0cbb3d375d2' 
'000382d9-f1b2-4d12-b5b9-bb02d34bbb3c' 
'000565a3-f563-40db-b5b5-fe599acfc5ac' ..., 
'fff64455-3b1c-4ae2-bb9b-0f02c02aeccc' 
'fff8f63e-a66c-44b7-b393-0283d969db72' 
'ffffd616-370b-4ec5-8c4a-a9f8cdc53958'] 

나는 다음과 같은 오류 메시지를 받았습니다 오브젝트 파이썬이 발송 중입니다. 나는 누군가가 그런 문제를 겪어 보았는지 궁금해서 작업 해결책을 제시했다.

답변

0

표기법 문제입니다. WHERE 절에 사용중인 배열을 둘러싸는 대괄호 [] 대신에 괄호 ()을 사용하십시오. 초보 구체적인 예를 들어 : 또한

hive> select * from test; 
OK 
test.field1 test.field2 
value1  value2 
value3  value4 
value5  value6 
Time taken: 0.342 seconds, Fetched: 3 row(s) 
hive> select * from test where field1 in ['value1', 'value5']; 
... 
... [lots of stack trace spam here] ... 
... 
FAILED: ParseException line 1:35 cannot recognize input near 'in' '[' ''value1'' in expression specification 
hive> select * from test where field1 in ('value1', 'value5'); 
... 
... [lots of mapreduce spam here] ... 
... 
OK 
test.field1 test.field2 
value1  value2 
value5  value6 

, 당신이 이미하지 않은 경우 쉼표로 배열의 항목을 구분하고 있는지 확인 않습니다 (난 당신이 생각하는,하지만 나를 완전히 명확하지 않았다 질문에 게시 된 질의 발췌문).