前提
vertica-python, pandas, gspread, oauth2clientをインストールしておくこと。
Verticaの接続情報を正しく設定すること。
Google APIのサービスアカウントを作成し、JSONキーを取得すること。
スプレッドシートの名前を正しく設定し、サービスアカウントに編集権限を付与すること。
Vertica とは
1.Verticaからデータを取得:
Pythonでvertica-pythonパッケージを使い、Verticaのデータベースからデータを取得する。
###2.Pandasでデータを処理:
取得したデータをPandas DataFrameに読み込み、必要な処理を行う。
3.Google APIの設定:
Google Developers Consoleでプロジェクトを作成し、Google Sheets APIを有効にする。サービスアカウントを作成してキーをダウンロードする。
4.gspreadを使ってスプレッドシートにアクセス:
gspreadパッケージとGoogle APIの認証情報を使って、PandasのデータをGoogle スプレッドシートに書き込む。
コードはこんな感じ
import vertica_python
import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# Verticaデータベース接続情報
conn_info = {'host': 'VERTICA_HOST',
'port': 5433,
'user': 'USERNAME',
'password': 'PASSWORD',
'database': 'DBNAME'}
# SQLクエリ
query = "SELECT * FROM your_table"
# Verticaからデータ取得し、Pandas DataFrameへ読み込み
with vertica_python.connect(**conn_info) as connection:
df = pd.read_sql(query, connection)
# Pandasでのデータ処理(任意)
# Google Sheets APIとサービスアカウントの認証
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('your-google-creds.json', scope)
client = gspread.authorize(creds)
# スプレッドシートを開く
sheet = client.open('your_spreadsheet_name').sheet1
# DataFrameからスプレッドシートへデータを書き込む関数
def df_to_sheet(df, sheet, clear=True):
if clear:
sheet.clear()
cells = gspread.utils.dataframe_to_cells(df)
sheet.update_cells(cells)
# 実行
df_to_sheet(df, sheet)
自動実行する場合、Linuxならcron、Windowsならタスクスケジューラを設定する。
ここではcronでの実行例を示す(毎事0分に実行)
0 * * * * /usr/bin/python3 /path/to/your_script.py
注意点
・大量のデータを扱う場合、Google Sheets APIのレートリミットに注意。APIの呼び出し回数の制限を超える可能性があるので、リアルタイムとかはあまりおすすめしない。(上の記載例で現状エラーは出ていないが)