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

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

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

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

【问题讨论】:

    标签: python google-bigquery google-cloud-datalab


    【解决方案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 监视作业的完成。但是,对于这种整合没有异议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多