我有一张约有50,000,000条记录的表格。 我想获取整个表格的一列
SELECT id FROM `project.dataset.table`
在Web控制台中运行此代码大约需要80秒。
然而,当使用Ruby Gem执行此操作时,我限制为每个查询仅获取100,000条记录。使用#next
方法,我可以访问下一个100,000条记录。
require "google/cloud/bigquery"
@big_query = Google::Cloud::Bigquery.new(
project: "project",
keyfile: "keyfile"
)
@dataset = @big_query.dataset("dataset")
@table = @dataset.table("table")
queue = @big_query.query("SELECT id FROM `project.dataset.table`", max: 1_000_000)
stash = queue
loop do
queue = queue.next
unless queue
break
else
O.timed stash.size
stash += queue
end
end
问题在于每个请求大约需要30秒。 max: 1_000_000
是没用的,我被困在10万。这种方式查询需要4个小时,这是不可接受的。
我做错了什么?
答案 0 :(得分:2)
你应该做一个导出工作,这样你就可以在GCS上拥有文件了。 然后从那里下载很容易。