Die Situation, in der Sie das Abfrageergebnis von BigQuery auf GCS erweitern und in Excel anzeigen möchten. BigQuery-> GCS spuckt das Ergebnis mit utf8 aus. Wenn ich es also mit Excel öffne, werden japanische Zeichen verstümmelt. Implementieren Sie daher Cloud-Funktionen, die mit bom ohne Erlaubnis in utf8 konvertiert werden, wenn Sie die Datei in den Bucket legen.
Cloud Function with Python Wenn Sie es zum ersten Mal berühren, lesen Sie diesen Bereich und berühren Sie ihn.
Python-Schnellstart Erste Funktion: Python
Sie können eine Funktion erstellen, die ausgelöst wird, wenn ein Objekt in Cloud Storage erstellt wird
Tutorial zum Cloud-Speicher # Objekte finalisieren
Eine Funktion, die die Datei im Bucket mit bom in utf8 konvertiert und sie mit bom_
hochlädt, das dem Präfix hinzugefügt wurde.
main.py
from google.cloud import storage
def convert_to_bom(data, context):
bucket_name = data['bucket']
file_path = data['name']
prefix = 'bom_'
file_path_arr = file_path.split('/')
file_name = file_path_arr[-1]
if file_name.startswith(prefix):
return 'skipping of bom file.'
dir_arr = file_path_arr[:-1]
dir_path = '/'.join(dir_arr) + '/'
local_file_path = '/tmp/' + file_name
if(len(file_path_arr) == 1):
new_file_path = prefix + file_path
else:
new_file_path = dir_path + prefix + file_name
client = storage.Client()
bucket = client.get_bucket(bucket_name)
dl_blob = bucket.get_blob(file_path)
up_blob = bucket.blob(new_file_path)
with open(local_file_path, 'w', newline='', encoding='utf_8_sig', errors='ignore') as f:
f.write(dl_blob.download_as_string().decode('utf8'))
up_blob.upload_from_filename(local_file_path)
return 'success'
requirements.txt
-i https://pypi.org/simple
cachetools==4.1.0
certifi==2020.4.5.1
chardet==3.0.4
google-api-core==1.19.0
google-auth==1.16.1
google-cloud-core==1.3.0
google-cloud-storage==1.28.1
google-resumable-media==0.5.1
googleapis-common-protos==1.52.0
idna==2.9
protobuf==3.12.2
pyasn1-modules==0.2.8
pyasn1==0.4.8
pytz==2020.1
requests==2.23.0
rsa==4.0
six==1.15.0
urllib3==1.25.9
gcloud functions deploy convert_to_bom --runtime python37 --trigger-resource ${YOUR_BUCKET} --trigger-event google.storage.object.finalize
Seien Sie vorsichtig, da Sie nicht in andere Verzeichnisse als / tmp
schreiben können. Wenn ich versuche zu schreiben, stürzt die Funktion ab und stirbt leise.
Der einzige beschreibbare Teil des Dateisystems ist das Verzeichnis / tmp. Dieses Verzeichnis kann als Speicherort für temporäre Dateien für Funktionsinstanzen verwendet werden.
Ausführungsumgebung für Cloud-Funktionen # Dateisystem
PythonClientforGoogleCloudStorage [GoogleCloudStorage] Verwendung der GCS Python-API [Hinweis]
Recommended Posts