从BigQuery读取和过滤数据,我有两种方法
>
从 Dataflow 中的 BigQuery 读取(使用 BigqueryIO.readTableRow.from(ValueProvider)))整个数据,然后根据条件(如最大日期)进行筛选
使用NestedValueProvider通过生成仅获取所需数据的查询从数据流中的BigQuery读取要慢得多。
因为如果我读取整个数据并且我的表处于追加模式,这将增加读取数据的时间。
但是如果我只读取特定的日期数据,这将使我的管道读取时间一致。
但是对于200条记录,嵌套值提供者比使用BigqueryIO.readTableRow.from(ValueProvider)读取整个数据花费的时间要多得多。
我错过了什么,任何人都可以提供帮助?
我的片段在下面请找到。
Snippet:
PCollection<TableRow> targetTable = input.apply("Read TRUSTED_LAYER_TABLE_DESCRIPTION", BigQueryIO
.readTableRows()
.withoutValidation()
.withTemplateCompatibility()
.fromQuery(NestedValueProvider.of(options.get(Constants.TABLE_DESCRIPTION.toString())
, new QueryTranslator(options.get(Constants.ETL_BATCH_ID.toString())))).usingStandardSql());
嵌套值提供程序类代码段:
public class QueryTranslator implements SerializableFunction{
/**
* Read data with max etlbatchid from query
*/
ValueProvider<String> etlbatchid;
public QueryTranslator(ValueProvider<String> etlbatchid){
this.etlbatchid = etlbatchid;
}
private static final long serialVersionUID = -2754362391392873056L;
@Override
public String apply(String input) {
String batchId = this.etlbatchid.get();
if(batchId.equals("-1"))
return String.format("SELECT * from `%s`", input);
else
return String.format("SELECT * from `%s` where etlbatchid = %s;", input,batchId);
}
}
根据您的使用情况,这两种方法都可以采用,您应该考虑您选择的每种方法的利弊。
第一个(读取整个表)将非常快,因为数据流可以轻松地将工作负载拆分为多个碎片,并以并行方式处理,从而提高了速度。缺点是,由于密集的CPU使用,成本可能更高。
由于BigQuery将执行多个操作,第二个选项预计会变慢,但具有成本效益。此选项的缺点可能是,您可能会达到BigQuery的一个或多个配额和限制,这需要精心编码才能推翻。
您还可以检查是否可以实现这些示例来读取整个表,使用字符串查询和使用过滤器方法(灵感来自此StackOverflow线程)。
我想知道人们在bigquery上构建和管理ETL作业时发现了哪些最佳实践/工具。 目前,我有很多sql模板(可怕的参数化的lob,日期等使用sed类型字符串替换成一个tmp.sql文件,然后运行),我使用命令行工具来运行它们的序列并将输出发送到表。它工作正常,但有点笨拙。我仍然不明白为什么我不能在bigQuery上运行存储过程类型参数化脚本。甚至是某种图形用户界面来构建和管理管道。 我喜欢bigq
我们的 BigQuery 模式是大量嵌套/重复的,并且不断变化。例如,网站的新页面、表单或用户信息字段将与 BigQuery 中的新列相对应。此外,如果我们停止使用某种形式,相应的弃用列将永远存在,因为您无法删除Bigquery中的列。 因此,我们最终将生成包含数百列的表,其中许多列已被弃用,这似乎不是一个好的解决方案。 我正在研究的主要替代方案是将所有内容都存储为json(例如,每个Bigque
问题内容: 从其他一些应用程序中,我正在获取XML文件。 我想逐个节点读取该XML文件,并将节点值存储在数据库中以备将来使用。 那么,使用Java读取XML文件和检索节点值的最佳方法/ API是什么? 问题答案: dom4j和jdom非常易于使用(暂时忽略“最佳”需求;))
问题内容: 我正在使用AngularJS和Bootstrap 3创建一个应用程序。我想显示一个包含数千行的表/网格。什么是AngularJS和Bootstrap的最佳可用控件,具有排序,搜索,分页等功能。 问题答案: 在试用了ngGrid,ngTable,trNgGrid和SmartTable之后,我得出的结论是,SmartTable到目前为止是AngularJS和Bootstrap的最佳实现。它
我想读取word/docx文件的数据并保存到我的数据库中,需要时我可以从数据库中获取数据并在我的html页面上显示我使用ApachePOI读取docx文件中的数据,但它无法获取公式,请帮助我!
我是新来的,我正在学习使用方法等等,我在方法中有我的代码,但在代码中有一个控制台。ReadLine();这是我不想要的。基本上,我需要做的是一个包含10个方法的大作业,作为输入,你必须调用哪个方法,然后调用实际的输入,但是当我的方法中有一个readline时,我必须给出3个,而不是2个。如果有人知道如何帮助noob,我的代码如下 基本上是int.parse(consolereadline);我需要