关于 Bigquery datasetId 和 tableId

Posted

技术标签:

【中文标题】关于 Bigquery datasetId 和 tableId【英文标题】:Regarding Bigquery datasetId and tableId 【发布时间】:2020-06-22 02:21:17 【问题描述】:
            How do I get the datasetId and tableId from BigQuery. I tried to click the dropdown on the sidebar and copied the dataset info and table info,  Is there any way, I can query the datasetId and tableId?  but I got this error. I am using php client libraries to pull the BigQuery data.

如何从 BigQuery 获取 datasetId 和 tableId。我试着点击侧边栏的下拉菜单,复制了数据集信息和表信息,有什么办法可以查询datasetId和tableId吗?但我得到了这个错误。我正在使用 php 客户端库来提取 BigQuery 数据。

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId   = 'The BigQuery table ID';
// $maxResults = 10;

$maxResults = 10;
$startIndex = 0;

$options = [
    'maxResults' => $maxResults,
    'startIndex' => $startIndex
];
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$numRows = 0;
foreach ($table->rows($options) as $row) 
    print('---');
    foreach ($row as $column => $value) 
        printf('%s: %s' . PHP_EOL, $column, $value);
    
    $numRows++;

我收到此错误。

 Google\Cloud\Core\Exception\BadRequestException  : 
  "error": 
    "code": 400,
    "message": "Invalid dataset ID \"mc-data-2:Turnflex\". Dataset IDs must be alphanumeric (plus underscores and dashes) and must be at most 1024 characters long.",
    "errors": [
      
        "message": "Invalid dataset ID \"mc-data-2:Turnflex\". Dataset IDs must be alphanumeric (plus underscores and dashes) and must be at most 1024 characters long.",
        "domain": "global",
        "reason": "invalid"
      
    ],
    "status": "INVALID_ARGUMENT"
  

【问题讨论】:

似乎 mc-data-2 是您的 projectId,Turnflex 是您的 datasetId,但在您的代码中,datasetId 被选为 mc-data-2:Turnflex。我不知道 php 编码,但您需要修改一些内容,以便它选择正确的 datasetId。 【参考方案1】:

根据PHP Google Cloud client 库文档正确的BigQueryClient() 类初始化,您可能需要传播$projectId 变量。如果针对任何 Biqguery 数据查询或发现操作,您可能会利用 query() 方法提交 Bigquery Job 与特定的自定义查询或明确定义 dataset() 和 table() 作为目标 Bigquery 位置。

确认@Priya Agarwal 的假设,我已经检查了您示例中的代码 sn-p 并且它按预期工作。一旦我与$datasetIdtableId 共同暴露的变量建立连接,我就发现了您报告的类似错误:

$datasetId = 'datasetId:tableId'

代替:

$datasetId = 'datasetId'

【讨论】:

以上是关于关于 Bigquery datasetId 和 tableId的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 代码段中的错误

Bigquery如何在List操作期间过滤表和视图

BigQuery 表通配符函数别名?

Bigquery Java API - 获取表创建时间?

来自 Apps 脚本的 DELETE 的 BigQuery 错误? [复制]

如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限