2017-01-24 2 views
4

우리는 PubSub 구독, 그룹 메시지를 읽고 BigQuery에 쓸 필요가있는 Google Cloud Dataflow 작업자에서 실행되는 스트리밍 데이터 흐름 파이프 라인을 보유하고 있습니다. 내장 된 BigQuery 싱크는 이 각 그룹에 대해 특정 데이터 세트 및 표를 타겟팅해야하므로 필요에 맞지 않습니다. 사용자 지정 싱크가 파이프 라인을 스트리밍하는 데 지원되지 않으므로 ParDo에서 작업을 수행하는 것이 유일한 해결 방법 인 것처럼 보입니다. 이런 식으로 뭔가 :싱크가없는 스트리밍 데이터 흐름 파이프 라인

enter image description here

파이프 라인의이 종류를 작성할 때 알아야 할 파이프 라인, 또는 아무것도에 싱크대를 가지고 있지 어떤 알려진 문제가 있습니까?

+0

입력에 따라 다른 데이터 세트/테이블에 작성해야하는 파이프 라인이 있습니다. 우리는 N 개의 BigQuery 싱크에 쓰기 위해'side outputs '를 사용합니다. 이것도 당신을 위해 일할 수 있을까요? –

+0

그것에 대해 생각했지만 N은 얼마나 큰가요? 우리에게 N은 약 1 백만입니다. – Thomas

+0

어 ... 우리는 약 10-20 개의 싱크대가 있습니다. 1 백만 명이 문제라고 생각합니다! 이는 이상한 요청처럼 들리지만 BigQuery에서 수백만 개의 다른 테이블에 작성해야한다는 사실입니다. 해결하려는 문제에 대해 좀 더 자세히 설명하고 더 많은 맥락을 제시 할 수 있습니까? –

답변

3

싱크대가없는 파이프 라인 작성시 문제가 없어야합니다. 실제로 싱크대는 스트리밍에서 ParDo 유형입니다.

사용자 지정 ParDo을 사용하고 BigQuery API를 사용자 지정 논리와 함께 사용하는 것이 좋습니다. 다음은 BigQuerySink의 정의입니다.이 코드를 시작점으로 사용할 수 있습니다.

StreamingWriteFn과 비슷한 고유 한 DoFn을 정의하여 사용자 정의 ParDo 로직을 추가 할 수 있습니다.이 로직은 적절한 BigQuery 데이터 세트/테이블에 기록됩니다.

GroupByKey 대신 Reshuffle을 사용한다는 점에 유의하십시오. Reshuffle은 키별로 그룹화하지만 불필요한 윈도우 지연을 피할 것을 권장합니다. 이 경우 요소가 추가 버퍼링/지연없이 들어오는 즉시 작성되어야한다는 것을 의미합니다. 또한 런타임시 BQ 테이블 이름을 결정할 수 있습니다.

편집 : 내장 된 BigQuerySink를 사용하여 다른 테이블에 쓰는 것을 권장하지 않습니다. 이 제안은 BigQuerySink를 사용하는 대신 사용자 정의 DoFn에서 BigQuery API를 사용하는 것입니다.

+0

ParDo 내부의 ProcessContext의 내용에 따라 BIgQuery 내의 특정 데이터 집합/테이블을 대상 지정하기 위해 사용자 지정 ParDo를 수행하는 방법을 보여주기 위해 여기에 몇 줄의 코드를 게시 할 수 있습니까? 우리는 비슷한 질문을 [link] (http://stackoverflow.com/questions/41698754/bigtable-bigquery-import-via-dataflow-2-questions-on-table-partitioning-and-tim) 여기에 내장 BQ DataFlow 싱크를 사용하는 동안 들어오는 PCollection 요소에 따라 프로그래밍 방식으로 대상 BQ 테이블 이름을 전달하는 방법을 파악할 수 없었습니다. –

+0

내장 된 BigQuerySink를 사용하여 다른 테이블에 쓰는 것을 권장하지 않습니다. 이 제안은 BigQuerySink를 사용하는 대신 BigQuerySink에서 BigQuery API를 사용하는 것입니다. @Thomas, 이 코드를 작성할 때 발생할 수있는 문제를 해결하는 데 도움을 드리겠습니다. 일단이 코드를 사용하면 몇 가지 샘플 코드를 기꺼이 공유 할 수 있습니까? 내가 제안한대로 접근법을 사용하기로 결정했다면. 다시 말하지만, 어떤 문제가 발생하면 알려주십시오. 기꺼이 도와 드리겠습니다. –

+0

@AlexAmato - 왜 안 되니? 합리적인 수의 싱크대 인 경우 파이프 라인에서 여러 개의 BigQuery 싱크를 사용하는 데 문제가 발생하지 않습니다. 즉측면 출력을 사용합니다. 우리는 많은 파이프 라인에서이 작업을 수행하며 실제로 잘 작동합니다. –

관련 문제