2012-06-13 6 views
0

저는 파이프 라인을 사용하여 데이터 저장소에서 클라우드 저장소로 큰 쿼리로 데이터를 옮기는 방법을 제안하는 Michael의 답변을 여기에서 읽었습니다.MapReduce에서 BigQuery 파이프 라인으로 중복 방지하기

Google App Engine: Using Big Query on datastore?

은 내가 BigQuery를 테이블에 데이터를 추가하기 위해이 기술을 사용하고 싶습니다. 즉, 엔티티가 처리되었는지 알 수있는 방법이 있어야하므로 mapreduce가 실행되는 동안 bigquery에 반복적으로 제출되지 않습니다. 매번 테이블을 다시 만들고 싶지 않습니다.

내가 보는 방법에는 두 가지 옵션이 있습니다. 엔티티에 플래그를 넣고 각 엔티티가 처리 될 때 업데이트하고 후속 실행에서 필터링 할 수 있습니다. 또는 - 각 엔티티를 새 테이블에 저장하고 소스 테이블에서 삭제할 수 있습니다. 두 번째 방법은 우월하다고 생각하지만 옵션을 요청하거나 문제가 있는지 확인하고 싶습니다.

답변

0

엔티티로 표시되는 활동 스트림이 있다고 가정하면 query cursors을 사용하여 이전에 중단 된 쿼리를 시작할 수 있습니다. 쿼리 커서는 처리 된 개체를 표시하는 오버 헤드를 피하기 때문에 설명 된 증분 상황의 유형에 완벽합니다.

App Engine MapReduce가 커서를 지원하는지 (아직는 그렇지 않다고 생각합니다) 조금만 둘러보아야합니다.

+0

나는 팬 아웃 (fan-out)을 사용해도 쿼리 커서를 사용했으며, 사용 사례에 대한 사용법을 조사했습니다. 문제는 fan-out 상황에서 쓰고있는 BLOB를 마무리 할 수 ​​있다는 것입니다. 팬 아웃 (fan-out)은 아이들의 일자리를 창출하기 때문에 모든 것이 끝났을 때 제 경우에는 결정하기가 어렵습니다. 그리고 나는 얼룩을 검사하기 위해 크론 작업을 쓰고 싶지 않습니다. 그래서 나는 파이프 라인을 사용하여 정말로 깨끗하게 일을 조정하려고합니다. 내 유스 케이스의 경우 정확성과 추적 가능성이 가장 중요합니다. –

+0

귀하의 상황에 대한 중요한 열쇠가 누락되었습니다. 일반적으로 할 일은 쿼리 끝에서 BLOB를 마무리하는 동시에 쿼리 커서를 가져 와서 저장하여 나중에 중단 한 부분을 선택할 수 있도록하는 것입니다. –

+0

다른 사람이 대답 해 주시겠습니까? 위의 대답은 받아 들일 수 없습니다. –

관련 문제