Condivisione dati via Python
Documentazione tecnica su come i clienti possono acquisire tabelle di condivisione dati tramite Python
Contesto
Per i clienti che dispongono di strumenti di visualizzazione dei dati che non funzionano con il metodo di condivisione dei dati da databricks, utilizzeremo questa implementazione Python per supportare un inserimento dati efficace.
Introduzione
Delta Sharing è un protocollo aperto sviluppato da Databricks per la condivisione sicura dei dati in tempo reale tra organizzazioni. Consente a un fornitore di dati di condividere i set di dati con i destinatari senza richiedere loro di utilizzare Databricks o qualsiasi piattaforma specifica.
Questa guida ti spiega come consumare i dati condivisi tramite Delta Sharing e inserirli nel tuo database. Forniamo uno script di riferimento Python pronto all'uso che legge una tabella Delta condivisa e la scrive in un database PostgreSQL.
Per chi è pensato?
Questa guida è per i clienti che ricevono dati attraverso Delta Sharing e desiderano caricarli in un sistema che non supporta nativamente il formato Delta — come PostgreSQL, MySQL, o qualsiasi database SQL.
Panoramica dell'architettura
Il flusso di acquisizione è semplice:
┌──────────────────────┐ ┌────────────────────┐ ┌──────────────────────┐
│ Databricks │ │ Python Script │ │ Your Database │
│ Delta Sharing │──────▶│ (this repository) │──────▶│ (e.g. PostgreSQL) │
│ │ HTTPS │ │ SQL │ │
│ Shared tables are │ │ 1. Reads data via │ │ Data is written to │
│ accessed via a │ │ Delta Sharing │ │ the target table │
│ .share profile │ │ 2. Loads into a │ │ using standard SQL │
│ │ │ Pandas DataFrame│ │ (INSERT / REPLACE) │
└──────────────────────┘ └────────────────────┘ └──────────────────────┘
Non è necessario un account Databricks per il destinatario.
Nessun driver speciale — lo script utilizza la libreria Python open-source delta-sharing.
I dati rimangono sotto il tuo controllo — una volta acquisiti, i dati risiedono nel tuo database.
Prerequisiti
Prima di iniziare, assicurati di avere quanto segue:
Requisito |
Dettagli |
|---|---|
Python |
Versione 3.9 o superiore. Verifica con |
Git |
Per clonare il repository. Verifica con |
Docker (facoltativo) |
Serve solo se vuoi avviare un PostgreSQL locale per i test. |
PostgreSQL |
Un'istanza in esecuzione a cui hai accesso in scrittura – personale oppure la configurazione Docker inclusa nel repository. |
Profilo Delta Sharing |
Un file |
Passaggio 1 — Ottieni il tuo profilo Delta Sharing
Il tuo fornitore di dati (Uberall) ti fornirà un file di profilo Delta Sharing. Si tratta di un piccolo file JSON con estensione .share che contiene i dettagli di connessione e il token di autenticazione.
Il file è simile a questo:
{
"shareCredentialsVersion": 1,
"endpoint": "https://<databricks-host>/api/2.0/delta-sharing/",
"bearerToken": "<your-token>"
}Salva questo file in una posizione sicura sulla tua macchina. Farai riferimento al suo percorso durante la configurazione dello script.
Importante:
Questo file contiene un bearer token che consente l'accesso ai dati condivisi. Trattalo come una password.
Non inserirlo nel controllo della versione.
Limita le autorizzazioni del file in modo che solo il tuo utente possa leggerlo:
chmod 600 /path/to/your/profile.shareSe non hai ricevuto il tuo file di profilo, contatta il team Uberall Data Engineering.
Passaggio 2 — Clona il Repository
Apri un terminale e clona il repository:
git clone https://gitlab.com/momentfeed/uberall/development/ar/data-lake/lakehouse/databricks/delta-sharing-code-examples.gitAccedi alla directory del progetto:
cd delta-sharing-code-examplesIl repository contiene i seguenti file:
File |
Descrizione |
|---|---|
|
Lo script di acquisizione principale. |
|
Dipendenze di Python. |
|
File Docker Compose per avviare un PostgreSQL locale per i test. |
|
Guida di avvio rapido e documentazione di riferimento. |
Passaggio 3 – Configurare un ambiente Python
Ti consigliamo di usare un ambiente virtuale per evitare conflitti con altri progetti Python.
Crea e attiva un ambiente virtuale:
# Create the virtual environment
python -m venv venv
# Activate it (Linux / macOS)
source venv/bin/activate
# Activate it (Windows PowerShell)
.\venv\Scripts\Activate.ps1Installa le dipendenze richieste:
pip install -r requirements.txtQuesto installa i seguenti pacchetti:
Pacchetto |
Scopo |
|---|---|
|
Libreria ufficiale Databricks per la lettura delle tabelle Delta Sharing. |
|
Manipolazione dei dati – i dati condivisi vengono caricati come un DataFrame Pandas. |
|
Livello di astrazione dei database per scrivere dati in PostgreSQL (o altri database). |
|
Driver PostgreSQL utilizzato da SQLAlchemy. |
Passaggio 4 – Configura un database PostgreSQL
Hai due opzioni:
Opzione A: Usa la configurazione Docker inclusa (consigliata per i test)
Se hai Docker installato, il repository include un file compose.yaml che avvia un'istanza PostgreSQL 16 con un singolo comando.
Avvia il database:
docker compose up -dVerifica che sia in esecuzione:
docker compose logs dbCerca database system is ready to accept connections nell'output.
Test di connettività rapido:
docker compose exec db psql -U postgres -d testdb -c "SELECT 1;"L'istanza Docker di PostgreSQL utilizza i seguenti valori predefiniti:
Impostazione |
Valore |
|---|---|
Host |
|
Porta |
|
Database |
|
Utente |
|
Password |
|
Questi corrispondono alla configurazione predefinita nello script, quindi non sono necessarie modifiche aggiuntive.
Quando hai finito i test, arresta il database con:
# Stop containers (data is preserved)
docker compose down
# Stop and delete all data
docker compose down -vOpzione B: Usa la tua istanza PostgreSQL
Se disponi già di un database PostgreSQL, annota semplicemente i dettagli di connessione (host, porta, database, utente, password). Li inserrai nel Passaggio 5.
Passaggio 5 — Configura lo script
Apri delta_sharing_to_postgres.py in un editor di testo qualsiasi. All'inizio del file troverai la sezione USER CONFIGURATION:
# =============================================================================
# USER CONFIGURATION — Edit the values below to match your environment.
# =============================================================================
DELTA_SHARING_PROFILE_PATH = "/path/to/your/profile.share"
DELTA_SHARING_TABLE = "<share_name>.<schema_name>.<table_name>"
PG_HOST = "localhost"
PG_PORT = 5432
PG_DATABASE = "testdb"
PG_USER = "postgres"
PG_PASSWORD = "example"
PG_TARGET_SCHEMA = "public"
PG_TARGET_TABLE = "delta_sharing_data"
WRITE_MODE = "replace"Modifica i seguenti valori:
Variabile |
Cosa impostare |
Esempio |
|---|---|---|
|
Percorso del file |
|
|
Il nome della tabella completo. Formato: |
|
|
Il tuo host PostgreSQL. Usa |
|
|
La tua porta PostgreSQL. |
|
|
Il nome del tuo database di destinazione. |
|
|
Il nome utente del tuo database. |
|
|
La tua password del database. |
|
|
Lo schema dove verrà creata la tabella. |
|
|
Il nome della tabella da creare/scrivere. |
|
|
Come gestire i dati esistenti. Vedi «Modalità di scrittura» qui sotto. |
|
Come scoprire le tabelle disponibili
Se non conosci il nome esatto della tabella, puoi eseguire uno script di individuazione rapida. Crea un file Python temporaneo o usa una shell Python:
import delta_sharing
client = delta_sharing.SharingClient("/path/to/your/profile.share")
for table in client.list_all_tables():
print(f"{table.share}.{table.schema}.{table.name}")In questo modo vengono visualizzate tutte le tabelle a tua disposizione. Usa la stringa <share>.<schema>.<table> completa come valore per DELTA_SHARING_TABLE.
In alternativa, esegui semplicemente lo script principale – registra tutte le tabelle disponibili all'inizio prima di tentare di leggere i dati.
Modalità di scrittura
L'impostazione WRITE_MODE controlla il modo in cui lo script gestisce i dati esistenti nella tabella di destinazione:
Modalità |
Comportamento |
Caso di utilizzo tipico |
|---|---|---|
|
Rimuove e ricrea la tabella di destinazione a ogni esecuzione. Tutti i dati precedenti vengono eliminati. |
Aggiornamento completo – vuoi sempre lo snapshot completo più recente. |
|
Inserisce nuove righe nella tabella esistente. Non viene eseguita nessuna deduplicazione. |
Accumulazione di dati nel tempo (ad es. esportazioni giornaliere). |
|
Lo script si interrompe se la tabella di destinazione esiste già. |
Rete di protezione – per evitare sovrascritture accidentali. |
Passaggio 6 — Esegui lo Script
Assicurati che il tuo ambiente virtuale sia attivato (vedi Passaggio 3), quindi esegui:
python delta_sharing_to_postgres.py
Cosa Aspettarsi
Un'esecuzione riuscita produce un output simile al seguente:
2026-02-20 17:20:00,000 [INFO] ============================================================
2026-02-20 17:20:00,000 [INFO] Delta Sharing to PostgreSQL — Ingestion Script
2026-02-20 17:20:00,000 [INFO] ============================================================
2026-02-20 17:20:00,001 [INFO] Loading Delta Sharing profile from: ./config.share
2026-02-20 17:20:00,002 [INFO] Available shares and tables:
2026-02-20 17:20:01,500 [INFO] my_share.analytics.sales_data
2026-02-20 17:20:01,500 [INFO] Reading table: my_share.analytics.sales_data
2026-02-20 17:20:05,000 [INFO] Read 15000 rows and 12 columns.
2026-02-20 17:20:05,001 [INFO] Preview of the data (first 5 rows):
2026-02-20 17:20:05,002 [INFO]
col_a col_b col_c ...
0 ... ... ...
1 ... ... ...
2026-02-20 17:20:05,100 [INFO] Connecting to PostgreSQL...
2026-02-20 17:20:05,200 [INFO] PostgreSQL connection successful.
2026-02-20 17:20:05,201 [INFO] Writing 15000 rows to public.delta_sharing_data (mode=replace)...
2026-02-20 17:20:08,000 [INFO] Write complete.
2026-02-20 17:20:08,100 [INFO] Validation: public.delta_sharing_data now contains 15000 rows.
2026-02-20 17:20:08,101 [INFO] ============================================================
2026-02-20 17:20:08,101 [INFO] Ingestion completed successfully.
2026-02-20 17:20:08,101 [INFO] ============================================================Lo script:
Si connette a Delta Sharing e elenca tutte le tabelle disponibili.
Legge la tabella specificata in memoria.
Mostra un'anteprima delle prime 5 righe.
Scrive i dati nella tua istanza PostgreSQL.
Convalida l'ingestion contando le righe nella tabella di destinazione.
Passaggio 7 — Verifica i dati
Dopo un'esecuzione riuscita, puoi verificare i dati in PostgreSQL.
Usando la riga di comando (setup Docker):
docker compose exec db psql -U postgres -d testdb -c "SELECT COUNT(*) FROM public.delta_sharing_data;"Usando un client SQL (DataGrip, DBeaver, pgAdmin, ecc.):
Connettiti alla tua istanza PostgreSQL con le stesse credenziali del Passaggio 5, quindi esegui:
-- Row count
SELECT COUNT(*) FROM public.delta_sharing_data;
-- Preview rows
SELECT * FROM public.delta_sharing_data LIMIT 10;
-- Check column types
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = 'delta_sharing_data';Casi d'uso
Aggiornamento completo dello snapshot
Imposta WRITE_MODE = "replace" ed esegui lo script secondo una pianificazione (ad es., giornalmente tramite un cron job). Ogni esecuzione sostituisce l'intera tabella con i dati più recenti dalla condivisione.
# Example cron entry: run every day at 2:00 AM
0 2 * * * /path/to/venv/bin/python /path/to/delta_sharing_to_postgres.py
Aggiungi / accumula dati nel tempo
Imposta WRITE_MODE = "append" per continuare ad aggiungere righe a ogni esecuzione. Questo è utile quando la tabella condivisa contiene nuovi record (ad es., eventi giornalieri o log) e vuoi creare una cronologia nel tuo database.
Nota: Questa modalità non esegue la deduplicazione. Se esegui lo script due volte con gli stessi dati, avrai righe duplicate. Valuta l'aggiunta di logica di deduplicazione nel tuo database o nello script se questo è un problema.
Carica in un database diverso
Lo script utilizza SQLAlchemy, che supporta molti database. Per utilizzare un database diverso, modifica la stringa di connessione in build_pg_connection_string() e installa il driver appropriato:
Database di destinazione |
Formato della stringa di connessione |
Driver da installare |
|---|---|---|
PostgreSQL |
|
|
MySQL |
|
|
Microsoft SQL Server |
|
|
SQLite (file locale) |
|
Incorporato (nessuna installazione necessaria) |
Incorpora in un data warehouse o database cloud
Lo stesso approccio funziona con database ospitati su cloud (Amazon RDS, Google Cloud SQL, Azure Database for PostgreSQL, ecc.). Aggiorna semplicemente i parametri di connessione per puntare alla tua istanza cloud.
Guida alla personalizzazione
Lo script è intenzionalmente semplice e pensato per essere adattato alle tue esigenze. Di seguito troverai le modifiche più comuni.
Filtrare o trasformare i dati prima del caricamento
Dopo aver letto i dati, puoi manipolare il DataFrame di Pandas prima di scriverlo nel database. Ad esempio, per mantenere solo colonne specifiche:
df = read_delta_sharing_table(DELTA_SHARING_PROFILE_PATH, DELTA_SHARING_TABLE)
# Keep only the columns you need
df = df[["column_a", "column_b", "column_c"]]
# Rename columns to match your schema
df = df.rename(columns={"column_a": "id", "column_b": "name"})
# Filter rows
df = df[df["status"] == "active"]
ingest_to_postgres(df, connection_string, PG_TARGET_SCHEMA, PG_TARGET_TABLE, WRITE_MODE)
Caricamento incrementale (carica solo i nuovi dati)
Se la tabella condivisa dispone di una colonna di timestamp o data, puoi filtrare per caricare solo i nuovi record:
df = read_delta_sharing_table(DELTA_SHARING_PROFILE_PATH, DELTA_SHARING_TABLE)
# Only load data from the last 7 days
from datetime import datetime, timedelta
cutoff = datetime.now() - timedelta(days=7)
df = df[df["updated_at"] >= cutoff]
ingest_to_postgres(df, connection_string, PG_TARGET_SCHEMA, PG_TARGET_TABLE, "append")
Carica più tabelle
Duplica il blocco di configurazione o scorri un elenco di tabelle:
TABLES_TO_INGEST = [
{"delta_table": "my_share.schema.table_a", "pg_table": "table_a"},
{"delta_table": "my_share.schema.table_b", "pg_table": "table_b"},
]
for entry in TABLES_TO_INGEST:
df = read_delta_sharing_table(DELTA_SHARING_PROFILE_PATH, entry["delta_table"])
ingest_to_postgres(df, connection_string, PG_TARGET_SCHEMA, entry["pg_table"], WRITE_MODE)
Usa variabili di ambiente al posto di valori hardcoded
Per un uso in produzione, evita di codificare i segreti nello script. Usa invece le variabili di ambiente:
import os
DELTA_SHARING_PROFILE_PATH = os.environ["DELTA_SHARING_PROFILE_PATH"]
PG_HOST = os.environ.get("PG_HOST", "localhost")
PG_PASSWORD = os.environ["PG_PASSWORD"]
Quindi impostali prima di eseguire:
export DELTA_SHARING_PROFILE_PATH="./config.share"
export PG_PASSWORD="your_password"
python delta_sharing_to_postgres.py
Procedure consigliate per la sicurezza
Argomento |
Consiglio |
|---|---|
File di profilo ( |
Conserva in modo sicuro. Non eseguire il commit nel controllo versione. Limita i permessi del file ( |
Scadenza del token Bearer |
I token possono avere una data di scadenza. Se ricevi errori |
Password del database |
Non codificarle nel script per la produzione. Utilizza variabili d'ambiente o un gestore di segreti. |
Accesso alla rete |
Assicurati che il tuo computer possa raggiungere sia l'endpoint Databricks (HTTPS) che la tua istanza PostgreSQL. |
Dati inattivi |
Una volta acquisiti, i dati sono sotto tuo controllo. Applica i criteri di governance dei dati della tua organizzazione al database di destinazione. |
Risoluzione dei problemi
Errore |
Causa |
Soluzione |
|---|---|---|
|
Il percorso del file |
Verifica |
|
Il token bearer è scaduto o non valido. |
Contatta il tuo provider di dati (Uberall) per ottenere un nuovo file di profilo. |
|
Non hai i permessi per accedere a questa condivisione o tabella. |
Verifica il nome della tabella. Contatta il tuo provider di dati per controllare i permessi dei destinatari. |
|
Il nome della condivisione in |
Esegui il passaggio di scoperta della tabella (vedi Passaggio 5) per elencare le condivisioni disponibili e utilizza il nome esatto stampato. |
|
Il provider di dati non ha configurato la materializzazione per la condivisione. Questo è un problema lato server. |
Contatta il tuo provider di dati (Uberall) e condividi questo messaggio di errore. Non può essere risolto dal lato destinatario. |
|
PostgreSQL non è raggiungibile. |
Verifica host, porta e credenziali. Se utilizzi Docker, assicurati che i container siano in esecuzione ( |
|
Nome utente o password errati. |
Verifica |
Empty DataFrame (0 rows) |
La tabella condivisa esiste ma non contiene dati. |
Controlla con il tuo provider di dati se la tabella dovrebbe contenere dati. |
|
Le dipendenze non sono installate o l'ambiente virtuale non è attivato. |
Esegui |
Assistenza
Se riscontri problemi relativi a:
I dati condivisi, i token di accesso o i permessi — contatta il team Uberall Data Engineering.
Lo script di acquisizione — consulta questa guida e il README.md nel repository. Lo script è fornito come implementazione di riferimento; sei responsabile dell'adattamento e della manutenzione per il tuo ambiente.