将文件从 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 会话