[HADOOP] 드롭 TABLE 문에 하이브는 ParseException
HADOOP드롭 TABLE 문에 하이브는 ParseException
나는 하둡에 하이브 쿼리를 실행하기 위해 특히 파이썬과 pyodbc 모듈을 사용하고 있습니다. 코드 트리거링 문제의 일부는이 같다 :
import pyodbc
import pandas
oConnexionString = 'Driver={ClouderaHive};[...]'
oConnexion = pyodbc.connect(oConnexionString, autocommit=True)
oConnexion.setencoding(encoding='utf-8')
oQueryParameter = "select * from my_db.my_table;"
oParameterData = pandas.read_sql(oQueryParameter, oConnexion)
oCursor = oConnexion.cursor()
for oRow in oParameterData.index:
sTableName = oParameterData.loc[oRow,'TableName']
oQueryDeleteTable = 'drop table if exists my_db.' + sTableName + ';'
print(oQueryDeleteTable)
oCursor.execute(oQueryDeleteTable)
dl_audit_data_quality.hero_context_start_gamemode을 존재하는 경우 테이블을 삭제; 인쇄이주는
그러나 cursor.execute 다음과 같은 오류 메시지가 트리거
내가 인쇄를 복사하여 수동으로 색조를 실행할 때, 그것은 잘 작동합니다. 나는 변수 sTableName의 인코딩 함께 할 수있는 뭔가가 추측하고 있지만, 나는 그것을 해결하는 방법을 알아낼 수 없습니다.
감사
해결법
-
==============================
1.쿼리는 변수 sTableName의 잘못된 인코딩으로 인해 실패했다. 혼자 변수를 인쇄하면 제대로 텍스트를 표시합니다. 위의 인쇄와 예 :
쿼리는 변수 sTableName의 잘못된 인코딩으로 인해 실패했다. 혼자 변수를 인쇄하면 제대로 텍스트를 표시합니다. 위의 인쇄와 예 :
>>> print(oQueryDeleteTable) >>> 'drop table if exists dl_audit_data_quality.hero_context_start_gamemode;'
그러나 원래의 데이터 프레임은이 같은 문자를 포함 보여 주었다 인쇄 :
>>> print(oParameterData.loc[oRow,'TableName'] >>> 'h\x00e\x00r\x00o\x00_c\x00o\x00n\x00t\x00e\x00x\x00t\x00'
여기에 설명 된대로 문제가 인코딩에 재 작업에 의해 해결되었다 : 파이썬 사전 인코딩 된 값을 포함합니다
import pyodbc import pandas oConnexionString = 'Driver={ClouderaHive};[...]' oConnexion = pyodbc.connect(oConnexionString, autocommit=True) oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8') oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8') oConnexion.setencoding(encoding='utf-8') oQueryParameter = "select * from my_db.my_table;" oParameterData = pandas.read_sql(oQueryParameter, oConnexion) oCursor = oConnexion.cursor() for oRow in oParameterData.index: sTableName = oParameterData.loc[oRow,'TableName'] oQueryDeleteTable = 'drop table if exists my_db.' + sTableName + ';' print(oQueryDeleteTable) oCursor.execute(oQueryDeleteTable)
from https://stackoverflow.com/questions/43821098/hive-parseexception-in-drop-table-statement by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 자바 HDFS에서 파일을 읽기 (0) | 2019.09.20 |
---|---|
[HADOOP] 하둡에서 데이터 노드의 변경 번호 (0) | 2019.09.20 |
[HADOOP] 맵리 듀스에 MySQL의 오류로 Sqoop을 수출 지역 CSV (0) | 2019.09.19 |
[HADOOP] 어떻게 쿼리에서 하이브 날짜 시간에 그물의 DateTime.Ticks를 변환하는? (0) | 2019.09.19 |
[HADOOP] 어떻게 하둡에 의해 실행 완료된 작업의 통계를 얻으려면? (0) | 2019.09.19 |