将文件从Google云端硬盘加载到Bigquery

时间:2019-10-18 14:57:23

标签: google-api google-bigquery google-drive-api

我有一个API,该API可以在我的网站上获取加载的文件,并通过该API将带有mimeType text / csv的文件上传到Google云端硬盘。

这创造并产生了奇迹,但是,我现在需要将该文件作为永久表加载到Google Bigquery中。

我有两种方法:

  1. 首选:获取上传的文件并将mimeType修改为Google表格-我认为驱动器足够聪明,可以用csv做到这一点,但显然不是-也许有办法。

  2. 将文本/ csv文件直接加载到Bigquery中-我收到的URI无效

我的PHP CURL命令如下:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://bigquery.googleapis.com/bigquery/v2/projects/xxxxxxx/datasets/xxxxx/tables",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n  \"externalDataConfiguration\": {\n    \"sourceUris\": [\n      \"https://drive.google.com/file/d/{$id}/\"\n    ],\n    \"sourceFormat\": \"CSV\",\n    \"autodetect\": true\n  },\n  \"tableReference\": {\n    \"tableId\": \"{$user}\"\n  }\n}",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Accept-Encoding: gzip, deflate",
    "Authorization: Bearer",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    //"Content-Length: 319",
    "Content-Type: application/json",
    "Host: bigquery.googleapis.com",
    "User-Agent: PostmanRuntime/7.17.1",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

使用以下两种方法获取以下内容-但是,头奖将是使第1步正常工作,将文件类型更改为Google表格-我已经具有设置标题的更新功能,因此如果需要添加它我可以

"Invalid source URI: https://drive.google.com/file/d/1Zt6OMQqE3rj1PJe4HlokQ4LPNfOPBHfB/

1 个答案:

答案 0 :(得分:1)

来自documentation

  

目前不支持将数据从Google云端硬盘加载到BigQuery中,但是您可以使用外部表查询Google云端硬盘中的数据。

按照Querying Google Drive data进行操作,一旦您可以对其进行查询,就可以使用查询将其持久化到BigQuery(或者如果外部表已经为您服务,则不必这样做):

CREATE TABLE my_dataset.persisted_table_name
AS SELECT * FROM my_external_table_pointing_to_google_drive;