【发布时间】:2023-03-24 10:25:02
【问题描述】:
我正在尝试在 BigQuery/PHP(使用 google php SDK)中运行一个查询,该查询返回一个大型数据集(可以是 100,000 - 10,000,000 行)。
$bigqueryService = new Google_BigqueryService($client);
$query = new Google_QueryRequest();
$query->setQuery(...);
$jobs = $bigqueryService->jobs;
$response = $jobs->query($project_id, $query);
//query is a syncronous function that returns a full dataset
下一步是允许用户将结果下载为 CSV 文件。
当数据集变得太大(内存限制)时,上面的代码将失败。 我有哪些选择可以在内存使用量较低的情况下执行此操作?
(我认为一个选项是使用 BigQuery 将结果保存到另一个表中,然后开始使用 LIMIT 和 OFFSET 进行部分提取,但我认为可能会有更好的解决方案......)
感谢您的帮助
【问题讨论】:
-
如果可能的话,我会尽量避免使用 php 来完成这样的任务。否则,您可以将查询拆分为一些限制较小的子查询,并逐步将其附加到 csv 文件中。
-
@Johnny000 哪种语言更适合这个?谢谢
-
我使用了大量的 Java 来处理如此多的数据集,并且有一些非常相似的数据量。但是,如果您按照答案中提到的那样逐行从 google 读取 CSV 文件,它在 php 中也应该很好用,因为我只在 php 和 csv 方面取得了良好的经验。
标签: php sql memory google-bigquery large-data