For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/data-platform/developers-python-sdk-quick-start-bucket.md.

Action Custom avec les Buckets de la Data Platform

Voir en Markdown

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.

Cette page vous a-t-elle aidé ?