如何在使用Google Cloud Datalab时将.gz文件加载到BigQuery?
维基百科将它们的日志文件存储为.gz,并且BigQuery能够摄取.gz文件。如何在使用Google Cloud Datalab时将.gz文件加载到BigQuery?
使用Google Cloud Datalab时,如何将这些文件“移动”到BigQuery?
这是我如何加载。广州从网站现在:
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)
此下载GZ文件在https://dumps.wikimedia.org/other/pagecounts-raw/2015/2015-01/。
观察:
我无法找到一个简单的方法来下载和上传的文件。相反,我把整个东西放在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]
如果要列举的单个文件,把它写出来,然后调用从bash shell中你甚至可以使用Python来生成一个shell脚本。
或存储传输服务。请参阅转移至开发控制台中的云存储。我相信这是一个API,但我们没有为它构建任何python包装器。至少还没有。
BQ是否支持一次性创建和加载表格。如果是这样,我们应该确保我们的API可以做到这一点。如果是这样,你能提交一个错误吗?
对于等待从load_async返回的作业,请参阅gcp.bigquery.wait_all/any。
工作完成监测/警报 - 好主意。我不完全确定这是Datalab的事情还是底层的工作(例如,在BQ中加载工作)应该这样做。原因是:你可能会杀死你的Datalab内核,甚至是实例,所以你真的希望工作通知,而不是Datalab监视工作的完成。但是,这种整合并没有分歧。
您可以使用gcp.bigquery。wait_any/wait_all等待你的工作完成 –
是的,我们要求你在BQ表之前创建一个Table对象。这是因为Table对象具有像exists(),delete()等方法 - 即它们存在与相应的BQ表是否存在无关。 –