将文件从 Google Drive 加载到 Bigquery

Posted

技术标签:

【中文标题】将文件从 Google Drive 加载到 Bigquery【英文标题】:Load file from Google Drive into Bigquery 【发布时间】:2019-10-18 14:57:23 【问题描述】:

我有一个 API,它在我的网站上加载一个文件,并通过 API 将其与 mimeType text/csv 一起上传到 Google Drive。

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

我有两种方法:

    首选:获取上传的文件并将 mimeType 修改为 Google 表格 - 我认为驱动器足够聪明,可以使用 csv 执行此操作,但显然不是 - 也许有办法。

    将文件从 text/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】:

来自documentation:

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

关注Querying Google Drive data,一旦您可以查询它,您可以使用查询将其保存到 BigQuery(或者如果外部表已经为您工作,则您不必这样做):

CREATE TABLE my_dataset.persisted_table_name
AS SELECT * FROM my_external_table_pointing_to_google_drive;

【讨论】:

嗨,云,在我使用 bigquery.jobs 之前,我正忙着先在 Bigquery 中测试这一点 - my_external_table_pointing_to_google_drive;相当于我的驱动器URI,即:drive.google.com/open?id=1RUKQBqQcYxclEUCaN0mWkarVqYWER(我删除了一些字符)我的问题是,即使我从创建表中加载它,选择驱动器放入正确的格式,它也找不到表,但我正在使用完全相同的谷歌帐户和一切,一旦它创建一个空表,我点击外部资源,它打开正常? 你试过cloud.google.com/bigquery/external-data-drive吗? 是的,我已经通过了,作为测试,我刚刚通过控制台,创建表,选择的驱动器使用了 URI:drive.google.com/open?id=file_id。使用正确的 ID,它只是说找不到文件 我个人从来没有使用过g盘上传,最常见的是人们使用谷歌云存储。如果您无法弄清楚 gdrive 的故事,GCS 是一个不错的选择。 感谢 Yun,我想使用驱动器的唯一原因是因为它很容易转换,它应该在上传时自动将 text/csv 转换为 google 表格,从那里我放心上传的数据会自动检测模式,而使用 GCS 时存在上传时使用什么分隔符的问题。我发现驱动器的问题,它是权限驱动的,同一个帐户显然没有任何意义......我不认为驱动器 API 是最好的,考虑到它是免费的,几乎感觉 lii Google 正在将您推向付费服务,这我不介意,但仍然令人沮丧,感谢您的帮助

以上是关于将文件从 Google Drive 加载到 Bigquery的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 文件从 Google Drive 加载到 BigQuery 会产生零行且没有错误

将存储在 Google Cloud Storage 中的文件加载到 Big Query 时出错

是否可以从 Google Drive 自动将内容上传到 Cloud Storage?

将文件从已安装的 Google Drive 复制到本地 Google Colab 会话

Python:从 Google Drive API 获取 zip 文件并加载其内容

使用R包“google drive”从我的google驱动器加载R文件