[HADOOP] HiveQL 쿼리의 결과를 CSV로 어떻게 출력합니까?
HADOOPHiveQL 쿼리의 결과를 CSV로 어떻게 출력합니까?
우리는 하이브 쿼리의 결과를 CSV 파일에 저장하려고합니다. 명령이 이렇게 보일 것이라고 생각했습니다.
insert overwrite directory '/home/output.csv' select books from table;
내가 그것을 실행할 때 성공적으로 완료되었다고하지만 파일을 찾을 수는 없다고합니다. 이 파일을 찾으려면 어떻게해야합니까? 아니면 다른 방식으로 데이터를 추출해야합니까?
감사!
해결법
-
==============================
1.Hive에서 데이터를 가져 오기 위해 INSERT OVERWRITE를 사용할 수도 있지만 특정 경우에 가장 적합한 방법은 아닙니다. 먼저 INSERT OVERWRITE가하는 일을 설명하고 Hive 테이블에서 tsv 파일을 가져 오는 데 사용하는 방법을 설명합니다.
Hive에서 데이터를 가져 오기 위해 INSERT OVERWRITE를 사용할 수도 있지만 특정 경우에 가장 적합한 방법은 아닙니다. 먼저 INSERT OVERWRITE가하는 일을 설명하고 Hive 테이블에서 tsv 파일을 가져 오는 데 사용하는 방법을 설명합니다.
설명서에 따르면 쿼리는 HDFS의 디렉토리에 데이터를 저장합니다. 형식은 CSV가 아닙니다.
약간의 수정 (LOCAL 키워드 추가)은 데이터를 로컬 디렉토리에 저장합니다.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
비슷한 쿼리를 실행하면 결과는 다음과 같습니다.
[lvermeer@hadoop temp]$ ll total 4 -rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0 [lvermeer@hadoop temp]$ head 000000_0 "row1""col1"1234"col3"1234FALSE "row2""col1"5678"col3"5678TRUE
개인적으로, 나는 보통 이런 종류의 명령 행에서 Hive를 통해 내 쿼리를 직접 실행하고 다음과 같이 로컬 파일에 파이프한다.
hive -e 'select books from table' > /home/lvermeer/temp.tsv
그러면 탭으로 구분 된 파일을 사용할 수 있습니다. 그게 너에게 도움이되기를 희망한다.
이 패치 -3682를 기반으로, Hive 0.11을 사용할 때 더 나은 솔루션을 사용할 수 있다고 의심하지만 직접 테스트 할 수는 없습니다. 새로운 구문은 다음을 허용해야합니다.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select books from table;
희망이 도움이됩니다.
-
==============================
2.CSV 파일을 원할 경우 다음과 같이 Lukas의 솔루션을 수정할 수 있습니다 (Linux 상자에 있다고 가정).
CSV 파일을 원할 경우 다음과 같이 Lukas의 솔루션을 수정할 수 있습니다 (Linux 상자에 있다고 가정).
hive -e 'select books from table' | sed 's/[[:space:]]\+/,/g' > /home/lvermeer/temp.csv
-
==============================
3.CREATE TABLE AS SELECT (CTAS) 문을 사용하여 HDFS에 쿼리 결과가 포함 된 파일로 디렉터리를 생성해야합니다. 그런 다음 HDFS에서 일반 디스크로 파일을 내보내고 단일 파일로 병합해야합니다.
CREATE TABLE AS SELECT (CTAS) 문을 사용하여 HDFS에 쿼리 결과가 포함 된 파일로 디렉터리를 생성해야합니다. 그런 다음 HDFS에서 일반 디스크로 파일을 내보내고 단일 파일로 병합해야합니다.
또한 '\ 001'(CSV로 구분)에서 파일을 변환 할 때 약간의 속임수를 써야 할 수도 있습니다. 사용자 정의 CSV SerDe를 사용하거나 추출 된 파일을 사후 처리 할 수 있습니다.
-
==============================
4.HUE를 사용한다면이 방법도 상당히 간단합니다. HUE의 Hive 편집기로 이동하여 하이브 쿼리를 실행 한 다음 결과 파일을 XLS 또는 CSV로 로컬로 저장하거나 결과 파일을 HDFS에 저장할 수 있습니다.
HUE를 사용한다면이 방법도 상당히 간단합니다. HUE의 Hive 편집기로 이동하여 하이브 쿼리를 실행 한 다음 결과 파일을 XLS 또는 CSV로 로컬로 저장하거나 결과 파일을 HDFS에 저장할 수 있습니다.
-
==============================
5.나는 비슷한 해결책을 찾고 있었지만 여기에 언급 된 것들은 효과가 없을 것이다. 내 데이터에는 공백 (공백 문자, 줄 바꿈, 탭) 문자 및 쉼표의 모든 변형이있었습니다.
나는 비슷한 해결책을 찾고 있었지만 여기에 언급 된 것들은 효과가 없을 것이다. 내 데이터에는 공백 (공백 문자, 줄 바꿈, 탭) 문자 및 쉼표의 모든 변형이있었습니다.
열 데이터 tsv를 안전하게 만들려면 다음과 같이 열 데이터의 모든 \ t 문자를 공백으로 바꾼 다음 명령 줄에서 python 코드를 실행하여 csv 파일을 생성합니다.
hive -e 'tab_replaced_hql_query' | python -c 'exec("import sys;import csv;reader = csv.reader(sys.stdin, dialect=csv.excel_tab);writer = csv.writer(sys.stdout, dialect=csv.excel)\nfor row in reader: writer.writerow(row)")'
이것은 완벽하게 유효한 csv를 만들었습니다. 희망은이 솔루션을 찾고있는 사람들을 도울 수 있기를 바랍니다.
-
==============================
6.하이브 문자열 함수 CONCAT_WS (문자열 구분 기호, 문자열 str1, 문자열 str2 ... strn)를 사용할 수 있습니다.
하이브 문자열 함수 CONCAT_WS (문자열 구분 기호, 문자열 str1, 문자열 str2 ... strn)를 사용할 수 있습니다.
예 :
hive -e 'select CONCAT_WS(',',cola,colb,colc...,coln) from Mytable' > /home/user/Mycsv.csv
-
==============================
7.이 예제에서와 같이 INSERT ... DIRECTORY ...를 사용할 수 있습니다.
이 예제에서와 같이 INSERT ... DIRECTORY ...를 사용할 수 있습니다.
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees' SELECT name, salary, address FROM employees WHERE se.state = 'CA';
OVERWRITE 및 LOCAL은 이전과 동일한 해석을하고 경로는 일반적인 규칙에 따라 해석됩니다. 호출 된 reduders의 수에 따라 하나 이상의 파일이 / tmp / ca_employees에 기록됩니다.
-
==============================
8.나는 비슷한 문제를 겪었고 이것이 내가 어떻게 대처할 수 있었는지를 보여준다.
나는 비슷한 문제를 겪었고 이것이 내가 어떻게 대처할 수 있었는지를 보여준다.
1 단계 - 다음과 같이 Hive 테이블의 데이터를 다른 테이블에로드합니다.
DROP TABLE IF EXISTS TestHiveTableCSV; CREATE TABLE TestHiveTableCSV ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' AS SELECT Column List FROM TestHiveTable;
2 단계 - Hive 창고의 블롭을 적절한 위치로 새 위치로 복사합니다.
Start-AzureStorageBlobCopy -DestContext $destContext -SrcContainer "Source Container" -SrcBlob "hive/warehouse/TestHiveTableCSV/000000_0" -DestContainer "Destination Container" -DestBlob "CSV/TestHiveTable.csv"
-
==============================
9.기본 구분 기호는 "^ A"입니다. 파이썬 언어에서는 "\ x01"입니다.
기본 구분 기호는 "^ A"입니다. 파이썬 언어에서는 "\ x01"입니다.
구분 기호를 변경하려면 다음과 같이 SQL을 사용합니다.
SELECT col1, delimiter, col2, delimiter, col3, ..., FROM table
그런 다음 구분 기호 + "^ A"를 새로운 구분 기호로 간주하십시오.
-
==============================
10.위의 Ray의 답변과 마찬가지로 Hortonworks 데이터 플랫폼의 Hive View 2.0을 사용하면 Hive 쿼리를 실행 한 다음 출력을 csv로 저장할 수도 있습니다.
위의 Ray의 답변과 마찬가지로 Hortonworks 데이터 플랫폼의 Hive View 2.0을 사용하면 Hive 쿼리를 실행 한 다음 출력을 csv로 저장할 수도 있습니다.
-
==============================
11.Windows에서이 작업을 수행하는 경우 Python 스크립트 hivehoney를 사용하여 테이블 데이터를 로컬 CSV 파일로 추출 할 수 있습니다.
Windows에서이 작업을 수행하는 경우 Python 스크립트 hivehoney를 사용하여 테이블 데이터를 로컬 CSV 파일로 추출 할 수 있습니다.
그것은 할 것이다 :
다음과 같이 실행하십시오 :
set PROXY_HOST=your_bastion_host set SERVICE_USER=you_func_user set LINUX_USER=your_SOID set LINUX_PWD=your_pwd python hh.py --query_file=query.sql
-
==============================
12.다양한 옵션을 시도했지만, 이것은 Python Pandas를위한 가장 간단한 솔루션 중 하나입니다.
다양한 옵션을 시도했지만, 이것은 Python Pandas를위한 가장 간단한 솔루션 중 하나입니다.
hive -e 'select books from table' | grep "|" ' > temp.csv df=pd.read_csv("temp.csv",sep='|')
tr "|" ","변환 "|" ~ ","
-
==============================
13.쿼리를 시작한 후 다음 단계를 더 포함하면됩니다. 덮어 쓰기 로컬 디렉토리 '/ home / lvermeer / temp' 행 형식이 제한됨 ','에 의해 종료 된 필드 테이블에서 책을 선택하십시오;
쿼리를 시작한 후 다음 단계를 더 포함하면됩니다. 덮어 쓰기 로컬 디렉토리 '/ home / lvermeer / temp' 행 형식이 제한됨 ','에 의해 종료 된 필드 테이블에서 책을 선택하십시오;
내 경우, 임시 폴더 아래에 생성 된 데이터가 deflate 형식으로, 다음과 같이 보입니다.
$ ls 000000_0.deflate 000001_0.deflate 000002_0.deflate 000003_0.deflate 000004_0.deflate 000005_0.deflate 000006_0.deflate 000007_0.deflate
수축 된 파일의 압축을 풀고 모든 것을 하나의 CSV 파일에 저장하는 명령은 다음과 같습니다.
hadoop fs -text "file:///home/lvermeer/temp/*" > /home/lvermeer/result.csv
-
==============================
14.
hive --outputformat=csv2 -e "select * from yourtable" > my_file.csv
또는
hive --outputformat=csv2 -e "select * from yourtable" > [your_path]/file_name.csv
tsv의 경우 위의 쿼리에서 csv를 tsv로 변경하고 쿼리를 실행하십시오.
-
==============================
15.나는 이것에 늦을 지 모르지만 그 답을 도울 것입니다 :
나는 이것에 늦을 지 모르지만 그 답을 도울 것입니다 :
에코 "COL_NAME1 | COL_NAME2 | COL_NAME3 | COL_NAME4"> SAMPLE_Data.csv 하이브 -e ' distinct concat (COL_1, "|", COL_2, "|", COL_3, "|", COL_4) from table_Name where 절 필요하다면 ' >> SAMPLE_Data.csv
-
==============================
16.이 셸 명령은 열 머리글없이 csv의 출력 형식을 output.txt로 인쇄합니다.
이 셸 명령은 열 머리글없이 csv의 출력 형식을 output.txt로 인쇄합니다.
$ hive --outputformat=csv2 -f 'hivedatascript.hql' --hiveconf hive.cli.print.header=false > output.txt
from https://stackoverflow.com/questions/18129581/how-do-i-output-the-results-of-a-hiveql-query-to-csv by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS 오류 : 1 대신에 0 노드로만 복제 할 수있었습니다. (0) | 2019.05.29 |
---|---|
[HADOOP] Hive에서 레코드를 삭제하고 업데이트하는 방법 (0) | 2019.05.29 |
[HADOOP] 하이브의 분할 된 테이블에 대해 얼마나 많은 매퍼와 축소 기가 만들어 지는지 (0) | 2019.05.29 |
[HADOOP] 병렬로 IN 절 매개 변수를 사용하여 하이브 쿼리를 실행합니다. (0) | 2019.05.29 |
[HADOOP] hadoop에서 단일 레코드로 파일 읽기 (0) | 2019.05.29 |