維基百科將它們的日誌文件存儲爲.gz,並且BigQuery能夠攝取.gz文件。如何在使用Google Cloud Datalab時將.gz文件加載到BigQuery?
使用Google Cloud Datalab時,如何將這些文件「移動」到BigQuery?
(文件在http://dumps.wikimedia.org/other/pagecounts-raw/)
維基百科將它們的日誌文件存儲爲.gz,並且BigQuery能夠攝取.gz文件。如何在使用Google Cloud Datalab時將.gz文件加載到BigQuery?
使用Google Cloud Datalab時,如何將這些文件「移動」到BigQuery?
(文件在http://dumps.wikimedia.org/other/pagecounts-raw/)
這是我如何加載。廣州從網站現在:
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表是否存在無關。 –