Google cloud dataflow Google云数据流BigQueryIO.Read空指针错误

Google cloud dataflow Google云数据流BigQueryIO.Read空指针错误,google-cloud-dataflow,Google Cloud Dataflow,我有一个流媒体工作,在其中我正在收听来自PubSub的消息,然后从BigQuery读取数据。已使用从PubSUb接收的数据查询数据。这意味着我需要动态形成查询,然后将其传递给BigQueryIO.Read.fromQuery()函数。下面是从BigQuery读取数据并返回TableRow的代码,但它给了我NullPointerException,我的代码正在执行要读取的数据 public class RequestDailyUsageTransform extends PTransform<

我有一个流媒体工作,在其中我正在收听来自PubSub的消息,然后从BigQuery读取数据。已使用从PubSUb接收的数据查询数据。这意味着我需要动态形成查询,然后将其传递给BigQueryIO.Read.fromQuery()函数。下面是从BigQuery读取数据并返回TableRow的代码,但它给了我NullPointerException,我的代码正在执行要读取的数据

public class RequestDailyUsageTransform extends PTransform<PCollection<DailyUsageJob>, PCollection<TableRow>> {

    private String mQuery;

    private String mForDate;
    private LocalDateTime billingDateTime;

    @Override
    public PCollection<TableRow> apply(PCollection<DailyUsageJob> input) {

        TableReference tableReference = getRequestTableReference();

        return input
                .apply(ParDo.named("RequestUsageQuery")
                        .of(new RequestUsageQueryStringDoFn()))
                .apply(BigQueryIO.Read.named("RequestUsageReader")
                        .fromQuery(mQuery)
                        .from(tableReference).withoutValidation())
                .apply(ParDo.named("DailyRequestMapper").of(new DailyRequestMapperDoFn()))
                .apply(ParDo.named("BillDailyRequestUsage")
                        .of(new DailyRequestsBillDoFn(mForDate, billingDateTime)));
    }}
public类RequestDailyUsageTransform扩展了ptTransform{
私有字符串mQuery;
私有字符串mForDate;
私有LocalDateTime billingDateTime;
@凌驾
公共PCollection应用(PCollection输入){
TableReference TableReference=getRequestTableReference();
返回输入
.apply(ParDo.named(“RequestUsageQuery”)
.of(新的RequestUsageQueryStringDoFn())
.apply(BigQueryIO.Read.named(“RequestUsageReader”)
.fromQuery(mQuery)
.from(tableReference).withoutValidation())
.apply(ParDo.named(“DailyRequestMapper”)。of(new DailyRequestMapperDoFn())
.apply(ParDo.named(“BillDailyRequestUsage”)
。of(新的每日需求量billdofn(mForDate,billingDateTime));
}}

我还想知道如何在BigQueryIO.Read.fromQuery()函数中传递DoFn中生成的字符串。

我认为在这种情况下,最好的做法是运行每日批处理作业,查询所有数据,并由用户ID键入。这将获取比您希望的更多的数据,但允许您定位每个用户的信息。不幸的是,目前还没有执行数据相关读取的方法

您好,是否可以提供完整的堆栈跟踪?另外,您使用的是哪个版本的数据流?至于传入在DoFn中计算的查询。我认为这不适合数据流模型。请你再解释一下你的用例好吗。为什么要在运行时构造查询?您是否正在尝试根据元素/键查找特定信息?BigQueryIO源查询应该跨所有键查找数据,然后该数据通过管道传递并由键分割。每个DoFn都对数据的特定碎片/密钥进行操作。@AlexAmato Daily在特定时间,我的后端应用程序将向流作业发送通知,以便为每个用户执行某些任务。每条消息都有执行任务的时间和用户ID。我想动态形成一个查询,在消息中提到的时间段内只为该用户查询数据。我认为在这种情况下,最好的做法是运行一个每日批处理作业,查询所有数据,并由用户ID键入。这将获取比您希望的更多的数据,但允许您定位每个用户的信息。不幸的是,目前还没有执行依赖数据的读取的方法。您是否建议在日常作业中加载整个表一次,然后根据用户ID对TableCell进行分组?此外,我认为系统滞后是由Java.Io.IOExtRe:当尝试运行查询选择DATETEMMETROUNC(DATETIMED(RealestyTimes),小时)作为请求,SCAST(计数(RealestyTimes)为It64)作为请求,回合(SUM(CAST(EgSrsSin In GB为FLAAT64)),9)作为VestoSyCyrdjTestEngress中的EXCELL,SPECTORKEYKEY。('2017-01-31T00:00')和时间戳('2017-01-31T23:59:59'))按时间分组,按时间ASC.a这是我在尝试执行静态查询时遇到的错误。您是否仍然看到此错误?您是否能够在BigQuery网页中运行查询?您是否有失败作业的作业id?您是否使用BigQueryIO.Read.fromQuery?我仍然看到此错误,我不知道原因。另外,我的要求是动态形成查询,但不能这样做,我认为这是一个非常基本的要求,当您处理批处理作业时,没有这样做的过程。您能否提供一个作业id,以便我们可以查看它。