Wikipedia将他们的日志文件存储为.gz,BigQuery能够获取.gz文件。
我怎样才能"移动"使用Google Cloud Datalab时,此文件是否为BigQuery?
答案 0 :(得分: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)
答案 1 :(得分:0)
要从某个HTTP位置复制大文件,您有一些选择。您可以从笔记本中调用单独的bash命令,并在bash单元格中使用wget和gsutil的组合。
%%bash
mkdir -p /tmp/data
cd /tmp/data
wget [src url]
gsutil cp [local file] [gcs location]
如果要枚举单个文件,将其写出然后从bash shell调用它,你甚至可以使用python生成shell脚本。
或Storage Transfer服务。请参阅在开发控制台中转移到云存储。我相信有一个API,但我们没有为它构建任何python包装器。至少还没有。
BQ是否支持一次性创建和加载表格。如果是这样,我们应该确保我们的API可以做到这一点。如果是这样的话,你可以提交一个bug吗?
有关等待load_async返回的作业,请参阅gcp.bigquery.wait_all / any。
监督/警告工作完成 - 好主意。我不完全确定这是Datalab的事情还是基础工作(例如BQ中的加载工作)应该这样做。原因是:您可能会杀死您的Datalab内核,甚至是实例,因此您确实希望通知作业,而不是Datalab监视作业的完成情况。但是,对这种整合没有异议。