2017-06-22 19 views
2

我有一個表與許多(數百)&後來將成千上萬的更新查詢,我想從數據實驗室執行。datalab&谷歌bigQuery客戶端 - 試圖在數據幀中執行BQ更新命令

的代碼如下: 與命令讀取表:

%%sql --module std_sql_table 
WITH q1 as (
    SELECT * FROM `speedy-emissary-167213.pgp_orielresearch.update_queries` 
) 
select * from q1 

import datalab.bigquery as bq 
#uses panda for the dataframe 
query_table_df = bq.Query(std_sql_table).to_dataframe(dialect='standard',use_cache=True) 
print(query_table_df.head(10)) 
col_name = list(query_table_df) # the name of the column 
print(col_name) 
#THIS LOOP IS FOR THE UPDATE COMMAND ROWS THAT I WANT TO EXECUTE 

#for index, row in query_table_df.iterrows(): 
    #print "running " + row[col_name] 
    #row_query = row[col_name] 
    #query_result_row_df = bq.Query(row_query).to_dataframe(dialect='standard',use_cache=True) 

的輸出是下面,我想在表中執行的每一行: 0 UPDATE speedy-emissary-167213.pgp_orielresear... 1 UPDATE speedy-emissary-167213.pgp_orielresear ... 2 UPDATE speedy-emissary-167213.pgp_orielresear... 3 UPDATE speedy-emissary-167213.pgp_orielresear ... 4 UPDATE speedy-emissary-167213.pgp_orielresear... 5 UPDATE speedy-emissary-167213.pgp_orielresear ... 6 UPDATE speedy-emissary-167213.pgp_orielresear... 7 UPDATE快速-使者 - 167213.pgp_orielresear ... 8 UPDATE speedy-emissary-167213.pgp_orielresear... 9 UPDATE迅速-使者 - 167213.pgp_orielresear ... [u'f0_']

任何想法非常歡迎!

回答

1

請閱讀以下文檔: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language

基本上你需要合併更新語句,否則你會打的配額問題,付出比需要更多的和得到更差的性能。 Bigquery適用於分析,但不應將其視爲通用數據庫。

+0

謝謝你的建議。我將合併更新命令並保持更新 – eilalan

+0

我正在考慮在Google工作表上創建和填充數據,然後將其導入BigQuery,但是,Google表格中存在256列限制。由於我從頭開始構建這個表(創建一個表,然後填充來自另外兩個表的數據),因此我可以靈活地以不同的方式來完成。你有沒有關於如何創建這張表的另一個想法。谷歌雲SQL會爲此工作嗎?我沒有任何經驗,但很高興使用它,如果需要。請指教。或者,合併更新的創造性方式。感謝您的任何建議! – eilalan

+0

有趣的是,我並不知道谷歌表上的256列限制。但是你打算用手還是通過程序創建原始表格?如果是後者,那麼你可以創建自己的JSON/CSV/Avro文件並上傳。如果你打算手工創建它,那麼我可能會找到另一個編輯器(比如支持多達1024列的liberoffice calc)來準備文件。請同時閱讀以下文檔: [loading-data](https://cloud.google.com/bigquery/loading-data) [準備 - 數據加載](https://cloud.google.com/ bigquery /準備數據加載) – xuejian