Sharded SQL-connector
Belangrijk
Azure HDInsight op AKS is op 31 januari 2025 buiten gebruik gesteld. Meer informatie met deze aankondiging.
U moet uw workloads migreren naar Microsoft Fabric- of een gelijkwaardig Azure-product om plotselinge beëindiging van uw workloads te voorkomen.
Belangrijk
Deze functie is momenteel beschikbaar als preview-versie. De aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews meer juridische voorwaarden bevatten die van toepassing zijn op Azure-functies die bèta, in preview of anderszins nog niet in algemene beschikbaarheid zijn vrijgegeven. Zie Azure HDInsight in AKS preview-informatievoor meer informatie over deze specifieke preview. Voor vragen of suggesties voor functies dient u een aanvraag in op AskHDInsight- met de details en volgt u ons voor meer updates over Azure HDInsight Community-.
Met de sharded SQL-connector kunnen query's worden uitgevoerd over gegevens die over een willekeurig aantal SQL-servers worden gedistribueerd.
Voorwaarden
Als u verbinding wilt maken met sharded SQL-servers, hebt u het volgende nodig:
- SQL Server 2012 of hoger of Azure SQL Database.
- Netwerktoegang van de Trino-coördinator en -werknemers naar SQL Server. Poort 1433 is de standaardpoort.
Algemene configuratie
De connector kan meerdere SQL-servers als één gegevensbron opvragen. Maak een cataloguseigenschappenbestand en gebruik connector.name=sharded-sql
om een shard-SQL-connector te gebruiken.
Configuratievoorbeeld:
connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
Eigenschap | Beschrijving |
---|---|
connector.name | Naam van de connector voor shard-SQL, die moet worden sharded_sqlserver |
verbindingsgebruiker | Gebruikersnaam in SQL Server |
verbindingswachtwoord | Wachtwoord voor de gebruiker in SQL Server |
versplinterde-cluster | Moet worden ingesteld op TRUE voor sharded-sql-connector |
shard-config-location | locatie van het configuratieschema voor het definiëren van sharding |
Verificatie van gegevensbron
De connector maakt gebruik van verificatie met gebruikerswachtwoorden om query's uit te voeren op SQL-servers. Dezelfde gebruiker die in de configuratie is opgegeven, wordt naar verwachting geverifieerd op alle SQL-servers.
Schemadefinitie
Connector gaat uit van een 2D-partitie-/bucketindeling van de fysieke gegevens op SQL-servers. In de schemadefinitie wordt deze indeling beschreven. Op dit moment wordt alleen de definitie van het shardingschema op basis van bestanden ondersteund.
U kunt de locatie van de json van het shardingschema opgeven in de cataloguseigenschappen zoals shard-config-location=etc/shard-schema.json
.
Configureer sharding schema json met gewenste eigenschappen om de indeling op te geven.
In het volgende JSON-bestand wordt de configuratie voor een trino-shard-SQL-connector beschreven. Hier volgt een uitsplitsing van de structuur:
tabellen: een matrix met objecten die elk een tabel in de database vertegenwoordigen. Elk tabelobject bevat:
- schema: de schemanaam van de tabel, die overeenkomt met de database in de SQL-server.
- naam: de naam van de tabel.
- nl-NL: sharding_schema: de naam van het shardingschema dat is gekoppeld aan de tabel, dat fungeert als een verwijzing naar de
sharding_schema
, zoals beschreven in de volgende stappen.
sharding_schema: een matrix met objecten, die elk een shardingschema vertegenwoordigen. Elk sharding-schemaobject bevat:
- naam: De naam van het shardingschema.
- partitioned_by: een matrix met een of meer kolommen waarmee het shardingschema wordt gepartitioneerd.
- bucket_count(optioneel): een geheel getal dat het totale aantal buckets aangeeft dat de tabel wordt gedistribueerd, wat standaard 1 is.
- bucketed_by(optioneel): een matrix die een of meer kolommen bevat waarmee de gegevens worden gebucket, let op: partitionering en bucketing zijn hiërarchisch, wat betekent dat elke partitie wordt gebucket.
-
partition_map: een matrix met objecten, die elk een partitie in het shardingschema vertegenwoordigen. Elk partitieobject bevat:
-
partitie: de partitiewaarde die is opgegeven in het formulier
partition-key=partitionvalue
-
shards: een reeks objecten, die elk een shard binnen de partitie vertegenwoordigen. Elk element van de reeks vertegenwoordigt een replica. Trino voert willekeurig query's uit op een van hen om gegevens op te halen voor een partitie/buckets. Elk shardobject bevat:
- connectionUrl-: de JDBC-verbindings-URL naar de database van de shard.
-
partitie: de partitiewaarde die is opgegeven in het formulier
Als er bijvoorbeeld twee tabellen zijn, lineitem
en part
, die u met deze connector wilt opvragen, dan kunt u ze als volgt opgeven.
"tables": [
{
"schema": "dbo",
"name": "lineitem",
"sharding_schema": "schema1"
},
{
"schema": "dbo",
"name": "part",
"sharding_schema": "schema2"
}
]
Notitie
Connector verwacht dat alle tabellen aanwezig zijn in de SQL-server die is gedefinieerd in het schema voor een tabel. Als dat niet het geval is, mislukken query's voor die tabel.
In het vorige voorbeeld kunt u de indeling van de tabel opgeven lineitem
als:
"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"
}
]
}
]
}
]
In dit voorbeeld wordt het volgende beschreven:
- De gegevens voor tabelregelitem gepartitioneerd door
shipmode
. - Elke partitie heeft 10 buckets.
- Elke partitie is opgesplitst op basis van de
partkey
-kolom. - Buckets
1-7
voor de partitiewaardeAIR
bevinden zich in de databasetest1
. - Buckets
8-10
voor partitiewaardeAIR
bevinden zich in detest2
-database. - Shards zijn een matrix van
connectionUrl
. Elk lid van de matrix vertegenwoordigt een replicaSet. Tijdens het uitvoeren van query's selecteert Trino een shard willekeurig uit de matrix om gegevens op te vragen.
Partitioneren en bucketoptimalisatie
Connector evalueert de querybeperkingen tijdens de planning en wordt uitgevoerd op basis van de opgegeven querypredicaten. Dit helpt de prestaties van query's te versnellen en stelt de connector in staat om grote hoeveelheden gegevens op te vragen.
Bucketingformule om toewijzingen te bepalen met behulp van de implementatie van de murmur-hashfunctie, zoals beschreven in , hier.
Typetoewijzing
Sharded SQL-connector ondersteunt dezelfde typetoewijzingen als SQL Server-connector typetoewijzingen.
stapel
De volgende pushdownoptimalisaties worden ondersteund:
- Pushdown beperken
- Distributieve aggregaties
- Pushdown samenvoegen
JOIN
bewerking kan alleen naar de server worden gepusht wanneer de connector bepaalt dat de gegevens zijn geplaatst voor de build- en testtabel. Connector bepaalt dat de gegevens worden geplaatst wanneer de sharding_schema voor zowel left
als de right
tabel hetzelfde is.
- joinvoorwaarden zijn een bovenliggende verzameling van partitionerings- en bucketingsleutels.
Als u JOIN
pushdownoptimalisatie wilt gebruiken, moet de cataloguseigenschap join-pushdown.strategy
zijn ingesteld op EAGER
AGGREGATE
pushdown kan voor deze connector alleen worden uitgevoerd voor distributieve aggregaties. De configuratie van de optimizer-optimizer.partial-aggregate-pushdown-enabled
moet worden ingesteld op true
om deze optimalisatie in te schakelen.