Google bigquery 使用数据流将数据存储类型移动到Bigquery时出现问题

Google bigquery 使用数据流将数据存储类型移动到Bigquery时出现问题,google-bigquery,google-cloud-dataflow,Google Bigquery,Google Cloud Dataflow,我一直在尝试将某种类型的所有实体从数据存储移动到BigQuery中。在BQWebUI后面使用数据存储导出是不起作用的,因为它忽略了一个Blob类型的列,所以我尝试先使用Dataflow来转换数据。当我查询所有实体的数据存储时,我会得到SSLExceptions。当我对实体的数量设置了足够低的限制时,下面的脚本可以工作,但是当我尝试使用偏移创建多个管道时,一旦偏移量大于大约1000,作业就会挂起 import org.apache.beam.sdk.values.PCollection; 导入ja

我一直在尝试将某种类型的所有实体从数据存储移动到BigQuery中。在BQWebUI后面使用数据存储导出是不起作用的,因为它忽略了一个Blob类型的列,所以我尝试先使用Dataflow来转换数据。当我查询所有实体的数据存储时,我会得到SSLExceptions。当我对实体的数量设置了足够低的限制时,下面的脚本可以工作,但是当我尝试使用偏移创建多个管道时,一旦偏移量大于大约1000,作业就会挂起

import org.apache.beam.sdk.values.PCollection;
导入java.util.Map;
导入java.util.Base64;
导入org.apache.beam.repackaged.beam\u runners\u google\u cloud\u dataflow\u java.com.google.common.collect.ImmutableList;
导入org.apache.beam.repackaged.beam_sdks_java_core.com.google.protobuf.Timestamp;
导入org.apache.beam.sdk.Pipeline;
导入org.apache.beam.sdk.PipelineResult;
导入org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO;
导入org.apache.beam.sdk.io.gcp.datastore.DatastoreIO;
导入org.apache.beam.sdk.io.gcp.datastore.DatastoreV1;
导入org.apache.beam.sdk.options.PipelineOptions;
导入org.apache.beam.sdk.options.pipelineoptions工厂;
导入org.apache.beam.sdk.transforms.MapElements;
导入org.apache.beam.sdk.transforms.SimpleFunction;
导入com.google.api.client.util.DateTime;
导入com.google.api.services.bigquery.model.TableFieldSchema;
导入com.google.api.services.bigquery.model.TableReference;
导入com.google.api.services.bigquery.model.TableRow;
导入com.google.api.services.bigquery.model.TableSchema;
导入com.google.datastore.v1.Entity;
导入com.google.datastore.v1.Query;
导入com.google.datastore.v1.Value;
导入com.google.datastore.v1.Value.ValueTypeCase;
导入com.google.datastore.v1.Filter;
导入com.google.datastore.v1.PropertyFilter;
导入com.google.datastore.v1.PropertyFilter.Operator;
导入com.google.datastore.v1.PropertyReference;
导入com.google.protobuf.Int32Value;
导入com.google.protobuf.util.Timestamps;
公共类GameEventToBigQuery{
公共静态void main(字符串[]args){
System.setProperty(“https.protocols”、“TLSv1.1、TLSv1.2”);
int batchSize=100000;
//首先定义管道的选项。
PipelineOptions=PipelineOptionsFactory.create();
options.setTempLocation(“gs://gameevent/temp”);
//构建BigQuery表模式
TableSchema TableSchema=新TableSchema().setFields(
不可变列表(
新建TableFieldSchema().setName(“aux”).setType(“字符串”),
新建TableFieldSchema().setName(“已创建”).setType(“字符串”),
新建TableFieldSchema().setName(“事件类型”).setType(“字符串”),
新建TableFieldSchema().setName(“场景”).setType(“字符串”),
新建TableFieldSchema().setName(“时间”).setType(“字符串”),
新建TableFieldSchema().setName(“用户id”).setType(“字符串”),
新建TableFieldSchema().setName(“值”).setType(“字符串”)
));
对于(int批=1;批<117;批++){
System.out.println(“批处理”+整数.toString(批处理));
//生成查询
Query.Builder queryBuilder=Query.newBuilder();
queryBuilder.setLimit(Int32Value.newBuilder().setValue(batchSize))
.setOffset(批次*批次大小)
.addKindBuilder()
.setName(“GameEvent”).build();
System.out.println(“offset”+Integer.toString(queryBuilder.getOffset());
Query=queryBuilder.build();
//创建管道。
Pipeline p=Pipeline.create(选项);
//读取游戏事件表
PCollection events=p.apply(“读取游戏事件表”,
DatastoreIO.v1().read()
.withProjectId(“可搜索应用程序”)
.withNamespace(“启动器”)
.withQuery(query));
//.具有多个裂缝(1000);
//映射到表行
PCollection rows=events.apply(“到TableRows”,MapElements
.via(新的SimpleFunction(){
@凌驾
公共表格行应用(实体e){
映射字段=e.getPropertiesMap();
TableRow t=新的TableRow();
//if(fields.get(“aux”).getValueTypeCase()==ValueTypeCase.BLOB_值){
//t.set(“aux”,Base64.getMimeDecoder().decode(fields.get(“aux”).getBlobValue().toByteArray());
//} 
t、 set(“aux”,Base64.getEncoder().encodeToString(fields.get(“aux”).getBlobValue().toByteArray());
t、 set(“created”,timeToString(fields.get(“created”));
t、 set(“event_type”,fields.get(“event_type”).getStringValue();
t、 set(“scene”,fields.get(“scene”).getStringValue();
t、 set(“time”,timeToString(fields.get(“time”));
t、 set(“user_id”,fields.get(“user_id”).getStringValue();
t、 set(“value”,fields.get(“value”).getStringValue();
返回t;
}
}));
//写入BigQuery
应用(“写入BigQuery”,BigQueryIO.writeTableRows()
.使用模式(表模式)
.to(新表格参考()
.setProjectId(“可搜索应用程序”)
.setDatasetId(“可搜索的应用程序”\u bigquery”)
.setTableId(“GameEvent”))
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE如果需要)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.Write_APPEND));
PipelineResult=p.run();
结果:waitU