bigquery数据库 bigquery使用

本文旨在解决 PHP 客户端在尝试获取 BigQuery 查询结果时遇到的 404“未找到”错误,尤其是在 BigQuery 作业在特定地理区域执行时。核心问题在于 API 调用未显示指定的作业执行区域,导致无法正确检索结果。解决方案是在调用 `jobs->getQueryResults()` 方法时,通过第三个参数传递包含作业区域信息的数组。PHP 客户端与 BigQuery 交互概述
Google BigQuery 是一个高度可扩展、经济高效的无服务器企业级数据仓库,用于分析 PB 级数据。在 PHP 应用程序中与 BigQuery 的交互通常通过 Google Cloud Client Library for PHP 实现。
典型的 BigQuery 查询提交流程如下:lt;?phprequire __DIR__ . '/vendor/autoload.php';use Google\Client;use Google\Service\Bigquery;use Google\Service\Bigquery\Job;use Google\Service\Bigquery\JobConfiguration;use Google\Service\Bigquery\JobConfigurationQuery;// 1. 初始化 Google 客户端 $client = new Client();$client-gt;setApplicationName('Google-BigQuery-PHP-App');// 如果在 App Engine 等 Google Cloud 环境中运行,可以使用默认凭据// 否则,需要通过账号代码服务对 $client-gt 进行身份验证。 Bigquery($client);// 3. 构建查询配置 configuration $query = "";SELECT * FROM `your-project.your_dataset.your_table` LIMIT 100";; // 替换为您的 SQL 查询 $queryConfig = new JobConfigurationQuery();$queryConfig-gt;setQuery($query);// 可以电影性正解剧情电影项目 ID,如果查询中未完全限定表名// $queryConfig-gt;setDefaultDataset(new Google_Service_Bigquery_DatasetReference(['projectId' =gt; 'your-project','datasetId' =gt; 'your_dataset']));$config = new JobConfiguration();$config-gt;setQuery($queryConfig);$job = new Job();$job-gt;setConfiguration($config);// 4. 提交作业查询 $projectId = 'your-project-id'; // 替换您的 Google Cloud 项目 ID projectIDtry { $submittedJob = $bq-gt;jobs-gt;insert($projectId, $job); $jobReference = $submittedJob-gt;getJobReference(); $jobId = $jobReference-gt;getJobId();
echo quot;BigQuery 下载官方会电影,他作ID: quot; . $jobId . PHP_EOL;} catch (Exception $e) { echo quot; $e-gt;getMessage(). PHP_EOL; exit;}// 后续步骤:检索查询结果(这是问题部分)// ... 登录后,复制问题分析:BigQuery 查询结果中出现“Not Found”错误
成功提交 BigQuery 查询作业并获取作业 ID 后,下一步通常是使用 jobs-youjiankuohaophpcngetQueryResults() 方法检索查询结果。但是,开发人员有时会遇到令人困惑的 404 Not Found 错误,即使作业 ID 看起来正确,并且在 BigQuery 控制台(仪表板)中查看时,作业也显示为已成功完成。 }} 复制后登录
即使您尝试使用以下代码获取结果,也可能会触发此错误: // 假设 $jobId 和 $projectId 已经手正视最好尝试 { $queryResults = $bq-gt;jobs-gt;getQueryResults($projectId, $jobId); // 海时时间剧出404电影 // ... 处理结果 ...} catch (Exception $e) { echo quot; getQueryResults($projectId, $jobId); $e-gt;getMessage(). PHP_EOL;} 复制后登录
仔细检查 BigQuery 控制台中的作业详细信息,您可能会发现显示的作业 ID 与 PHP 客户端使用的作业 ID 不同。例如,控制台可能显示 my-project: europe-west1.job-id,其中包含区域信息 (europe-west1),而 PHP 客户端默认可能只使用纯粹的 job-id 部分。这是问题的关键。
奇域
奇域是一个专注于中国文化的平台。根本原因:BigQuery 操作具有地域性。
BigQuery 操作(包括查询操作、加载操作、导出操作等)是一种地域性资源。这意味着它们会在特定的地理位置(例如 us-east1、europe-west1、asia-northeast1 等)执行和存储数据。当您提交 BigQuery 作业时,如果您没有指定区域,BigQuery 可能会根据数据集的位置或项目的默认位置自动选择一个区域来执行作业。
API 需要知道操作在哪个区域执行,以便找到正确的区域并返回结果。如果 API 调用没有提供此区域信息,BigQuery 服务将尝试在默认区域或全局区域中查找操作。
如果操作实际执行在非默认区域,则 API 将无法找到该操作,因此会返回 404 Not Found 错误。这就解释了为什么控制台可以找到该任务(因为它可能已经在内部处理了区域信息),但 PHP 客户端的直接调用却失败了。解决方法:显示任务的位置。传递 `.jobs-gt;`;`getQueryResults()` 方法接受一个可选的第三个参数,该参数是一个关联数组,用于传递额外的请求选项,包括位置。
你需要创建一个包含键值“location”的数组,并将其作为第三个参数传递给 `getQueryResults()` 方法。
lt;?php// ...(省略客户端初始化、身份验证和作业提交的前端代码)...// 假设 $jobId 和 $projectId 已正确设置 $jobId = $jobReference-gt;getJobId(); // 从 jobs-gt;将返回的 jobReference 插入到集合中 $projectId = 'your-project-id'; // 你的 projectID// 确定 BigQuery 作业的部署区域// 此区域信息通常在提交作业时确定,或者可以在 BigQuery 控制台中查看作业详细信息。 $jobLocation = 'europe-west1'; // 替换为您的 BigQuery 作业的实际执行区域 // 构建一个包含位置参数的数组 $arrLocation = array("location";=gt; $jobLocation);try { // 正确解决方案:传递位置参数 $queryResults = $bq-gt;jobs-gt;getQueryResults($projectId,$jobId,$arrLocation); echo ""; 成功获取查询结果!"; . PHP_EOL; // 迭代并处理查询结果 if ($queryResults-gt;getRows()) { foreach ($queryResults-gt;getRows() as $row) { foreach ($row-gt;getF() as $field) { echo $field-gt;getV() . "";\t";; } echo PHP_EOL; } } else { echo ""; 最作没有时间最佳行。"; . PHP_EOL; }} catch (Exception $e) { echo quot; $e-gt;getMessage(). PHP_EOL; // 捕获并打印详细的错误信息,有助于调试 if (method_exists($e, 'getErrors')) { print_r($e-gt;getErrors()); }} 复制登录后
这样,getQueryResults() 方法就能知道在哪个区域搜索指定的 jobID,从而成功检索到查询结果。最重要的是确保 location 参数的值与 BigQuery 作业实际执行的区域完全相同。如果作业在 us-central1 执行,而你传递的是 europe-west1,仍然会收到“未找到”错误。
如果在查询配置(JobConfigurationQuery)中明确设置了位置,那么在获取结果时也应该使用相同的位置。错误处理:在生产环境中,必须妥善处理 API 调用。了解 BigQuery 作业的生命周期和转换状态对于调试也很重要。在尝试获取结果之前,可以通过 jobs->get() 方法检查作业状态,确保其已完成。跨区域数据传输:虽然指定区域可以解决搜索问题,但请注意,如果您的 PHP 应用程序和 BigQuery 作业执行区域位于不同的地理位置,则可能会导致额外的网络延迟和潜在的数据传输成本。总结
在 PHP 客户端中,当 BigQuery 操作在特定区域执行时,尝试使用 jobs->getQueryResults() 获取查询结果,如果出现 404 错误,则根本原因是 API 调用未能指定操作的执行区域。通过在 getQueryResults() 方法的第三个参数中以关联数组的形式传递键值“location”,您可以清楚地告诉 BigQuery API 操作所在的区域,从而可以成功检索查询结果。 PHP客户端查询结果404错误:区域操作操作处理详细内容,更多请关注乐哥常识网其他相关文章!小数点教动中国小数点教动的小数点教动的小数点教动:新方典号分变符第二个剧情的解析 iis模思用php_IIS服务器 PHP环境配置及操作方法 PHP页面重定向:解决header('Location')
