3

I 구글 BigQuery를 표하고 내가 술집 서브 주제로 전체 테이블을 스트리밍 할이스트림의 BigQuery 테이블/

을 할 수있는 쉬운/빠른 방법이 될해야하는지?

미리 감사드립니다.

답변

2

정말 테이블 크기에 따라 다릅니다.

작은 테이블 (수천 개의 레코드, 몇 개의 열)은 전체 테이블을 쿼리하고 응답을 JSON 배열로 변환하고 pub-sub로 푸시하는 프로세스를 설정할 수 있습니다.

가 큰 테이블이 있다면 (수백만/기록 수십억, 수백 개의 컬럼) 당신이 줄을 파일로 내 보낸 다음 술집 서브

그것은 또한 당신의 분할 정책에 따라 달라집니다로/배를 준비하는 - 테이블을 날짜별로 파티션하도록 설정하면 내보내기 대신 다시 쿼리 할 수 ​​있습니다.

마지막으로 중요한 것은 빈도에 달려 있습니다. 이것은 한 번 거래 (내보내기) 또는 연속 프로세스 (최신 데이터 만 쿼리하기 위해 테이블 ​​데코레이터 사용)입니까?

정말로 도움이되는 답변을 원하면 좀 더 자세한 정보가 필요합니다.

편집 테이블의 크기에 대한 귀하의 의견을 바탕으로

, 내가 가장 좋은 방법은 스크립트를 가지고있을 거라고 생각하는 것 : 줄 바꿈으로 GCS

  1. 내보내기 테이블 구분 된 JSON

  2. 파일을 처리하고 (행 단위로 읽음) 펍 서브

대부분의 프로그래밍 언어에는 client libraries이 있습니다. 필자는 Python과 유사한 작업을 수행했으며, 상당히 간단합니다.

+0

테이블에 3M 행과 ~ 7 개의 열이 있습니다 – MoShe

+0

한 번 업로드하거나 계속 하시겠습니까? –

+0

계속되지는 않지만 한 번 해보고 싶습니다. :) – MoShe

4

내가 아는 가장 쉬운 방법은 BigQuery 및 Pub/Sub에 액세스하는 방법을 기본적으로 알고있는 Google Cloud Dataflow를 이용하는 것입니다.

이론적으로 다음과 같은 파이썬 선으로 쉽게해야한다 :

p = beam.Pipeline(options=pipeline_options) 
tablerows = p | 'read' >> beam.io.Read(
    beam.io.BigQuerySource('clouddataflow-readonly:samples.weather_stations')) 
tablerows | 'write' >> beam.io.Write(
    beam.io.PubSubSink('projects/fh-dataflow/topics/bq2pubsub-topic')) 

파이썬/데이터 흐름/BigQuery에/PubSub 작동하지 않는 오늘날의 조합 (파이썬 데이터 흐름이 keep an eye on the changelog 베타 버전이지만).

우리는 자바에서도 동일한 작업을 수행 할 수 있으며 잘 작동합니다. 방금 테스트했습니다.

gcloud --project myproject beta pubsub subscriptions pull --auto-ack sub1 

호스트 데이터 흐름 스크린 샷 :

Hosted Dataflow at work

메시지가 함께있는 경우

Pipeline p = Pipeline.create(PipelineOptionsFactory.fromArgs(args).withValidation().create()); 

PCollection<TableRow> weatherData = p.apply(
     BigQueryIO.Read.named("ReadWeatherStations").from("clouddataflow-readonly:samples.weather_stations")); 
weatherData.apply(ParDo.named("tableRow2string").of(new DoFn<TableRow, String>() { 
    @Override 
    public void processElement(DoFn<TableRow, String>.ProcessContext c) throws Exception { 
     c.output(c.element().toString()); 
    } 
})).apply(PubsubIO.Write.named("WriteToPubsub").topic("projects/myproject/topics/bq2pubsub-topic")); 

p.run(); 

테스트 : 그것은 로컬, 또한 호스트 데이터 흐름 주자로 실행

+0

github에서이 예제의 전체 스크립트를 사용할 수 있습니까? 나는 pub/sub에서 bigquery로 이것을 역으로 전개하는 데 관심이있다. 감사 – Evan