我的要求是将数据从BQ导出到GCS,以特定的排序顺序,我无法使用自动导出,因此试图为此编写手动导出。文件格式如下:
HDR001||5378473972abc||20101|182082||
DTL001||436282798101|
DTL002||QS
DTL005||3733|8
DTL002||QA
DTL005||3733|8
DTL002||QP
DTL005||3733|8
DTL001||436282798111|
DTL002||QS
DTL005||3133|2
DTL002||QA
DTL005||3133|8
DTL002||QP
DTL005||3133|0
我对此非常陌生,能够在本地磁盘中写入文件,但我不确定如何将此写入文件到GCS。我试图使用write_to_file,但我似乎错过了一些东西。
import pandas as pd
import pickle as pkl
import tempfile
from google.colab import auth
from google.cloud import bigquery, storage
#import cloudstorage as GCSauth.authenticate_user ()
df = pd.DataFrame(data=job)
sc = storage.Client(project='temp-project')
with tempfile.NamedTemporaryFile(mode='w+b', buffering=- 1,prefix='test',suffix='temp') as fh:
with open(fh.name,'w+',newline='') as f:
dfAsString = df.to_string(header=" ", index=False)
fh.name = fh.write(dfAsString)
fh.close()
bucket = sc.get_bucket('my-bucket')
target_fn = 'test.csv'
source_fn = fh.name
destination_blob_name = bucket.blob('test.csv')
bucket.blob(destination_blob_name).upload_from_file(source_fn)
有人能帮帮我吗?
谢谢。
我建议通过云存储桶上传对象。你需要用upload_from_filename
代替upload_from_file
。你的代码应该像这样:
bucket.blob(destination_blob_name).upload_from_filename(source_fn)
这里有关于如何将对象上传到Cloud Storage桶和Client库文档的文档链接。
编辑:
你得到这个的原因是因为在你代码的某个地方,你传递了一个Blob对象,而不是一个String对象。当前你的目标变量是一个Blob Object,把它改成String:
destination_blob_name = bucket.blob('test.csv')
destination_blob_name = 'test.csv'