我有一个在Google Cloud DataFlow上运行的Beam作业从BigQuery读取数据。当我运行作业时,作业需要几分钟的时间才能开始从(微小)表读取数据。结果表明,数据流作业发送的是一个BigQuery作业,该作业以批处理模式运行,而不是以交互模式运行。如何切换到在Apache Beam中立即运行?我在API中找不到一个方法来更改优先级。
您可以通过传递一个优先级参数来配置以“交互式”优先级运行查询。有关详细信息,请查看这个Github示例。
请注意,您可能达到了BigQuery限制和配额之一,因为当您使用batch时,如果您达到了速率限制,查询将排队并稍后重试。与交互式查询相反,如果达到这些限制,查询将立即失败。这是因为BigQuery假设交互式查询是您需要立即运行的。
也许Googler会纠正我,但不,您不能将其从批处理
更改为交互式
,因为它没有被Beam的API公开。
从org.apache.beam.sdk.io.gcp.bigqueryio.java
(此处):
private void executeQuery(
String executingProject,
String jobId,
TableReference destinationTable,
JobService jobService) throws IOException, InterruptedException {
JobReference jobRef = new JobReference()
.setProjectId(executingProject)
.setJobId(jobId);
JobConfigurationQuery queryConfig = createBasicQueryConfig()
.setAllowLargeResults(true)
.setCreateDisposition("CREATE_IF_NEEDED")
.setDestinationTable(destinationTable)
.setPriority("BATCH") <-- NOT EXPOSED
.setWriteDisposition("WRITE_EMPTY");
jobService.startQueryJob(jobRef, queryConfig);
Job job = jobService.pollJob(jobRef, JOB_POLL_MAX_RETRIES);
if (parseStatus(job) != Status.SUCCEEDED) {
throw new IOException(String.format(
"Query job %s failed, status: %s.", jobId, statusToPrettyString(job.getStatus())));
}
}
如果查询以批处理
模式运行对您来说确实是一个问题,那么一种解决方法可以是:
interactive
。bigQueryIo.read.from()
问题内容: 我正在尝试使用来使用排序对象。 这很容易实现,但是对象类变量(比较器用来计算优先级)在初始插入后可能会更改。大多数人提出了一种简单的解决方案,即删除对象,更新值并再次将其重新插入,因为这是优先级队列的比较器投入使用的时候。 除了围绕PriorityQueue创建包装器类之外,还有其他更好的方法吗? 问题答案: 你必须删除并重新插入,因为队列的工作原理是在插入新元素时将它们放置在适当的位
我在这个问题上发现了一些类似的问题,但我想再问一遍,以便得到一个更明确的答案。我正在编写一个图匹配算法,其中图上的每个节点分配给一个优先级集,取决于其邻居的匹配。细节其实并不重要,但我使用了std::priority_queue以便首先匹配最高优先级的节点。这里有一个棘手的问题:每次引入一个新的匹配,匹配节点的邻居的优先级将被更新。 我的问题自然是,如何更新新匹配的顺序?我能强制执行吗?或者是否有
我现在根据我的算法更改任务优先级,我想将这些任务交给虚拟机,我如何在cloudsim中完成?
问题内容: 我有一个Python程序,它执行耗时的计算。由于它使用高CPU,并且我希望系统保持响应状态,因此我希望程序将其优先级更改为低于正常值。 我发现了这一点: 在Windows中设置进程优先级- ActiveState 但我正在寻找一种跨平台的解决方案。 问题答案: 这是我用来将进程设置为低于正常优先级的解决方案: 在Windows和Linux上的Python 2.6上进行了测试。
问题内容: 我需要在与另一个Java应用程序分开的JVM中调用.jar文件,它非常占用CPU,因此应以后台优先级运行,以免影响系统的其余部分。有没有跨平台的方法可以做到这一点? 问题答案: 简单的答案是,没有可移植的方法来更改Java中进程的优先级。(线程-是,进程-否。) 如果您的Java应用程序需要启动一个新的JVM来运行CPU密集型应用程序,那么很可能它不是完全可移植的。例如,通常需要提供j
我正在寻找一种通过优先级和先到先服务(FCFS)调度线程的方法,如果两个线程具有相同的优先级。我在考虑使用一堆队列或类似的东西。问题是,即使我实现了自己的优先级队列,更改优先级的能力也会破坏插入到该队列的顺序。