Condividi tramite


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.

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 partizione AIR si trovano nel database test1.
  • I bucket 8-10 per il valore di partizione AIR si trovano nel database test2.
  • 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.