2016-08-04 4 views
-1

Azure BLOB에 방대한 데이터 세트가 JSON 형식으로 저장되어 있습니다. 일부 앱은 계속해서 새로운 데이터를 추가하고 있습니다. BLOB는 다음과 같은 파티션으로 구성됩니다.방대한 양의 JSON 데이터 세트에 대한 임시 쿼리

/dataset={name}/date={YYYY-MM-DD}/one_or_more_json_files 

데이터 조각은 특정 스키마를 따르지 않습니다. JSON 필드 이름의 대소 문자가 일관되지 않습니다. 일부 JSON 행이 손상 될 수 있습니다.

사전에 스키마를 정의하지 않고이 데이터를 쿼리하는 좋은 방법을 조언 해 줄 수 있습니까? 나는 나의 첫 번째 고려 사항은 HIVE했다 테이블

에 대한 명시 적 스키마를 정의하지 않고

select * from my_huge_json_dataset where dataset='mydataset' and date>'2015-04-01' 

같은 것을 할 싶습니다하지만 SerDe 스키마를 필요로하는 테이블을 만드는 정의 할 것으로 나타났다. json_tuple은 대답 일 수 있지만 대/소문자를 구분하며 잘못된 json 행을 만난 경우 충돌이 발생합니다.

또한 Apache Drill과 Pig를 고려하고 있지만 경험이 없으므로 지침이 필요합니다.

답변

0

, 당신은 당신의 데이터 세트 폴더를 가리키는 새 스토리지를 구성 할 필요가 당신은 아파치 드릴을 사용할 수 있습니다 : 당신이에서 조회 할 수 있습니다 예를 들어 'DFS'로 그 저장 플러그인을 정의하는 경우

{ 
    "type": "file", 
    "enabled": true, 
    "connection": "file:///", 
    "config": null, 
    "workspaces": { 
    "root": { 
     "location": "/", 
     "writable": false, 
     "defaultInputFormat": null 
    }, 
    "tmp": { 
     "location": "/tmp", 
     "writable": true, 
     "defaultInputFormat": null 
    } 
    }, 
"formats": { 
"json": { 
     "type": "json", 
     "extensions": [ 
     "json" 
     ] 
    } 
} 

그래서,

SELECT * FROM dfs.dataset.date.`file.json`; 

을하거나 dir0를 사용하여 동일한 쿼리에 폴더 이름을 기준으로 필터링 : ANSI SQL을 사용하여 스키마를 정의하지 않고 루트 디렉토리, 그냥 좋아.

내가 특별히 Querying JSON files

+0

는 단지 하나의 파일에 분할 또는 쿼리를 지원합니까 귀하의 경우 해당 설명서 사이트 Apache Drill documentation를 방문해 보시기 바랍니다? – irriss

+0

@Ruslan 예 하나의 파일이나 디렉토리를 쿼리 할 수 ​​있습니다 (모든 파일이 매우 유사한 json 구조라고 가정). 또한 데이터를 분할하여 쿼리를 최적화 할 수 있습니다 (이 예제 참조) (https://drill.apache.org/ docs/how-to-partition-data /) –