1

현재 회사의 큰 데이터 팀에서 일하고 있습니다. 데이터를 내보내고 추출한 semi-structred JSON에 대한 쿼리를 만들기 위해 dynamo db에서 amazon s3으로 데이터를 내보낼 필요가 있습니다. 임시 쿼리를 작성하는 데 40 분이 걸립니다. 전체 테이블 스캔. 나는 apache drill과 unstructred data에 초 쿼리를 할 수있는 능력에 대해 읽었으며, apache drill을 수행하거나 json을 flattening하고 하이브 ORC 테이블 (10,000 컬럼)으로 저장해야합니까? 다른 말로하면 전체 테이블 스캔을 할 필요없이 쿼리를 작성해야합니다.Dynamo DB에서 S3로 데이터를 내보내고 (현재 테이블 스캔 쿼리를 40 분 동안 실행하는 대신) 빠른 임시 쿼리를 수행하려면 어떻게해야합니까?

답변

1

음,

아파치 드릴 작업을 계획하는 경우, 즉 데이터의 형식을 변경하지 않는 것이 좋은 선택이 될 것입니다. Apache를 사용하여 JSON을 사용하는 경우 데이터를 테이블 스캔하고 S3 데이터에서 큰 IO를 수행합니다. Spark가 그렇게하는 것이 더 빠를 것입니다.

그러나 Drill documentation에 따르면 더 빠른 SQL 쿼리를 위해 Parquet을 사용하는 것이 좋습니다. 이것은 컬럼 형 인터페이스로 인한 IO를 줄입니다. 1 만 열은 큰 문제가되지 않습니다, 드릴도 flat 데이터 것입니다.

데이터를 압축 할 수 있도록 Orc에 데이터를 플랫 화하고 실제로 Presto 또는 AWS Athena로 데이터를 쿼리 할 수있는 형식으로 데이터를 쿼리 할 수 ​​있습니다. Orc, 또는 Parquet을 사용하는 장점은 둘 다 원주 형 데이터 파일입니다. Metastore 정보에 관한 읽기의 IO 시간이 줄어 듭니다. 스키마를 설정하면 완료됩니다.

큰 문제는 스키마를 작성하는 데 따른 오버 헤드입니다. 이는 거대한 오버 헤드가 될 것입니다.

그래서 선택하십시오. Apache Drill을 사용하면 Json 형식으로 스키마를 추론하여 스키마 형식 등을 구축하는 오버 헤드를 줄일 수 있으며 쿼리 용으로 Spark보다 빠를 수도 있습니다. 하지만 파일을 오크 또는 쪽모 세공 형식으로 변환하는 것보다 빠르지는 않습니다. 컴팩트하지 않아 더 많은 데이터를 저장하고 읽을 데이터가 많아 져 AWS에서 더 많은 돈을 쓸 수 있습니다. Usin Orc 또는 Parquet은 빠르고, 작고 저렴합니다. 그러나 스키마를 작성하는 데 많은 시간이 소요됩니다.

+1

나는 같은 종류의 문제에 직면하고있다. 나는 kinesis와 lambda를 사용하여 dynamodb로 데이터를 스트리밍하지만, 그렇다면 Tableau와 같은 BI 도구를 사용하여 임시 쿼리를 수행하고 싶습니다. Athena를 사용하는 아이디어가 마음에 들지만 작동하려면 s3에서 dynamodb에 저장된 데이터를 내 보내야합니다. ORC 또는 쪽모이 세공 파일을 말하도록 데이터를 내보내는 방법을 제안 해 주시겠습니까? 나는 node-js lambda를 사용할 생각이었다. 너는 무엇을 제안 하겠는가? – Breach

+0

@Breach AWS를 사용하는 경우 새 도구를 사용해 볼 수 있습니다. AWS Glue는 AWS 응용 프로그램의 ETL입니다. 여기를 확인하십시오 : https://aws.amazon.com/glue/ AWS Plataform의 전체 관리 ETL입니다. 그럼 정말 새로운 도구이며 좋은 일을 의미합니다. –

+0

좋은 제안. 접착제는 현재 미리보기에 있지만 토지에 도착하자 마자 시도 할 것입니다. – Breach