维基百科将他们的日志文件存储为 .gz,BigQuery 能够提取 .gz 文件。
使用 Google Cloud Datalab 时如何将这些文件“移动”到 BigQuery?
维基百科将他们的日志文件存储为 .gz,BigQuery 能够提取 .gz 文件。
使用 Google Cloud Datalab 时如何将这些文件“移动”到 BigQuery?
这就是我现在从网上加载 .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)
对于从某个 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 监视作业的完成。但是,对于这种整合没有异议。