Google bigquery 从Bigquery导出到存储

Google bigquery 从Bigquery导出到存储,google-bigquery,google-cloud-storage,google-cloud-dataflow,Google Bigquery,Google Cloud Storage,Google Cloud Dataflow,将数据从BigQuery导出到Google存储的最佳方式是什么。注意,我需要对Bigquery运行查询,而不是导出所有数据。基本上,我需要对BigQuery(比如select*fromMyTable,其中code=foo)运行一个自定义查询,查询结果需要写入csv,存储在谷歌云上。 我相信,最好的方法是通过谷歌数据流。如果还有其他选择,请告诉我? 此外,我正在寻找一些如何实现这一点的样本。有什么地方我可以找到一些例子吗 这就是我目前所拥有的 PipelineOptions PipelineOpt

将数据从
BigQuery
导出到Google存储的最佳方式是什么。注意,我需要对
Bigquery
运行查询,而不是导出所有数据。基本上,我需要对
BigQuery
(比如
select*fromMyTable,其中code=foo
)运行一个自定义查询,查询结果需要写入csv,存储在谷歌云上。 我相信,最好的方法是通过谷歌数据流。如果还有其他选择,请告诉我? 此外,我正在寻找一些如何实现这一点的样本。有什么地方我可以找到一些例子吗

这就是我目前所拥有的 PipelineOptions PipelineOptions=PipelineOptionsFactory.create(); Pipeline p=Pipeline.create(pipelineOptions)


我猜您的匿名DoFn正在从封装类(CommonValidator)中提取一些东西,该类无法序列化。如果您为DoFn实现创建了一个静态类,那么这能解决问题吗


有关更多信息,请参见。

撇开错误不谈,您不必使用数据流将BigQuery数据导出到GCS,除非您在数据流管道中执行一些复杂的转换(您几乎可以肯定在SQL/UDFs中执行这些转换,但我离题了)。从代码片段和描述来看,您似乎没有对数据进行任何类型的转换

你可以:

  • 运行SQL并将结果保存到BigQuery表中
  • 按说明将表格导出到地面军事系统

  • 谢谢你的建议。我拥有的数据在google云数据存储中,数据也在BigData中,因此数据在这两个地方。所以选项是选项1:1。对数据存储运行SQL查询并写入bigQuery。2.然后执行从BigQuery导出到存储选项2:1。对BigQuery运行SQL查询并写入BigQuery 2中的另一个表。那么,在没有数据流的情况下,选项2.1是否可以从BigQuery导出到存储?@verma-您在问题中从未提到过任何关于云数据存储的内容。其次,云数据存储是一个NoSQL解决方案,所以您将无法“对数据存储运行SQL查询并写入bigQuery”。Yeh。我们在这两个地方都有数据。云存储是我们的主要数据库,我们在BigQuery中复制数据只是为了这个用例。根据你所说的,我是这么想的。1.对主数据库(云数据存储)2执行查询。将BigQuery中的数据写入新表“mytable uuid”3。执行从步骤2中创建的表到云存储的导出我应该如何执行所有这些步骤?云数据流不是这里使用的最佳工具吗?有没有一种方法可以将数据作为csv从数据存储导出到存储?基本上,我想对数据存储运行一个查询,然后将结果导出到csv?
        Date date = new Date();
    
        p.getOptions().setTempLocation("gs://mybucket/tmp"+date.getTime());
    
        PCollection<TableRow> rowPCollection = p.apply(BigQueryIO.Read.named("promos")
                .fromQuery("SELECT * FROM [projectid:mydataset.mytable] where id = 256 LIMIT 1000"));
    
        PCollection<String> stringPCollection = rowPCollection.apply(ParDo.named("Extract").of(new DoFn<TableRow, String>() {
            @Override
            public void processElement(ProcessContext c) {
                TableRow tableRow = c.element();
                try {
                    String prettyString = tableRow.toPrettyString();
                    c.output(prettyString);
                } catch (IOException e) {
                    log.error("Exception occurred:" + e.getMessage());
                }
            }
        }));
    
        stringPCollection.apply(TextIO.Write.named("WriteOutput").to("gs://mybucket/avexport").withSuffix(".csv"));
    
        p.run();
    
    caused by: java.io.NotSerializableException: com.my.validation.CommonValidator
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at com.google.cloud.dataflow.sdk.util.SerializableUtils.serializeToByteArray(SerializableUtils.java:50)