2017-09-26 24 views
1

我剛剛低於100M的數據記錄,我希望通過非規格化字段進行轉換,然後輸入到日期分區的GBQ表中。日期回到2001年。如何在GBQ中創建日期分區表?你可以使用python嗎?

我曾希望我可以用Python轉換它,然後直接從腳本中使用GBQ來完成這個任務,但是在閱讀完這篇文章後,看起來並不是那麼簡單創建日期分區表。我正在尋找一個正確的方向。

有沒有可以做到這一點的Python腳本的工作示例?還是不可能通過Python來完成?或者還有另一種方法可以讓人指向我的方向?

更新

我不知道如果我錯過了什麼,但創建的表似乎被劃分爲按當我創建表的插入日期,我想通過分區在現有數據集內設置的日期。無論如何我都看不到改變這一點。

這裏就是我和嘗試:

import uuid 
import os 
import csv 

from google.cloud import bigquery 
from google.cloud.bigquery import SchemaField 
from google.cloud.bigquery import Client 
from google.cloud.bigquery import Table 
import logging #logging.warning(data_store+file) 
import json 
import pprint 

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path to service account credentials' 

client = bigquery.Client() 

dataset = client.dataset('test_dataset') 
dataset.create() 

SCHEMA = [ 
    SchemaField('full_name', 'STRING', mode='required'), 
    SchemaField('age', 'INTEGER', mode='required'), 
] 
table = dataset.table('table_name', SCHEMA) 
table.partitioning_type = "DAY" 
table.create() 

rows = [ 
    ('bob', 30), 
    ('bill', 31) 
] 

table.insert_data(rows) 

是否有可能修改這是我創建表和插入數據採取分區控制?

更新2

原來我不是找表分區,對我的使用情況下,它是不夠的,只是一個日期序列追加到我的表名的末尾,然後沿東西查詢行:

SELECT * FROM `dataset.test_dataset.table_name_*` 
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170702' 

我不知道這是否技術上仍然分區或不,但據我所見,它有相同的好處。

回答

3

您可以使用API​​和Python SDK輕鬆創建日期分區表。只需將timePartitioning字段設置爲DAY在你的腳本:

https://github.com/GoogleCloudPlatform/google-cloud-python/blob/a14905b6931ba3be94adac4d12d59232077b33d2/bigquery/google/cloud/bigquery/table.py#L219

或滾動使用了以下機身自己的表插入請求:

{ 
    "tableReference": { 
    "projectId": "myProject", 
    "tableId": "table1", 
    "datasetId": "mydataset" 
    }, 
    "timePartitioning": { 
    "type": "DAY" 
    } 
} 

一切都只是通過REST API here支持。

+0

格雷厄姆 - 我無法控制從sdk中找到的分區。我已經在上面解釋過了。如果你可以建議所有,將不勝感激。乾杯 – goose

+0

忽略我 - 結果我只是不知道我在問什麼。如果我只是將一個日期序列(即20170930)附加到每個日期數據的表名末尾,那麼我最終將按照能夠使用星號表示和_TABLE_SUFFIX BETWEEN'start'查詢表的方式來組織數據。 AND'finish' - 我現在認爲這不是技術上的分割,它們實際上是分開的表格,只是用一種方便的語法來查詢它們。再次感謝。 – goose

+0

你有沒有在App Engine中使用https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html的例子?我找不到任何東西,table_to_make = bigquery.Table(table_ref,partitioning_type =「DAY」)不起作用:) – MarkeD

相關問題