Dela via


Sharded SQL-anslutningsprogram

Kommentar

Vi drar tillbaka Azure HDInsight på AKS den 31 januari 2025. Före den 31 januari 2025 måste du migrera dina arbetsbelastningar till Microsoft Fabric eller en motsvarande Azure-produkt för att undvika plötsliga uppsägningar av dina arbetsbelastningar. Återstående kluster i din prenumeration stoppas och tas bort från värden.

Endast grundläggande stöd kommer att vara tillgängligt fram till datumet för pensionering.

Viktigt!

Den här funktionen finns i förhandsgranskning. De kompletterande användningsvillkoren för Förhandsversioner av Microsoft Azure innehåller fler juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller på annat sätt ännu inte har släppts i allmän tillgänglighet. Information om den här specifika förhandsversionen finns i Azure HDInsight på AKS-förhandsversionsinformation. Om du vill ha frågor eller funktionsförslag skickar du en begäran på AskHDInsight med informationen och följer oss för fler uppdateringar i Azure HDInsight Community.

Med den fragmenterade SQL-anslutningsappen kan frågor köras över data som distribueras över valfritt antal SQL-servrar.

Förutsättningar

Om du vill ansluta till fragmenterade SQL-servrar behöver du:

  • SQL Server 2012 eller senare eller Azure SQL Database.
  • Nätverksåtkomst från Trino-koordinatorn och arbetarna till SQL Server. Port 1433 är standardporten.

Allmän konfiguration

Anslutningsappen kan köra frågor mot flera SQL-servrar som en enda datakälla. Skapa en katalogegenskaper-fil och använd connector.name=sharded-sql för att använda fragmenterad SQL-anslutningsapp.

Konfigurationsexempel:

connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
Property beskrivning
connector.name Namnet på anslutningsappen För fragmenterad SQL, som ska vara sharded_sqlserver
connection-user Användarnamn i SQL Server
connection-password Lösenord för användaren i SQL Server
sharded-cluster Krävs för att ställas in på TRUE för sharded-sql-anslutningsprogram
shard-config-location plats för konfigurationsdefinieringsschemat för horisontell partitionering

Autentisering av datakällor

Anslutningsappen använder autentisering med användarlösenord för att fråga SQL-servrar. Samma användare som anges i konfigurationen förväntas autentisera mot alla SQL-servrar.

Schemadefinition

Anslutningsappen förutsätter en 2D-partition/bucketad layout av fysiska data över SQL-servrar. Schemadefinitionen beskriver den här layouten. För närvarande stöds endast filbaserad schemadefinition för horisontell partitionering.

Du kan ange platsen för partitioneringsschemat json i katalogegenskaperna som shard-config-location=etc/shard-schema.json. Konfigurera sharding schema json med önskade egenskaper för att ange layouten.

Följande JSON-fil beskriver konfigurationen för en Trino sharded SQL-anslutning. Här är en uppdelning av dess struktur:

  • tabeller: En matris med objekt som var och en representerar en tabell i databasen. Varje tabellobjekt innehåller:

    • schema: Schemanamnet för tabellen, som motsvarar databasen på SQL-servern.
    • name: Namnet på tabellen.
    • sharding_schema: Namnet på det fragmenteringsschema som är associerat med tabellen, som fungerar som en referens till det sharding_schema som beskrivs i nästa steg.
  • sharding_schema: En matris med objekt som var och en representerar ett horisontellt schema. Varje fragmenteringsschemaobjekt innehåller:

    • name: Namnet på partitioneringsschemat.
    • partitioned_by: En matris som innehåller en eller flera kolumner med vilken partitioneringsschemat partitioneras.
    • bucket_count(valfritt): Ett heltal som representerar det totala antalet bucketar som tabellen distribueras, vilket är standardvärdet 1.
    • bucketed_by(valfritt): En matris som innehåller en eller flera kolumner med vilka data är bucketade, observera att partitionering och bucketing är hierarkiska, vilket innebär att varje partition är bucketad.
    • partition_map: En matris med objekt som var och en representerar en partition i fragmenteringsschemat. Varje partitionsobjekt innehåller:
      • partition: Partitionsvärdet som anges i formuläret partition-key=partitionvalue
      • shards: En matris med objekt som var och en representerar en shard i partitionen, varje element i matrisen representerar en replik, trino frågar någon av dem slumpmässigt för att hämta data för en partition/buckets. Varje fragmentobjekt innehåller:
        • connectionUrl: JDBC-anslutnings-URL:en till sharddatabasen.

Om du till exempel vill köra frågor mot två tabeller lineitem part med den här anslutningsappen kan du ange dem på följande sätt.

	"tables": [
		{
			"schema": "dbo",
			"name": "lineitem",
			"sharding_schema": "schema1"
		},
		{
			"schema": "dbo",
			"name": "part",
			"sharding_schema": "schema2"
		}
    ]

Kommentar

Connector förväntar sig att alla tabeller finns i SQL-servern som definierats i schemat för en tabell, om så inte är fallet misslyckas frågorna för den tabellen.

I föregående exempel kan du ange layouten för tabellen lineitem som:

	"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"
						}
					]
				}                
			]
        }
    ]

I det här exemplet beskrivs:

  • Data för tabellradsobjekt som partitionerats av shipmode.
  • Varje partition har 10 bucketar.
  • Varje partition är bucketed_by partkey kolumn.
  • Bucketar för partitionsvärde 1-7 AIR finns i test1 databasen.
  • Bucketar för partitionsvärde 8-10 AIR finns i test2 databasen.
  • Shards är en matris med connectionUrl. Varje medlem i matrisen representerar en replikUppsättning. Under frågekörningen väljer Trino ett fragment slumpmässigt från matrisen för att fråga efter data.

Partitionering och bucketrensning

Anslutningsappen utvärderar frågebegränsningarna under planeringen och utför baserat på de angivna frågepredikaten. Detta hjälper till att påskynda frågeprestanda och gör att anslutningsappen kan köra frågor mot stora mängder data.

Bucketing-formel för att fastställa tilldelningar med hjälp av implementeringen av funktionen murmur hash som beskrivs här.

Typmappning

Sharded SQL Connector stöder samma typmappningar som SQL Server Connector-typmappningar.

Pushdown

Följande pushdown-optimeringar stöds:

  • Begränsa nedtryckning
  • Distributionsaggregeringar
  • Gå med i pushdown

JOIN åtgärden kan endast push-överföras till servern när anslutningsappen fastställer att data är samlokaliserade för tabellen build och probe. Anslutningsappen avgör att data samallokeras när – sharding_schema för båda left och right tabellen är densamma. – Kopplingsvillkoren är supermängden partitionerings- och bucketningsnycklar.

Om du vill använda JOIN pushdown-optimering bör katalogegenskapen join-pushdown.strategy vara inställd på EAGER

AGGREGATE pushdown för den här anslutningsappen kan bara göras för distributionsaggregeringar. Optimeringskonfigurationen optimizer.partial-aggregate-pushdown-enabled måste anges för att true aktivera den här optimeringen.