Connettore SQL partizionato
Nota
Azure HDInsight su AKS verrà ritirato il 31 gennaio 2025. Prima del 31 gennaio 2025, sarà necessario eseguire la migrazione dei carichi di lavoro a Microsoft Fabric o a un prodotto Azure equivalente per evitare interruzioni improvvise dei carichi di lavoro. I cluster rimanenti nella sottoscrizione verranno arrestati e rimossi dall’host.
Solo il supporto di base sarà disponibile fino alla data di ritiro.
Importante
Questa funzionalità è attualmente disponibile solo in anteprima. Le Condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure includono termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale. Per informazioni su questa anteprima specifica, vedere Informazioni sull'anteprima di Azure HDInsight nel servizio Azure Kubernetes. Per domande o suggerimenti sulle funzionalità, inviare una richiesta in AskHDInsight con i dettagli e seguire Microsoft per altri aggiornamenti nella Community di Azure HDInsight.
Il connettore SQL partizionato consente l’esecuzione di query sui dati distribuiti in un numero qualsiasi di server SQL.
Prerequisiti
Per connettersi ai server SQL partizionati, è necessario:
- SQL Server 2012 o versione successiva o database SQL di Azure.
- Accesso di rete dal coordinatore Trino e dai ruoli di lavoro a SQL Server. La porta 1433 è la porta predefinita.
General configuration
Il connettore può eseguire query su più server SQL come singola origine dati. Creare un file di proprietà del catalogo e usare connector.name=sharded-sql
per usare il connettore SQL partizionato.
Esempio di configurazione:
connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
Proprietà | Descrizione |
---|---|
connector.name | Nome del connettore per SQL partizionato, che deve essere sharded_sqlserver |
connection-user | Nome utente in SQL Server |
connection-password | Password per l’utente in SQL Server |
sharded-cluster | Deve essere impostato su TRUE per il connettore sharded-sql |
shard-config-location | Percorso della configurazione che definisce lo schema di partizionamento orizzontale |
Autenticazione dell'origine dati
Il connettore usa l’autenticazione con user-password per eseguire query sui server SQL. Si prevede che lo stesso utente specificato nella configurazione esegua l’autenticazione in tutti i server SQL.
Definizione dello schema
Il connettore presuppone un layout di partizione/a bucket 2D dei dati fisici tra server SQL. La definizione dello schema descrive questo layout. Attualmente è supportata solo la definizione dello schema di partizionamento orizzontale basata su file.
È possibile specificare il percorso del file JSON dello schema di partizionamento orizzontale nelle proprietà del catalogo, ad esempio shard-config-location=etc/shard-schema.json
.
Configurare il file JSON dello schema di partizionamento orizzontale con le proprietà desiderate per specificare il layout.
Il file JSON seguente descrive la configurazione per un connettore SQL partizionato Trino. Ecco una suddivisione della struttura:
tables: matrice di oggetti, ognuno dei quali rappresenta una tabella nel database. Ogni oggetto tabella contiene:
- schema: nome dello schema della tabella che corrisponde al database nel server SQL.
- nome: nome della tabella.
- sharding_schema: nome dello schema di partizionamento orizzontale associato alla tabella, che funge da riferimento al valore
sharding_schema
descritto nei passaggi successivi.
sharding_schema: matrice di oggetti, ognuno dei quali rappresenta uno schema di partizionamento orizzontale. Ogni oggetto schema di partizionamento orizzontale contiene:
- nome: nome dello schema di partizionamento orizzontale.
- partitioned_by: matrice contenente una o più colonne in base alle quali viene partizionato lo schema di partizionamento orizzontale.
- bucket_count(optional): numero intero che rappresenta il numero totale di bucket in cui è distribuita la tabella, che per impostazione predefinita è 1.
- bucketed_by(optional): matrice contenente una o più colonne in base alle quali vengono suddivisi in bucket i dati. Il partizionamento e i bucket sono gerarchici, ciò significa che ogni partizione viene inserita in bucket.
- partition_map: matrice di oggetti, ognuno dei quali rappresenta una partizione all’interno dello schema di partizionamento orizzontale. Ogni oggetto partizione contiene:
- partition: valore della partizione specificato in formato
partition-key=partitionvalue
- shards: matrice di oggetti, ognuno dei quali rappresenta un extent all’interno della partizione. Ogni elemento della matrice rappresenta una replica. Trino esegue una query casuale per recuperare i dati per una partizione o un bucket. Ogni oggetto extent contiene:
- connectionUrl: URL di connessione JDBC al database dell’extent.
- partition: valore della partizione specificato in formato
Ad esempio, è possibile specificare le due tabelle lineitem
e part
, su cui si vuole eseguire una query usando questo connettore, come indicato di seguito.
"tables": [
{
"schema": "dbo",
"name": "lineitem",
"sharding_schema": "schema1"
},
{
"schema": "dbo",
"name": "part",
"sharding_schema": "schema2"
}
]
Nota
Il connettore prevede che tutte le tabelle siano presenti nel server SQL definito nello schema per una tabella, in caso contrario, le query per tale tabella avranno esito negativo.
Nell’esempio precedente, è possibile specificare il layout della tabella lineitem
come:
"sharding_schema": [
{
"name": "schema1",
"partitioned_by": [
"shipmode"
],
"bucketed_by": [
"partkey"
],
"bucket_count": 10,
"partition_map": [
{
"partition": "shipmode='AIR'",
"buckets": 1-7,
"shards": [
{
"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test1"
}
]
},
{
"partition": "shipmode='AIR'",
"buckets": 8-10,
"shards": [
{
"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test2"
}
]
}
]
}
]
Questo esempio descrive:
- Dati per l’elemento riga della tabella partizionato da
shipmode
. - Ogni partizione ha 10 bucket.
- Ogni partizione è bucketed_by dalla colonna
partkey
. - I bucket
1-7
per il valore di partizioneAIR
si trovano nel databasetest1
. - I bucket
8-10
per il valore di partizioneAIR
si trovano nel databasetest2
. - Gli extent sono una matrice di
connectionUrl
. Ogni membro della matrice rappresenta un oggetto replicaSet. Durante l’esecuzione della query, Trino seleziona un extent in modo casuale dalla matrice per eseguire query sui dati.
Eliminazione di partizioni e bucket
Il connettore valuta i vincoli di query durante la pianificazione e compie delle esecuzioni in base ai predicati di query forniti. Ciò consente di velocizzare le prestazioni delle query e consente al connettore di eseguire query su grandi quantità di dati.
Formula di bucket per determinare le assegnazioni usando l’implementazione della funzione MurmurHash descritta qui.
Mapping dei tipi
Il connettore SQL partizionato supporta gli stessi mapping dei tipi del Connettore SQL Server.
Pushdown
Sono supportate le ottimizzazioni di pushdown seguenti:
- Pushdown di limite
- Aggregazioni di distribuzione
- Pushdown join
Il pushdown dell’operazione JOIN
al server può essere eseguito solo quando il connettore determina che i dati sono condivisi per la tabella di compilazione e probe. Il connettore determina che i dati sono condivisi quando sharding_schema è lo stesso per le tabelle left
e right
.
Le condizioni di JOIN sono superset di chiavi di partizionamento e bucket.
Per usare l’ottimizzazione del pushdown di JOIN
, la proprietà del catalogo join-pushdown.strategy
deve essere impostata su EAGER
Il pushdown AGGREGATE
per questo connettore può essere eseguito solo per le aggregazioni di distribuzione. La configurazione dell’ottimizzatore optimizer.partial-aggregate-pushdown-enabled
deve essere impostata su true
per abilitare questa ottimizzazione.