PythonでBig Queryを操作する
/
PythonでBig Queryを操作します.
# ライブラリのインストール
下記のコードでライブラリをインストールします.
!pip install pandas-gbq
!pip install -U pyarrow
!pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
# BigQueryと接続
下記のコードでPandasとBig Queryを接続させます.
from google.cloud import bigquery
# keyとなるjsonファイルを読み込み
KEY_PATH = '****.json'
bq_client = bigquery.Client.from_service_account_json(KEY_PATH)
# データセットの生成
下記のコードでBig Queryのデータセットを生成します.
# データセットの生成
dataset_id = '*****'
bq_client.create_dataset(dataset_id)
# データセットのリストを出力
for ds in bq_client.list_datasets():
print(ds.dataset_id)
# テーブルの作成
# データの読み込み
下記のコードでBigQueryに入れるデータフレームを作成します.
import glob
import pandas as pd
# csvの読み込み
path = "****.csv"
df = pd.read_csv(path)
# スキーマの作成
下記のコードでBigQueryに入れるデータの設定をまとめたスキーマを作成します.
# データ型の確認
df_columns = df.dtypes
df_columns = pd.DataFrame(df_columns).reset_index()
df_columns = df_columns.rename(columns={'index': 'columns', 0: 'type'})
# スキーマ
schema = []
for i in range(len(df_columns)):
column = df_columns['columns'][i]
dtype = str(df_columns['type'][i]).replace('datetime64[ns]', 'DATETIME')\
.replace('int64', 'INTEGER')\
.replace('float64', 'FLOAT')\
.replace('object', 'STRING')
schema.append(bigquery.SchemaField(column, dtype, mode="NULLABLE"))
display(schema)
# [SchemaField('******', 'DATETIME', 'NULLABLE', None, (), None),
# SchemaField('******', 'STRING', 'NULLABLE', None, (), None),
# SchemaField('******', 'INTEGER', 'NULLABLE', None, (), None),
# SchemaField('******', 'FLOAT', 'NULLABLE', None, (), None)]
# テーブルの作成
下記のコードでBigQueryのテーブルを作成します.
# table_idを生成(形式 : project_name.dataset_id.table_name)
table_name = '*****'
dataset = bq_client.get_dataset(dataset_id)
table_id = '%s.%s.%s' % (dataset.project, dataset.dataset_id, table_name)
# テーブル生成
table = bigquery.Table(table_id, schema=schema)
bq_client.create_table(table)
# pandasからのデータの投入
pandasのDataFrameからそのままデータを投入します.
# Tableを取得
table = bigquery.Table(table_id, schema=schema)
# DataFrameを投入
bq_client.insert_rows_from_dataframe(table, df)
# テーブルの削除
下記のコードでテーブルを削除します.
# テーブルの削除
table = dataset.table(table_name)
bq_client.delete_table(table)
# まとめ
PythonでBig Queryを操作させました.
# 参考サイト
PythonでBigQueryの操作 (opens new window)
BigQuery ↔ Pandas間で読み込み/書き込み (opens new window)
[BigQuery] BigQueryのPython用APIの使い方 -テーブル作成編- (opens new window)