from pathlib import Path from hashlib import sha256 datadir = Path('data') def get_df_from_bq(sql: str, **opt): hashed = sha256(sql.encode("utf-8")).hexdigest() cache = datadir / "cache" cache.mkdir(exist_ok=True) fname = cache / f"{hashed}.csv" if fname.exists(): return pd.read_csv(fname, **opt) else: client = bigquery.Client() df = client.query(sql).to_dataframe() df.to_csv(fname, index=False) return df