使用 Google Cloud Datalab 时如何将 .gz 文件加载到 BigQuery?

Posted

技术标签:

【中文标题】使用 Google Cloud Datalab 时如何将 .gz 文件加载到 BigQuery?【英文标题】:How to load .gz files to BigQuery when using Google Cloud Datalab? 【发布时间】:2015-11-05 05:06:20 【问题描述】:

***将他们的日志文件存储为 .gz,BigQuery 能够提取 .gz 文件。

如何在使用 Google Cloud Datalab 时将此文件“移动”到 BigQuery?

(http://dumps.wikimedia.org/other/pagecounts-raw/ 的文件)

【问题讨论】:

【参考方案1】:

这就是我现在从网络加载 .gz 的方式:

import gcp.bigquery as bq
import gcp.storage as storage

f = urllib.urlopen(url)   
storage.Bucket('mybucket').item(gcs_url).write_to(f.read(), 'application/x-gzip')
table = bq.Table('%s.%s' % (dataset_name, table_name)).create(schema=schema, overwrite = True)
table.load_async(
  'gs://mybucket/%s' % gcs_url, mode='overwrite', csv_delimiter=' ', quote='', max_bad_records=100)

这是在https://dumps.wikimedia.org/other/pagecounts-raw/2015/2015-01/下载gz文件。

观察:

我找不到下载和上传文件的简单方法。相反,我将整个东西保存在 RAM (~100GB) 中。它适用于此用例,但不适用于较大的文件。

我在将数据加载到其中之前创建了表。我不知道如何同时做这两个(因此 BigQuery 有一段时间有一个空表)。

当我使用 load_async 时,我希望有一种简单的方法可以等待所有作业完成。

有什么简单的方法可以集成https://cloud.google.com/monitoring/,以便在工作完成时呼叫我?

(问题跟踪器https://github.com/GoogleCloudPlatform/datalab/issues/198)

【讨论】:

您可以使用 gcp.bigquery.wait_any/wait_all 等待您的作业完成 是的,我们要求您在 BQ 表之前创建一个 Table 对象。这是因为 Table 对象具有诸如 exists()、delete() 等方法 - 即它们的存在独立于相应的 BQ 表是否存在。【参考方案2】:

对于从某个 HTTP 位置复制大文件,您有一些选择。您可以从笔记本中调用单个 bash 命令,并在 bash 单元中使用 wget 和 gsutil 的组合。

%%bash
mkdir -p /tmp/data
cd /tmp/data
wget [src url]
gsutil cp [local file] [gcs location]

如果你想枚举单个文件,你甚至可以使用 python 生成一个 shell 脚本,写出来然后从 bash shell 调用它。

或存储传输服务。请参阅在开发控制台中传输直到云存储。我相信有一个 API,但我们没有为它构建任何 python 包装器。至少现在还没有。


BQ 是否支持一次性创建和加载表格。如果是这样,我们应该确保我们的 API 可以做到这一点。如果是,您可以为此提交错误吗?


有关等待从 load_async 返回的作业,请参阅 gcp.bigquery.wait_all/any。


监控/提醒工作完成——好主意。我不完全确定这是 Datalab 的事情还是基础工作(例如 BQ 中的加载工作)应该这样做。原因:您可能会杀死您的 Datalab 内核,甚至是实例,因此您确实希望通知作业,而不是 Datalab 监视作业的完成。但是,对于这种整合没有异议。

【讨论】:

以上是关于使用 Google Cloud Datalab 时如何将 .gz 文件加载到 BigQuery?的主要内容,如果未能解决你的问题,请参考以下文章

从 Google Cloud Datalab 向 BigQuery 插入数据时如何调试解析错误?

如何在 Google Cloud Datalab 中使用 Bigquery JSON 函数

Google Cloud Datalab 中的 BigQuery - 获取查询文本?

如何使用 R 将 Google Cloud Datalab 输出保存到 BigQuery

如何使用R将Google Cloud Datalab输出保存到BigQuery中

如何在我的本地 linux 服务器上运行 google-cloud-datalab?