一方面是我学艺不精,我觉得bigquery特别难用。
当然主要说的是IDE,习惯了SSMS,SQL Developer,突然用BQ,很不适应。
不得不写SQL去增啥改数据,拿登录来说,大量的数据登录就很麻烦了。
BQ有个很搞笑,很自作聪明的功能,如果表里没有数据,登录一条,或者CSV上传一条数据,它会根据你登的数据去更改表字段的类型,理解不了大公司的脑洞。
导致我不得不在登录数据之前先设定好schema。
没办法了,自己写了Python程序,把需要登录的数据做成一个CSV,通过Python登进去。
先说module,这个是必须的。
from google.cloud import bigquery
接下来具体实现。
from google.cloud import bigquery
client = bigquery.Client()
job_config = bigquery.LoadJobConfig(
# schema一个个地设定很麻烦,可以提成一个文件。或者变量。
schema=[
bigquery.SchemaField("name", "STRING"),
bigquery.SchemaField("post_abbr", "STRING"),
],
# 我这里用的是WRITE_TRUNCATE,会先把表清空,也可以指定别的
# WRITE_APPEND也OK
write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE,
# 我用的是CSV,也可以指定JSON
source_format=bigquery.SourceFormat.CSV,
)
# 请设定encoding,否则登不进去
# 如果你的项目里有带小数的,请个别设定为Str。
# 可以在read_csv里面的dtype参数里设定
df=pd.read_csv([csv路径], encoding="utf-8" dtype={'字段1':str,'字段2':str})
load_job = client.load_table_from_dataframe(
df, table_id, job_config=job_config
)
load_job.result()
有一些别的module,请适当的导入或安装。
在bigquery.LoadJobConfig有这么一个OPTION,自动探索的说,说啥呢,就是一开始讲的,会更改表字段的类型,我是不会用的。
autodetect=True
也可以考虑使用下面的module导入数据。
import pandas
import pandas_gbq
pandas_gbq.to_gbq(df, table_id, project_id=project_id)
如果大家觉得有更好的办法,或者我的认知有误,请指出,不胜感谢。