如何在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
在你的脚本:
或滚动使用了以下机身自己的表插入请求:
{
"tableReference": {
"projectId": "myProject",
"tableId": "table1",
"datasetId": "mydataset"
},
"timePartitioning": {
"type": "DAY"
}
}
一切都只是通过REST API here支持。
格雷厄姆 - 我无法控制从sdk中找到的分区。我已经在上面解释过了。如果你可以建议所有,将不胜感激。干杯 – goose
忽略我 - 结果我只是不知道我在问什么。如果我只是将一个日期序列(即20170930)附加到每个日期数据的表名末尾,那么我最终将按照能够使用星号表示和_TABLE_SUFFIX BETWEEN'start'查询表的方式来组织数据。 AND'finish' - 我现在认为这不是技术上的分割,它们实际上是分开的表格,只是用一种方便的语法来查询它们。再次感谢。 – goose
你有没有在App Engine中使用https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html的例子?我找不到任何东西,table_to_make = bigquery.Table(table_ref,partitioning_type =“DAY”)不起作用:) – MarkeD