如何在GBQ中创建日期分区表?你可以使用python吗?

问题描述:

我刚刚低于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' 

我不知道这是否技术上仍然分区或不,但据我所见,它有相同的好处。

您可以使用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