Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform GCP:设置从扳手到大查询的周期性数据管道的最佳选项是什么_Google Cloud Platform_Google Bigquery_Google Cloud Dataflow_Google Cloud Spanner - Fatal编程技术网

Google cloud platform GCP:设置从扳手到大查询的周期性数据管道的最佳选项是什么

Google cloud platform GCP:设置从扳手到大查询的周期性数据管道的最佳选项是什么,google-cloud-platform,google-bigquery,google-cloud-dataflow,google-cloud-spanner,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,Google Cloud Spanner,任务:我们必须设置从扳手到大查询的定期同步记录。我们的扳手数据库有一个关系表层次结构 考虑的选项我正在考虑使用数据流模板来设置此数据管道 选项1:使用数据流模板“云扳手到云存储文本”设置一个作业,然后使用数据流模板“云存储文本”设置另一个作业 文本到“BigQuery”。缺点:第一个模板只在一个表上工作,我们有很多表要导出 选项2:使用“云扳手到云存储Avro”模板导出整个数据库。缺点:我只需要在数据库中导出选定的表,我看不到将Avro导入大查询的模板 问题:请建议设置此管道的最佳选项目前没

任务:我们必须设置从扳手到大查询的定期同步记录。我们的扳手数据库有一个关系表层次结构

考虑的选项我正在考虑使用数据流模板来设置此数据管道

  • 选项1:使用数据流模板“云扳手到云存储文本”设置一个作业,然后使用数据流模板“云存储文本”设置另一个作业 文本到“BigQuery”。缺点:第一个模板只在一个表上工作,我们有很多表要导出

  • 选项2:使用“云扳手到云存储Avro”模板导出整个数据库。缺点:我只需要在数据库中导出选定的表,我看不到将Avro导入大查询的模板


问题:请建议设置此管道的最佳选项

目前没有现成的参数化直接从Cloud Panner导出到BigQuery

为了满足您的需求,最好定期安排自定义数据流作业(,)。增量导出需要在您的数据库中实现更改跟踪,这可以通过


对于无代码解决方案,您必须放松需求,定期将所有表批量导出到云存储中,并定期将它们批量导入到BigQuery中。您可以结合使用和计划周期。

目前没有现成的参数化直接从Cloud Panner导出到BigQuery

为了满足您的需求,最好定期安排自定义数据流作业(,)。增量导出需要在您的数据库中实现更改跟踪,这可以通过


对于无代码解决方案,您必须放松需求,定期将所有表批量导出到云存储中,并定期将它们批量导入到BigQuery中。您可以使用和计划周期的组合。

使用单个数据流管道一次性完成。下面是我使用JavaSDK编写的一个示例,帮助您入门。它从扳手读取数据,使用
ParDo
将其转换为BigQuery
TableRow
,然后在最后写入BigQuery。在引擎盖下,它使用的是地面军事系统,但这一切都是从你身上抽象出来的


使用单个数据流管道一次性完成。下面是我使用JavaSDK编写的一个示例,帮助您入门。它从扳手读取数据,使用
ParDo
将其转换为BigQuery
TableRow
,然后在最后写入BigQuery。在引擎盖下,它使用的是地面军事系统,但这一切都是从你身上抽象出来的


您不能在一条管道中直接从扳手读取数据并写入BQ吗?是的,我考虑过这个选项,但实际上我有点担心这个选项的性能。我们在扳手中有大约1.2亿条记录(不包括将添加到其中的所有子表中的数据)。我们最初的想法是刷新完整的数据集,但替代的是只考虑增量,即今天发生了什么变化。我已经向谷歌团队提出了一个功能请求,要求他们直接提供从扳手到BQ的模板。我们在数据流管道中读取了数十亿行,没有任何问题。它将为您自动缩放。为什么你需要谷歌来创建一个模板?你可以自己编码……是的,我们可以编码任何东西,这是我们最后的选择。但我想问的是,是否有更好的方法,因为对于任何使用扳手的人来说,这是一个常见的用例。无论如何,谢谢你,我得到了答案。@Ayush-你的答案是什么?你不能直接从扳手上读,然后在一条管道中写给BQ吗?是的,我考虑过这个选项,但实际上我有点担心这个选项的性能。我们在扳手中有大约1.2亿条记录(不包括将添加到其中的所有子表中的数据)。我们最初的想法是刷新完整的数据集,但替代的是只考虑增量,即今天发生了什么变化。我已经向谷歌团队提出了一个功能请求,要求他们直接提供从扳手到BQ的模板。我们在数据流管道中读取了数十亿行,没有任何问题。它将为您自动缩放。为什么你需要谷歌来创建一个模板?你可以自己编码……是的,我们可以编码任何东西,这是我们最后的选择。但我想问的是,是否有更好的方法,因为对于任何使用扳手的人来说,这是一个常见的用例。无论如何,谢谢你,我得到了答案。@Ayush-你的答案是什么?你能用SpanRio.read()拉1500万条记录吗?是的,这个解决方案可以缩放。你能用SpanRio.read()拉1500万条记录吗?是的,这个解决方案可以缩放。
package org.polleyg;

