Создайте таблицу BigQuery из pandas фрейма данных, БЕЗ явного указания схемы - PullRequest
1 голос
/ 01 августа 2020

У меня есть фрейм данных pandas, и я хочу создать на его основе таблицу BigQuery. Я понимаю, что есть много сообщений об этом вопросе, но все ответы, которые я могу найти до сих пор, требуют явного указания схемы каждого столбца. Например:

from google.cloud import bigquery as bq

client = bq.Client()

dataset_ref = client.dataset('my_dataset', project = 'my_project')
table_ref = dataset_ref.table('my_table')  

job_config = bq.LoadJobConfig( 
 schema=[ 
     bq.SchemaField("a", bq.enums.SqlTypeNames.STRING),
     bq.SchemaField("b", bq.enums.SqlTypeNames.INT64), 
     bq.SchemaField("c", bq.enums.SqlTypeNames.FLOAT64),         
 ]
) 

client.load_table_from_dataframe(my_df, table_ref, job_config=job_config).result()

Однако иногда у меня есть фрейм данных из многих столбцов (например, 100 столбцов), действительно нетривиально указать все столбцы. Есть ли способ сделать это эффективно?

Кстати, я нашел этот пост с похожим вопросом: Эффективно записать Pandas фрейм данных в Google BigQuery Но похоже, что bq.Schema.from_dataframe не существует :

AttributeError: module 'google.cloud.bigquery' has no attribute 'Schema'

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Вот фрагмент кода для загрузки DataFrame в BQ:

import pandas as pd
from google.cloud import bigquery

# Example data
df = pd.DataFrame({'a': [1,2,4], 'b': ['123', '456', '000']})

# Load client
client = bigquery.Client(project='your-project-id')

# Define table name, in format dataset.table_name
table = 'your-dataset.your-table'

# Load data to BQ
job = client.load_table_from_dataframe(df, table)

Если вы хотите указать только подмножество схемы и по-прежнему импортировать все столбцы, вы можете переключить последнюю строку с помощью

# Define a job config object, with a subset of the schema
job_config = bigquery.LoadJobConfig(schema=[bigquery.SchemaField('b', 'STRING')])

# Load data to BQ
job = client.load_table_from_dataframe(df, table, job_config=job_config)
0 голосов
/ 04 августа 2020

Вот рабочий код:

from google.cloud import bigquery
import pandas as pd

bigqueryClient = bigquery.Client()
tableRef = bigqueryClient.dataset("dataset-name").table("table-name")

dataFrame = pd.read_csv("file-name")

bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef)
bigqueryJob.result()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...