goo*_*ose 3 python google-bigquery
我有不到 100M 的数据记录,我希望通过对字段进行非规范化然后输入到日期分区的 GBQ 表中来转换这些数据记录。日期可以追溯到2001年。
我曾希望我可以用 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)
Run Code Online (Sandbox Code Playgroud)
在我创建表和插入数据时,是否可以修改它以控制分区?
更新 2
事实证明,我不是在寻找表分区,对于我的用例,只需将日期序列附加到表名的末尾,然后使用以下内容进行查询就足够了:
SELECT * FROM `dataset.test_dataset.table_name_*`
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170702'
Run Code Online (Sandbox Code Playgroud)
我不知道这在技术上是否仍然是分区,但据我所知,它具有相同的好处。
更新到最新版本 ( google-cloud-biquery==1.4.0)
from google.cloud import bigquery
client = bigquery.Client()
dataset_ref = client.dataset('test_dataset')
table_ref = dataset_ref.table('test_table')
SCHEMA = [
SchemaField('full_name', 'STRING', mode='required'),
SchemaField('age', 'INTEGER', mode='required'),
]
table = bigquery.Table(table_ref, schema=SCHEMA)
if partition not in ('DAY', ):
raise NotImplementedError(f"BigQuery partition type unknown: {partition}")
table.time_partitioning = bigquery.table.TimePartitioning(type_=partition)
table = client.create_table(table) # API request
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |