2017-09-21 1 views
0

현재 vertica 데이터베이스에서 작업하고 있습니다. 하나의 열에 정수 배열을 저장하는 중 문제가 있습니다. CSV를 통해 데이터 값을 가져 왔습니다.Vertica 데이터베이스에 정수 배열을 저장하려면 어떻게해야합니까?

테이블을 만들 때 다음 코드를 사용했습니다.

CREATE TABLE testing_table_1 (email varchar,name varchar,gen int,yob int,ct int,cy int,a varchar(65000),b varchar(65000),c varchar(65000)); 

다음 코드로 가져온 데이터입니다.

COPY testing_table_1 from '/home/naresh/Desktop/bigfile.csv' parser fcsvparser(); 

샘플 CSV 형식은 다음과 같습니다.

[email protected] | Donald Garcia | 2 | 2003 | 21947 | 91 | 241,127,225,68,162 | 4,84,63,69,15 | 32,44,15,31 
[email protected] | Charles Brown | 2 | 2012 | 22218 | 45 | 127,156,186,136,242 | 49,69,14,80,95,1 | 39,36,38,40,20 

7 번째, 8 번째 및 9 번째 열이 문자열 형식으로 저장됩니다. 하지만 원하는 것은 정수 형식의 배열로 저장되기를 원합니다.

문자열 형식 때문에 'IN'쿼리를 사용하여 정수 연산 조합을 수행 할 수 없습니다.

저는 vertica에서 플렉스 테이블 형식을 사용하고 싶지 않습니다. 플렉스 테이블 형식 이외의 제안을하십시오.

위의 문제에 대한 가능한 해결책을 제공해주십시오.

실수를 저지른 경우 제발 해결하십시오.

미리 감사드립니다.

+0

그 컬럼의 데이터 유형은'VarChar', 물론 그것을 저장하는 것 문자열입니다. 그리고 afaik Vertica는 배열을 지원하지 않습니다. – dnoeth

+0

정수 배열을 flex 테이블 형식으로 저장합니다. 다음 링크를 확인하십시오. https://my.vertica.com/docs/7.2.x/HTML/index.htm#Authoring/FlexTables/ComplexDataTypesForfavroparser.htm#Arrays –

답변

2

Vertica는 SQL 기반의 관계형 데이터베이스입니다.

실제로 배열에는 가변 개수의 열이 없습니다. 배열을 사용하는 것이 그 것입니다.

[...] 91 | 241,127,225,68,162 | 4,84,63,69,15 | 32,44,15,31 

이 : 당신이해야 할 것은이 가운데 수 있도록하는 것입니다

[...] 91 | 1 | 241 | 4 | 32 
[...] 91 | 2 | 127 | 84 | 44 
[...] 91 | 3 | 225 | 63 | 15 
[...] 91 | 4 | 68 | 69 | 31 
[...] 91 | 5 | 162 | 15 |(null) 

체크 아웃 SPLIT_PART() 함수를; 1,2,3,4로 실행하고 마지막으로 5를 세 번째 매개 변수로 실행하고 위의 두 번째 표시된 열에서 볼 수있는 키로 바로 그 번호를 사용할 수 있습니다. 결과 열을 정수로 가져 오려면 SPLIT_PART() 함수에서 나온 문자열을 정수로 변환하십시오.

행운을 빕니다 - 마르코

+0

네, 이것이 올바른 접근 방법입니다. 유일한 대안 - 만약 ** ** "하나의 열에 정수의 배열"을 저장하고 싶다면 - 각 배열 요소를 64 비트 정수로 변환하고 모든 것을 VARBINARY에 저장하는 것입니다. – mauro

관련 문제