Ejecutar consultas federadas en PostgreSQL
En este artículo, se describe cómo configurar Lakehouse Federation para ejecutar consultas federadas en datos Ejecutar consultas en PostgreSQL no administrados por Azure Databricks. Para obtener más información sobre Lakehouse Federation, consulte ¿Qué es Lakehouse Federation?.
Para conectarse a su base de datos Ejecutar consultas en PostgreSQL mediante Lakehouse Federation, debe crear lo siguiente en el metastore de Unity Catalog de Azure Databricks:
- Una conexión a la base de datos Ejecutar las consultas en PostgreSQL.
- Un catálogo externo que refleje la base de datos Ejecutar consultas en PostgreSQL en Unity Catalog, de modo que pueda usar la sintaxis de consulta y las herramientas de gobernanza de datos de Unity Catalog para administrar el acceso de usuario de Azure Databricks a la base de datos.
Antes de empezar
Requisitos del área de trabajo:
- Área de trabajo habilitada para Unity Catalog.
Requisitos de proceso:
- Conectividad de red desde el clúster de Databricks Runtime o el almacén de SQL a los sistemas de base de datos de destino. Consulte Recomendaciones de redes para Lakehouse Federation.
- Los clústeres de Azure Databricks deben usar Databricks Runtime 13.3 LTS o superior y el modo de acceso compartido o de usuario único.
- Los almacenes de SQL deben ser Pro o Sin servidor y tienen que utilizar la versión 2023.40 o posteriores.
Permisos necesarios:
- Para crear una conexión, debe ser administrador del metastore o usuario con el privilegio
CREATE CONNECTION
en el metastore de Unity Catalog adjunto al área de trabajo. - Para crear un catálogo externo, debe tener el permiso
CREATE CATALOG
en el metastore, y ser el propietario de la conexión o tener el privilegioCREATE FOREIGN CATALOG
en la conexión.
Los requisitos de permisos adicionales se especifican en cada sección basada en tareas que se indica a continuación.
Crear una conexión
Una conexión especifica una ruta de acceso y las credenciales para acceder a un sistema de base de datos externo. Para crear una conexión, puede usar el Explorador de catálogos o el comando SQL CREATE CONNECTION
en un cuaderno de Azure Databricks o el editor de consultas de Databricks SQL.
Nota:
También puede usar la API REST de Databricks o la CLI de Databricks para crear una conexión. Vea POST/api/2.1/unity-catalog/connections y Comandos de Unity Catalog.
Permisos necesarios: administrador del metastore o usuario con el privilegio CREATE CONNECTION
.
Explorador de catálogo
En el área de trabajo de Azure Databricks, haga clic en Catálogo.
En la parte superior del panel Catálogo, haga clic en el icono Agregar y seleccione Agregar una conexión en el menú.
Como alternativa, en la página de Acceso rápido, haga clic en el botón Datos externos>, vaya a la pestaña Conexiones y haga clic en Crear conexión.
Escriba un Nombre de conexión descriptivo.
Seleccione un Tipo de conexión de PostgreSQL.
Escriba las siguientes propiedades de conexión para la instancia de PostgreSQL.
- Host: por ejemplo,
postgres-demo.lb123.us-west-2.rds.amazonaws.com
- Puerto: por ejemplo,
5432
- Usuario: por ejemplo,
postgres_user
- Contraseña: por ejemplo,
password123
- Host: por ejemplo,
(Opcional) Haga clic en Probar conexión para confirmar que funcione.
(Opcional) Agregue un comentario.
Haga clic en Crear.
SQL
Ejecute el siguiente comando en un cuaderno o en el editor de consultas de Databricks SQL.
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Se recomienda usar secretos de Azure Databricks en lugar de cadenas de texto no cifrado para valores confidenciales, como las credenciales. Por ejemplo:
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
Para obtener más información sobre la configuración de secretos, consulte Administración de secretos.
Creación de un catálogo externo
Un catálogo externo refleja una base de datos en un sistema de datos externo para que pueda consultar y administrar el acceso a los datos de esa base de datos mediante Azure Databricks y Unity Catalog. Para crear un catálogo externo, use una conexión al origen de datos que ya se ha definido.
Para crear un catálogo externo, puede usar Catalog Explorer o el comando SQL CREATE FOREIGN CATALOG
en un cuaderno de Azure Databricks o el editor de consultas SQL.
Nota:
También puede usar la API de REST de Databricks o la CLI de Databricks para crear un catálogo. Vea POST /api/2.1/unity-catalog/catalogs y Comandos de Unity Catalog.
Permisos necesarios: CREATE CATALOG
permiso en el metastore y la propiedad de la conexión o el privilegio CREATE FOREIGN CATALOG
en la conexión.
Explorador de catálogo
En el área de trabajo de Azure Databricks, haga clic en Catálogo para abrir el Explorador de catálogos.
En la parte superior del panel Catálogo, haga clic en el icono Agregar y seleccione Agregar un catálogo en el menú.
Como alternativa, en la página Acceso rápido, haga clic en el botón Catálogos y, a continuación, haga clic en el botón Crear catálogo.
Siga las instrucciones para crear catálogos externos en Crear catálogos.
SQL
Ejecute el siguiente comando SQL en un cuaderno o en un editor de consultas SQL. Los elementos entre corchetes son opcionales. Reemplace los valores de marcador de posición:
<catalog-name>
: nombre del catálogo en Azure Databricks.<connection-name>
: El objeto de conexión que especifica el origen de datos, la ruta de acceso y las credenciales de acceso.<database-name>
: nombre de la base de datos que desea reflejar como un catálogo en Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
Delegaciones admitidas
Se admiten las siguientes delegaciones en todos los procesos:
- Filtros
- Proyecciones
- Límite
- Funciones: parcial, solo para expresiones de filtro. (Funciones de cadena, funciones matemáticas y otras funciones diversas, como Alias, Cast, SortOrder)
Las siguientes instrucciones se admiten en Databricks Runtime 13.3 LTS y posterior, y en almacenes de SQL:
- Las siguientes funciones de agregación: MIN, MAX, COUNT, SUM, AVG, VAR_POP, VAR_SAMP, STDDEV_POP, STDDEV_SAMP, GREATEST, LEAST, COVAR_POP, COVAR_SAMP, CORR, REGR_INTERCEPT, REGR_R2, REGR_SLOPE, REGR_SXY
- Las siguientes funciones booleanas: =, <, <, =>, >=, <= =>
- Las siguientes funciones matemáticas (no se admiten si ANSI está deshabilitado): +, -, *, %, /
- Operadores varios | Y~
- Ordenación, cuando se usa con límite
No se admiten las siguientes delegaciones:
- Combinaciones
- Funciones de Windows
Asignaciones de tipo de datos
Al leer de PostgreSQL a Spark, los tipos de datos se asignan de la siguiente manera:
Tipo de PostgreSQL | Tipo de Spark |
---|---|
NUMERIC | DecimalType |
int2 | ShortType |
int4 (si no está firmado) | IntegerType |
int8, oid, xid, int4 (si está firmado) | LongType |
float4 | FloatType |
double precision, float8 | DoubleType |
char | CharType |
name, varchar, tid | VarcharType |
bpchar, character varying, json, money, point, super, text | StringType |
bytea, geometry, varbyte | BinaryType |
bit, bool | BooleanType |
date | DateType |
tabstime, time, time with time zone, timetz, time without time zone, timestamp with time zone, timestamp, timestamptz, timestamp without time zone* | TimestampType/TimestampNTZType |
Tipo de matriz postgresql** | ArrayType |
* Cuando se lee desde Postgresql, Postgresql Timestamp
se asigna a Spark TimestampType
si preferTimestampNTZ = false
(valor predeterminado). Postgresql Timestamp
se asigna a TimestampNTZType
si preferTimestampNTZ = true
.
** Se admiten tipos de matriz limitados.