현재 회사의 큰 데이터 팀에서 일하고 있습니다. 데이터를 내보내고 추출한 semi-structred JSON에 대한 쿼리를 만들기 위해 dynamo db에서 amazon s3으로 데이터를 내보낼 필요가 있습니다. 임시 쿼리를 작성하는 데 40 분이 걸립니다. 전체 테이블 스캔. 나는 apache drill과 unstructred data에 초 쿼리를 할 수있는 능력에 대해 읽었으며, apache drill을 수행하거나 json을 flattening하고 하이브 ORC 테이블 (10,000 컬럼)으로 저장해야합니까? 다른 말로하면 전체 테이블 스캔을 할 필요없이 쿼리를 작성해야합니다.Dynamo DB에서 S3로 데이터를 내보내고 (현재 테이블 스캔 쿼리를 40 분 동안 실행하는 대신) 빠른 임시 쿼리를 수행하려면 어떻게해야합니까?
답변
음,
아파치 드릴 작업을 계획하는 경우, 즉 데이터의 형식을 변경하지 않는 것이 좋은 선택이 될 것입니다. 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은 빠르고, 작고 저렴합니다. 그러나 스키마를 작성하는 데 많은 시간이 소요됩니다.
나는 같은 종류의 문제에 직면하고있다. 나는 kinesis와 lambda를 사용하여 dynamodb로 데이터를 스트리밍하지만, 그렇다면 Tableau와 같은 BI 도구를 사용하여 임시 쿼리를 수행하고 싶습니다. Athena를 사용하는 아이디어가 마음에 들지만 작동하려면 s3에서 dynamodb에 저장된 데이터를 내 보내야합니다. ORC 또는 쪽모이 세공 파일을 말하도록 데이터를 내보내는 방법을 제안 해 주시겠습니까? 나는 node-js lambda를 사용할 생각이었다. 너는 무엇을 제안 하겠는가? – Breach
@Breach AWS를 사용하는 경우 새 도구를 사용해 볼 수 있습니다. AWS Glue는 AWS 응용 프로그램의 ETL입니다. 여기를 확인하십시오 : https://aws.amazon.com/glue/ AWS Plataform의 전체 관리 ETL입니다. 그럼 정말 새로운 도구이며 좋은 일을 의미합니다. –
좋은 제안. 접착제는 현재 미리보기에 있지만 토지에 도착하자 마자 시도 할 것입니다. – Breach