2015-11-05 66 views

回答

1

這是我如何加載。廣州從網站現在:

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

+0

您可以使用gcp.bigquery。wait_any/wait_all等待你的工作完成 –

+0

是的,我們要求你在BQ表之前創建一個Table對象。這是因爲Table對象具有像exists(),delete()等方法 - 即它們存在與相應的BQ表是否存在無關。 –

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腳本。

或存儲傳輸服務。請參閱轉移至開發控制檯中的雲存儲。我相信這是一個API,但我們沒有爲它構建任何python包裝器。至少還沒有。


BQ是否支持一次性創建和加載表格。如果是這樣,我們應該確保我們的API可以做到這一點。如果是這樣,你能提交一個錯誤嗎?


對於等待從load_async返回的作業,請參閱gcp.bigquery.wait_all/any。


工作完成監測/警報 - 好主意。我不完全確定這是Datalab的事情還是底層的工作(例如,在BQ中加載工作)應該這樣做。原因是:你可能會殺死你的Datalab內核,甚至是實例,所以你真的希望工作通知,而不是Datalab監視工作的完成。但是,這種整合並沒有分歧。

相關問題