Connettore SQL partizionato
Importante
Azure HDInsight su AKS è stato ritirato il 31 gennaio 2025. Scopri di più con questo annuncio.
È necessario eseguire la migrazione dei carichi di lavoro a Microsoft Fabric o a un prodotto Azure equivalente per evitare la chiusura brusca dei carichi di lavoro.
Importante
Questa funzionalità è attualmente in anteprima. Le condizioni supplementari per l'utilizzo per le anteprime di Microsoft Azure includono termini legali più validi applicabili alle funzionalità di Azure in versione beta, in anteprima o altrimenti non ancora rilasciate nella disponibilità generale. Per informazioni su questa anteprima specifica, vedere informazioni sull'anteprima di Azure HDInsight su AKS. Per domande o suggerimenti sulle funzionalità, inviare una richiesta in AskHDInsight con i dettagli e seguire microsoft per altri aggiornamenti su 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 nodi di lavoro a SQL Server. La porta 1433 è la porta predefinita.
Configurazione generale
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 |
utente di connessione | Nome utente in SQL Server |
password di connessione | Password per l'utente in SQL Server |
cluster partizionato | Deve essere impostato su TRUE per il connettore sharded-sql |
posizione-configurazione-shard | posizione della configurazione che definisce lo schema di sharding |
Autenticazione dell'origine dati
Il connettore usa l'autenticazione con password utente 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/inserimento a secchi 2D dei dati fisici fra 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:
tabelle: matrice di oggetti, ognuno dei quali rappresenta una tabella nel database. Ogni oggetto di 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
sharding_schema
descritto nei passaggi successivi.
sharding_schema: matrice di oggetti, ognuno dei quali rappresenta uno schema di partizionamento orizzontale. Ogni oggetto schema di sharding contiene:
- nome: nome dello schema di partizionamento orizzontale.
- partitioned_by: un array contenente una o più colonne su cui lo schema di sharding è partizionato.
- bucket_count(facoltativo): numero intero che rappresenta il numero totale di bucket distribuiti dalla tabella, che per impostazione predefinita è 1.
- bucketed_by(facoltativo): matrice contenente una o più colonne in base alla quale vengono inseriti in bucket i dati, si noti che il partizionamento e il bucket sono gerarchici, ovvero 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:
-
di partizione : valore della partizione specificato nel formato
partition-key=partitionvalue
-
frammenti: Una matrice di oggetti, ognuno dei quali rappresenta un frammento all'interno della partizione; ogni elemento della matrice rappresenta una replica, Trino esegue una query casuale su uno di essi per recuperare i dati per una partizione/bucket. Ogni oggetto shard contiene:
- connectionUrl: URL di connessione JDBC al database della partizione.
-
di partizione : valore della partizione specificato nel formato
Ad esempio, se due tabelle lineitem
e part
su cui si vuole eseguire una query usando questo connettore, è possibile specificarle 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 della riga di tabella partizionato da
shipmode
. - Ogni partizione ha 10 contenitori.
- Ogni partizione è suddivisa per 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
. - Le partizioni sono una matrice di
connectionUrl
. Ogni membro della matrice rappresenta un oggetto replicaSet. Durante l'esecuzione della query, Trino seleziona una partizione 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 ed esegue 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 raggruppamento per determinare le assegnazioni usando l'implementazione della funzione hash murmur descritta qui.
Mapping dei tipi
Il connettore SQL suddiviso supporta gli stessi mapping dei tipi del connettore SQL Server mapping dei tipi.
Spinta verso il basso (assuming context allows for this translation, if not, retain Pushdown)
Sono supportate le ottimizzazioni di pushdown seguenti:
- Limita pushdown
- Aggregazioni di distribuzione
- Esegui il pushdown del join
L'operazione JOIN
può essere trasferita al server solo se il connettore determina che i dati sono co-locati per le tabelle di build e probe. Il connettore determina che i dati sono raggruppati quando , il sharding_schema sia per left
che per la tabella right
è uguale.
: le condizioni di join sono un superinsieme delle chiavi di partizionamento e di quelle di bucketing.
Per usare l'ottimizzazione pushdown JOIN
, la proprietà del catalogo join-pushdown.strategy
deve essere impostata su EAGER
AGGREGATE
pushdown per questo connettore può essere eseguito solo per gli aggregati distributivi. La configurazione dell'optimizer optimizer.partial-aggregate-pushdown-enabled
deve essere impostata su true
per abilitare questa ottimizzazione.