我有一个流媒体工作,我在其中收听来自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)));
}}
我还想知道如何传递在BigQueryIO.Read.fromQuery()函数中的DoFn中生成的字符串。
答案 0 :(得分:0)
我认为在这种情况下,最好的办法是运行查询所有数据的每日批处理作业,并由userid键入。这将提取比您想要的更多的数据,但允许您找到每用户信息。不幸的是,目前没有办法执行数据相关读取