import com.google.api.services.bigquery.model.TableFieldSchema;
import com.google.api.services.bigquery.model.TableRow;
import com.google.api.services.bigquery.model.TableSchema;
import com.google.cloud.spanner.Struct;
import org.apache.beam.runners.dataflow.options.DataflowPipelineOptions;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO;
import org.apache.beam.sdk.io.gcp.spanner.SpannerIO;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.values.PCollection;

import java.util.ArrayList;
import java.util.List;

import static org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED;
import static org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE;

/**
 * Do some randomness
 */
public class TemplatePipeline {
    public static void main(String[] args) {
        PipelineOptionsFactory.register(DataflowPipelineOptions.class);
        DataflowPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(DataflowPipelineOptions.class);
        Pipeline pipeline = Pipeline.create(options);
        PCollection<Struct> records = pipeline.apply("read_from_spanner",
                SpannerIO.read()
                        .withInstanceId("spanner-to-dataflow-to-bq")
                        .withDatabaseId("the-dude")
                        .withQuery("SELECT * FROM Singers"));
        records.apply("convert-2-bq-row", ParDo.of(new DoFn<Struct, TableRow>() {
            @ProcessElement
            public void processElement(ProcessContext c) throws Exception {
                TableRow row = new TableRow();
                row.set("id", c.element().getLong("SingerId"));
                row.set("first", c.element().getString("FirstName"));
                row.set("last", c.element().getString("LastName"));
                c.output(row);
            }
        })).apply("write-to-bq", BigQueryIO.writeTableRows()
                .to(String.format("%s:spanner_to_bigquery.singers", options.getProject()))
                .withCreateDisposition(CREATE_IF_NEEDED)
                .withWriteDisposition(WRITE_TRUNCATE)
                .withSchema(getTableSchema()));
        pipeline.run();
    }

    private static TableSchema getTableSchema() {
        List<TableFieldSchema> fields = new ArrayList<>();
        fields.add(new TableFieldSchema().setName("id").setType("INTEGER"));
        fields.add(new TableFieldSchema().setName("first").setType("STRING"));
        fields.add(new TableFieldSchema().setName("last").setType("STRING"));
        return new TableSchema().setFields(fields);
    }
}
00:10:54,011 0    [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.BatchLoads - Writing BigQuery temporary files to gs://spanner-dataflow-bq/tmp/BigQueryWriteTemp/beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12/ before loading them.
00:10:59,332 5321 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.TableRowWriter - Opening TableRowWriter to gs://spanner-dataflow-bq/tmp/BigQueryWriteTemp/beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12/c374d44a-a7db-407e-aaa4-fe6aa5f6a9ef.
00:11:01,178 7167 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.WriteTables - Loading 1 files into {datasetId=spanner_to_bigquery, projectId=grey-sort-challenge, tableId=singers} using job {jobId=beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, location=australia-southeast1, projectId=grey-sort-challenge}, attempt 0
00:11:02,495 8484 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl - Started BigQuery job: {jobId=beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, location=australia-southeast1, projectId=grey-sort-challenge}.
bq show -j --format=prettyjson --project_id=grey-sort-challenge beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0
00:11:02,495 8484 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.WriteTables - Load job {jobId=beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, location=australia-southeast1, projectId=grey-sort-challenge} started
00:11:03,183 9172 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl - Still waiting for BigQuery job beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, currently in status {"state":"RUNNING"}
bq show -j --format=prettyjson --project_id=grey-sort-challenge beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0
00:11:05,043 11032 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl - BigQuery job {jobId=beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, location=australia-southeast1, projectId=grey-sort-challenge} completed in state DONE
00:11:05,044 11033 [direct-runner-worker] INFO  org.apache.beam.sdk.io.gcp.bigquery.WriteTables - Load job {jobId=beam_load_templatepipelinegrahampolley0531141053eff9d0d4_3dd2ba3a1c0347cf860241ddcd310a12_b4b4722df4326c6f5a93d7824981dc73_00001_00000-0, location=australia-southeast1, projectId=grey-sort-challenge} succeeded. Statistics: {"completionRatio":1.0,"creationTime":"1559311861461","endTime":"1559311863323","load":{"badRecords":"0","inputFileBytes":"81","inputFiles":"1","outputBytes":"45","outputRows":"2"},"startTime":"1559311862043","totalSlotMs":"218","reservationUsage":[{"name":"default-pipeline","slotMs":"218"}]}