如何在使用Google云数据库时将.gz文件加载到BigQuery?

2024-05-15 14:13:26 发布

您现在位置:Python中文网/ 问答频道 /正文

Wikipedia将它们的日志文件存储为.gz,BigQuery能够接收.gz文件。

在使用googleclouddatalab时,如何将这些文件“移动”到BigQuery?

(文件位于http://dumps.wikimedia.org/other/pagecounts-raw/


Tags: 文件orghttprawwikipediabigqueryothergz
2条回答

这就是我现在从web加载.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]

如果要枚举单个文件,将其写出,然后从bashshell调用它,甚至可以使用python生成一个shell脚本。在

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


BQ是否支持一次性创建和加载表。如果是这样的话,我们应该确保我们的API能够做到这一点。如果是的话,你能为它归档一个bug吗?在


有关等待从load_async返回的作业,请参阅gcp.bigquery.wait帴all/any. 在


对工作完成情况进行监控/提醒是个好主意。我不完全确定这是数据实验室的事情还是底层作业(例如BQ中的加载作业)应该这样做。原因:您可能会杀死您的Datalab内核,甚至是实例,因此您确实希望作业通知,而不是Datalab监视作业的完成情况。然而,在进行这种整合方面没有分歧。在

相关问题 更多 >