首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - BigQuery临时表

Python - BigQuery临时表
EN

Stack Overflow用户
提问于 2019-08-01 01:07:41
回答 2查看 1.8K关注 0票数 1

是否可以使用Python将云存储中已有的数据导入到bigquery中的临时表?我可以用Python语言创建一个BigQuery临时表并向其中插入数据吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-09 11:51:12

您只能创建临时表作为bigquery脚本或存储过程的一部分。

您可以做的是创建具有随机后缀名和较短过期时间的表。在我的示例中是一个小时。示例函数创建临时表,并且只需要一个数据集作为参数。

代码语言:javascript
复制
from google.cloud import bigquery
import datetime, pytz, random

PROJECT = "myproject"


def get_temp_table(dataset: str, table_name: str = None, project=None) -> bigquery.Table:
    prefix = "temp"
    suffix = random.randint(10000, 99999)
    if not table_name:
        table_name = "noname"

    temp_table_name = f"{dataset}.{prefix}_{table_name}_{suffix}"
    if project:
        temp_table_name = f"{project}.{temp_table_name}"
    tmp_table_def = bigquery.Table(temp_table_name)
    tmp_table_def.expires = datetime.datetime.now(pytz.utc) + datetime.timedelta(
        hours=1
    )

    return tmp_table_def


client = bigquery.Client(project=PROJECT)

tmp_table_def = get_temp_table("mydataset", "new_users", project=PROJECT)
tmp_table_def.schema = [
    bigquery.SchemaField("id", "STRING", mode="REQUIRED"),
    bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"),
    bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
]
tmp_table = client.create_table(tmp_table_def)  # type: bigquery.Table

data = [
    {"id": "c-1234", "full_name": "John Smith", "age": 39},
    {"id": "c-1234", "full_name": "Patricia Smith", "age": 41},
]

errors = client.insert_rows(tmp_table, data)

print(f"Loaded {len(data)} rows into {tmp_table.dataset_id}:{tmp_table.table_id} with {len(errors)} errors")
票数 5
EN

Stack Overflow用户

发布于 2019-08-01 03:25:11

(这份草案没有考虑临时表,但我认为可以有所帮助。)我将其用于google cloud functions和Python3.7,运行良好。

代码语言:javascript
复制
from google.cloud import storage,bigquery
import json
import os
import csv
import io
import pandas as pd

def upload_dataframe_gbq(df,table_name):
    bq_client = bigquery.Client()
    dataset_id = 'your_dataset_id'
    dataset_ref = bq_client.dataset(dataset_id)
    table_ref = dataset_ref.table(table_name)
    job = bq_client.load_table_from_dataframe(df, table_ref)
    job.result()  # Waits for table load to complete.
    assert job.state == "DONE"
    table = bq_client.get_table(table_ref)
    print(table.num_rows)


os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="your_credentials.json"
client = storage.Client()
bucket = client.get_bucket('your_bucket_name')
blob = bucket.blob('sample.csv')
content = blob.download_as_string()
csv_content = BytesIO(content)
df = pd.read_csv(csv_content, sep=",", header=0 )
table_name = "your_big_query_table_name"
upload_dataframe_gbq(df,table_name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57295881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档