2017-12-30 50 views
1

위의 방법을 사용하여 spark sql 작은 파일 문제를 해결하려고하는데, 조직의 사용자가 SQL 문을 전달하는 경우를 예로들 수 있습니다.별도의 선택 절 및 SQL 절의 삽입 절

insert overwrite table x partition (column1) select * from y; 

내가 스파크 SQL 문제에 위의 SQL을 실행할 수는 스파크 SQL에서 작동하지 않습니다 옵션 등 ... (작은 파일 = 진정한 병합) 한 하이브에 비해 작은 파일을 생성합니다.

나는 사용자가 SQL 문을 사용하는 것과 같이 select 절과 insert 절로 나누어서 Dataframe을 먼저 만들고 예상 크기를 가져 와서 아래의 목표 테이블에 삽입하는 작업을했습니다. 예.

val df=sqlContext.sql(select * from y) 
val size=SizeEstimator.estimate(df) 
val outputFiles=size/256000 
df.coleasce(outputFiles).wirte.mode.Append("x partition (column1)") 

는 정규식 기능을 선택하거나 절을 분리하고 SQL 문자열에서 절을 삽입 할 수있는 Java/스칼라 라이브러리가 있습니까?

감사

답변

0
나는 다음과 같은 정규 표현식을 사용

는 :

(.+?) (?=select)(.+) 

첫 번째 캡처 그룹은 INSERT 문을 포함하고 두 번째는 SELECT 문을 포함합니다. 물론, 대소 문자를 구별하지 않는 방법이 권장됩니다. 작동중인 데모 here을 볼 수 있습니다.