PythonでBig Queryを操作します.
ライブラリのインストール
下記のコードでライブラリをインストールします.
python
!pip install pandas-gbq
!pip install -U pyarrow
!pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
BigQueryと接続
下記のコードでPandasとBig Queryを接続させます.
python
from google.cloud import bigquery
# keyとなるjsonファイルを読み込み
KEY_PATH = '****.json'
bq_client = bigquery.Client.from_service_account_json(KEY_PATH)
データセットの生成
下記のコードでBig Queryのデータセットを生成します.
python
# データセットの生成
dataset_id = '*****'
bq_client.create_dataset(dataset_id)
# データセットのリストを出力
for ds in bq_client.list_datasets():
print(ds.dataset_id)
テーブルの作成
データの読み込み
下記のコードでBigQueryに入れるデータフレームを作成します.
python
import glob
import pandas as pd
# csvの読み込み
path = "****.csv"
df = pd.read_csv(path)
スキーマの作成
下記のコードでBigQueryに入れるデータの設定をまとめたスキーマを作成します.
python
# データ型の確認
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のテーブルを作成します.
python
# 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からそのままデータを投入します.
python
# Tableを取得
table = bigquery.Table(table_id, schema=schema)
# DataFrameを投入
bq_client.insert_rows_from_dataframe(table, df)
テーブルの削除
下記のコードでテーブルを削除します.
python
# テーブルの削除
table = dataset.table(table_name)
bq_client.delete_table(table)
まとめ
PythonでBig Queryを操作させました.