Conector SQL fragmentado
Importante
Azure HDInsight en AKS se retiró el 31 de enero de 2025. Obtenga más información sobre con este anuncio.
Debe migrar las cargas de trabajo a microsoft Fabric o un producto equivalente de Azure para evitar la terminación repentina de las cargas de trabajo.
Importante
Esta característica está actualmente en versión preliminar. Los Términos de uso complementarios para las versiones preliminares de Microsoft Azure incluyen más términos legales que se aplican a las características de Azure que se encuentran en versión beta, en versión preliminar o, de lo contrario, aún no se han publicado en disponibilidad general. Para obtener información sobre esta versión preliminar específica, consulte la información de la versión preliminar de Azure HDInsight en AKS. Para preguntas o sugerencias de funciones, envíe una solicitud en AskHDInsight con los detalles y síganos para obtener más actualizaciones sobre la Comunidad de Azure HDInsight.
El conector SQL particionado permite ejecutar consultas a través de datos distribuidos entre cualquier número de servidores SQL.
Prerrequisitos
Para conectarse a servidores SQL con particiones, necesita:
- SQL Server 2012 o posterior, o Azure SQL Database.
- Acceso de red desde el coordinador y los trabajadores de Trino a SQL Server. El puerto 1433 es el puerto predeterminado.
Configuración general
El conector puede consultar varios servidores SQL Server como un único origen de datos. Cree un archivo de propiedades de catálogo y use connector.name=sharded-sql
para usar el conector SQL particionado.
Ejemplo de configuración:
connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
Propiedad | Descripción |
---|---|
connector.name | Nombre del conector para SQL fragmentado, que debe ser sharded_sqlserver |
usuario de conexión | Nombre de usuario en SQL Server |
contraseña de conexión | Contraseña del usuario en SQL Server |
clúster fragmentado | Debe establecerse en TRUE para el conector sharded-sql |
ubicación-de-configuración-de-fragmento | ubicación de la configuración que define el esquema de particionamiento |
Autenticación del origen de datos
El conector usa la autenticación de contraseña de usuario para consultar servidores SQL Server. Se espera que el mismo usuario especificado en la configuración se autentique en todos los servidores SQL Server.
Definición de esquema
El conector asume un diseño de partición 2D o compartimentado de los datos físicos en los servidores SQL. La definición de esquema describe este diseño. Actualmente, solo se admite la definición de esquema de particionamiento basada en archivos.
Puede especificar la ubicación del json del esquema de particionamiento en las propiedades del catálogo, como shard-config-location=etc/shard-schema.json
.
Configure el json del esquema de particionamiento con las propiedades deseadas para especificar el diseño.
En el siguiente archivo JSON se describe la configuración de un conector SQL particionado de Trino. Este es un desglose de su estructura:
tablas: una matriz de objetos, cada una de las cuales representa una tabla de la base de datos. Cada objeto de tabla contiene:
- esquema: El nombre del esquema de la tabla, que corresponde al del servidor de bases de datos SQL Server.
- nombre: nombre de la tabla.
-
sharding_schema: el nombre del esquema de particionamiento asociado a la tabla, que actúa como referencia al
sharding_schema
descrito en los pasos siguientes.
sharding_schema: matriz de objetos, cada uno que representa un esquema de particionamiento. Cada objeto de esquema de particionamiento contiene:
- nombre: nombre del esquema de particionamiento.
- partitioned_by: matriz que contiene una o varias columnas por las que se particiona el esquema de particionamiento.
- bucket_count(opcional): un entero que representa el número total de cubos en los que se distribuye la tabla, con un valor predeterminado de 1.
- bucketed_by(opcional): Un array que contiene una o varias columnas por las cuales se distribuyen en cubos los datos, ten en cuenta que la partición y el cubicado son jerárquicos, lo que significa que cada partición se divide en cubos.
-
partition_map: matriz de objetos, cada una de las cuales representa una partición dentro del esquema de particionamiento. Cada objeto de partición contiene:
-
partición: El valor de partición especificado en el formulario
partition-key=partitionvalue
-
fragmentos: una matriz de objetos, cada uno de los cuales representa un fragmento dentro de la partición, cada elemento de la matriz representa una réplica, Trino consulta cualquiera de ellos al azar para obtener datos de una partición o cubos. Cada objeto de partición contiene:
- connectionUrl: la dirección URL de conexión JDBC a la base de datos de la partición.
-
partición: El valor de partición especificado en el formulario
Por ejemplo, si dos tablas lineitem
y part
que desea consultar mediante este conector, puede especificarlas de la siguiente manera.
"tables": [
{
"schema": "dbo",
"name": "lineitem",
"sharding_schema": "schema1"
},
{
"schema": "dbo",
"name": "part",
"sharding_schema": "schema2"
}
]
Nota
El conector espera que todas las tablas estén presentes en el servidor SQL Server definido en el esquema de una tabla, si no es así, se producirá un error en las consultas de esa tabla.
En el ejemplo anterior, puede especificar el diseño de la tabla lineitem
como:
"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"
}
]
}
]
}
]
En este ejemplo se describe lo siguiente:
- Datos del elemento de línea de tabla particionado por
shipmode
. - Cada partición tiene 10 cubos.
- Cada partición está dividida según la columna
partkey
. - Los cubos
1-7
para el valor de particiónAIR
se encuentran en la base de datostest1
. - Los cubos
8-10
para el valor de particiónAIR
se encuentran en la base de datostest2
. - Las particiones son una matriz de
connectionUrl
. Cada miembro de la matriz representa un replicaSet. Durante la ejecución de la consulta, Trino selecciona una partición aleatoriamente de la matriz para consultar los datos.
Eliminación de particiones y cubos
El conector evalúa las restricciones de consulta durante la planificación y actúa en función de los predicados de consulta proporcionados. Esto ayuda a acelerar el rendimiento de las consultas y permite al conector consultar grandes cantidades de datos.
Fórmula de segmentación para determinar las asignaciones mediante la implementación de la función de hash Murmur descrita aquí.
Mapeo de tipos
El conector de SQL fragmentado admite las mismas asignaciones de tipos que el conector de SQL Server para asignaciones de tipos.
Pushdown
Se admiten las siguientes optimizaciones de aplicación:
- Empuje de límite
- Agregados distributivos
- Optimización de unión
La operación JOIN
solo se puede delegar al servidor cuando el conector determina que los datos están ubicados juntos para la tabla de construcción y sondeo. El conector determina que los datos se colocan cuando : el sharding_schema para left
y la tabla right
es el mismo.
- las condiciones de unión son el superconjunto de las claves de particionamiento y agrupamiento.
Para usar la optimización de empuje JOIN
, la propiedad del catálogo join-pushdown.strategy
debe establecerse en EAGER
La inserción tipo AGGREGATE
para este conector solo se puede realizar con agregados distributivos. La configuración del optimizador optimizer.partial-aggregate-pushdown-enabled
debe establecerse en true
para habilitar esta optimización.