Situation dans laquelle vous souhaitez étendre le résultat de la requête de BigQuery vers GCS et l'afficher dans Excel. BigQuery-> GCS crache le résultat avec utf8, donc lorsque je l'ouvre avec Excel, les caractères japonais sont déformés. Par conséquent, implémentez les fonctions cloud qui seront converties en utf8 avec bom sans autorisation lorsque vous placez le fichier dans le compartiment.
Cloud Function with Python Si vous la touchez pour la première fois, lisez cette zone et touchez-la.
Démarrage rapide Python Première fonction: Python
Vous pouvez créer une fonction qui se déclenche lorsqu'un objet est créé dans Cloud Storage
Tutoriel Cloud Storage #Finalizing Objects
Une fonction qui convertit le fichier du bucket en utf8 avec bom et le télécharge avec bom_
ajouté au préfixe.
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
Soyez prudent car vous ne pouvez pas écrire dans des répertoires autres que / tmp
. Quand j'essaye d'écrire, la fonction plante et meurt tranquillement.
La seule partie du système de fichiers accessible en écriture est le répertoire / tmp. Ce répertoire peut être utilisé comme emplacement de stockage pour les fichiers temporaires des instances de fonction.
Environnement d'exécution de Cloud Functions # système de fichiers
PythonClientforGoogleCloudStorage [GoogleCloudStorage] Comment utiliser l'API GCS Python [Note]
Recommended Posts