Il arrive que vous deviez gérer un format de fichier complexe au-delà des capacités de notre action Load
Objectif
Il arrive que vous deviez gérer un format de fichier complexe au-delà des capacités de notre action Load.
Dans ce cas, nous vous conseillons de stocker et de manipuler les fichiers avec les Buckets de la Data Platform dans votre projet.
Info
Dans le SDK Python de la Data Platform, le connecteur Datastore est utilisé pour interagir avec les Buckets de la Data Platform. Vous pouvez voir le Datastore simplement comme un conteneur de buckets.
L'exemple suivant est écrit dans le contexte d'une action Custom. Vous pouvez l'adapter selon vos besoins.
import sys
import pandas as pd
from logging import getLogger
from forepaas.dwh import connect
from forepaas.dwh import bulk_insert
logger = getLogger(__name__)
def extract_func(event):
try:
# on récupère des données depuis un bucket et on les archive dans un autre bucket
bucket_source_name = "your_source_bucket_name_here"
bucket_archives_name = "your_source_bucket_name_here"
# crée un connecteur pour gérer le bucket
bucket_connector = connect("data_store/{}".format(bucket_source_name))
# liste les fichiers du bucket
files = bucket_connector.list()
# récupère un fichier depuis le bucket Data Store vers un dossier local temporaire
bucket_filepath = "stations_rides.csv"
local_filepath = "/tmp/stations_rides.csv"
bucket_connector.fget(bucket_filepath, local_filepath)
# lit puis transforme le fichier selon vos besoins
# ici le format de la colonne date est simplement ajusté pour des raisons de compatibilité
df = pd.read_csv(local_filepath, sep=';')
df['date'] = pd.to_datetime(df['date'])
# charge le dataframe dans une table du projet nommée 'raw_file'
cn = connect("dwh/default_dataset/")
bulk_insert(cn, "stations_rides_artur", df)
del cn
# option 1 : copie le fichier dans le bucket d'archives
bucket_archive_filepath = "archives/stations_rides.csv"
bucket_connector.fcopy_to(bucket_archives_name, bucket_archive_filepath, bucket_filepath)
# option 2 : dépose un fichier dans les archives
bucket_archives = connect("data_store/{}".format(bucket_archives_name))
bucket_archives.fput(bucket_archive_filepath, local_filepath)
del bucket_archives
# supprime le fichier du bucket source
bucket_connector.delete(bucket_filepath)
# se déconnecte du datastore
del bucket_connector
except Exception as err:
raise Exception("err:{} L:{}".format(err,sys.exc_info()[2].tb_lineno))
Tip
Cela fonctionne également avec tout Object Store que vous pouvez définir comme source compatible S31 dans les Connectors.
Un autre exemple
Voici un exemple de code qui charge une image dans un bucket à partir d'une simple URL.
from forepaas.dwh import connect
data_store = connect('data_store')
# Récupère le bucket et charge l'image depuis l'URL vers le chemin forepaas/test.jpg.
# Puis récupère enfin l'image depuis le bucket
bucket_test = data_store.get_bucket('test')
lists = bucket_test.list(recursive=True)
bucket_test.put_request("https://i.stack.imgur.com/r8jTK.jpg", path='forepaas/test.jpg')
data = bucket.get('hello/test.jpg')
# Crée un bucket s'il n'existe pas déjà
if data_store.bucket_exists('test-exists') is False:
data_store.create_bucket('test-exists')
# Se connecte directement au bucket test et supprime le fichier
bucket_test2 = connect('data_store/test')
bucket_test2.delete('hello/test.jpg')
Aller plus loin
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.
Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.
Rejoignez notre communauté d'utilisateurs.
1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.