Administración de directivas de clúster
Importante
Esta característica está en versión preliminar pública.
Una directiva de clúster es una herramienta que se usa para limitar los permisos de creación de clústeres de un usuario o grupo en función de un conjunto de reglas de directiva.
Las directivas de clúster permiten que:
- Limite a los usuarios a crear clústeres con la configuración prescrita.
- Limite a los usuarios a crear un determinado número de clústeres.
- Simplifique la interfaz de usuario y permita que más usuarios creen sus propios clústeres (para ello, se corrigen y ocultan algunos valores).
- Controle el costo limitando el costo máximo por clúster (estableciendo límites en atributos cuyos valores contribuyen al precio por hora).
En el vídeo sobre las directivas de clúster de Databricks encontrará una introducción a estas y a las recomendaciones de configuración:
Este artículo se centra en la administración de directivas mediante la interfaz de usuario. También puede usar Cluster Policies API 2.0 y Permissions API 2.0 para administrar las directivas.
Directiva de proceso personal
Proceso personal es una directiva de clúster administrada por Azure Databricks disponible de forma predeterminada en todas las áreas de trabajo de Azure Databricks. Si concede a los usuarios acceso a esta directiva, les permitirá crear recursos de proceso de una sola máquina en Azure Databricks para su uso individual.
Los administradores pueden administrar el acceso y personalizar las reglas de directiva para adaptarse a las necesidades de su área de trabajo.
Requisitos
Las directivas de clúster requieren el plan Premium.
Reglas de cumplimiento
Puede expresar los tipos de restricciones siguientes en las reglas de directiva:
- Valor fijo con elemento de control deshabilitado
- Valor fijo con control oculto en la interfaz de usuario (valor visible en la vista JSON)
- Valor de atributo limitado a un conjunto de valores (lista de permitidos o lista de bloqueados)
- Valor de atributo que coincide con una expresión regular determinada
- Atributo numérico limitado a un rango determinado
- Valor predeterminado utilizado por la interfaz de usuario con control habilitado
Atributos de clúster administrados
Las directivas de clúster admiten todos los atributos de clúster controlados con Clusters API 2.0. El tipo específico de restricciones admitidas puede variar por campo (en función del tipo y la relación con los elementos de la interfaz de usuario del formulario de clúster).
Además, las directivas de clúster admiten los atributos sintéticos siguientes:
- Una métrica "Número máximo de DBU por hora", que es el número máximo de DBU que un clúster puede usar en una hora. Esta métrica es una manera directa de controlar el costo en el nivel de clúster individual.
- Un límite en el origen que crea el clúster: servicio de trabajos (clústeres de trabajo), interfaz de usuario de clústeres, API REST de clústeres (clústeres multiuso).
Atributos de clúster no administrados
Los atributos de clúster siguientes no se pueden restringir en una directiva de clúster:
- Bibliotecas, que se controlan mediante Libraries API 2.0. Una solución alternativa es utilizar un contenedor personalizado o un script de inicialización.
- Permisos de clúster (ACL), que se controlan mediante una API independiente.
Definición de una directiva de clúster
Una directiva de clúster se define en una definición de directiva JSON, que se agrega al crear la directiva de clúster.
Creación de una directiva de clúster
Para crear una directiva de clúster, utilice la interfaz de usuario de directivas de clúster o las Cluster Policies API 2.0. Para crear una directiva de clúster mediante la interfaz de usuario:
- Haga clic en
Proceso en la barra lateral.
- Haga clic en la pestaña Directivas.
- Haga clic en Create directiva de clúster.
- Asigne un nombre a la directiva. Los nombres de las directivas no distinguen mayúsculas de minúsculas.
- Opcionalmente, seleccione la familia de directivas de la lista desplegable Familia. Esto determina la plantilla a partir de la cual se crea la directiva. Consulte la familia de directivas.
- Escriba una Descripción de la directiva. Esto ayuda a otras personas a conocer el propósito de la directiva.
- En la pestaña Definición, pegue una definición de directiva.
- Haga clic en Crear.
Clonación de una directiva de clúster existente
Si desea crear una directiva de clúster, puede clonar una directiva existente. Para clonar una directiva de clúster mediante la interfaz de usuario:
- Haga clic en
Proceso en la barra lateral.
- Haga clic en la pestaña Directivas.
- Seleccione la directiva que quiere clonar.
- Haga clic en Clonar.
- En la página siguiente, se rellenan previamente todos los campos con los valores de la directiva existente. Cambie los valores de los campos que desea modificar y, luego, haga clic en Crear.
Administración de permisos de directivas de clúster
Los administradores del área de trabajo tienen permiso para todas las directivas.
Al crear un clúster, los usuarios no administradores solo pueden seleccionar las directivas para las que se les ha concedido permiso. Si un usuario tiene permiso de creación de clústeres, también puede seleccionar la directiva Sin restricciones, lo que le permite crear clústeres totalmente configurables.
Nota:
Si el usuario no tiene acceso a ninguna directiva, no se muestra la lista desplegable de directivas.
Incorporación de un permiso de directiva de clúster
Para agregar un permiso de directiva de clúster mediante la interfaz de usuario:
- Haga clic en
Proceso en la barra lateral.
- Haga clic en la pestaña Directivas.
- Seleccione la directiva que quiere actualizar.
- Haga clic en la pestaña Permisos.
- En la columna Nombre, seleccione una entidad de seguridad.
- En la columna Permiso, seleccione un permiso.
- Haga clic en Agregar.
Eliminación de un permiso de directiva de clúster
Para eliminar un permiso de directiva de clúster mediante la interfaz de usuario:
- Haga clic en
Proceso en la barra lateral.
- Haga clic en la pestaña Directivas.
- Seleccione la directiva que quiere actualizar.
- Haga clic en la pestaña Permisos.
- Haga clic en el icono
en la fila de permisos.
Restricción del número de clústeres por usuario
Los permisos de directiva permiten establecer un número máximo de clústeres por usuario. Esto determina cuántos clústeres puede crear un usuario mediante esa directiva. Si el usuario supera el límite, se produce un error en la operación.
Para restringir el número de clústeres que un usuario puede crear mediante una directiva, use la configuración Número máximo de clústeres por usuario en la pestaña Permisos de la interfaz de usuario de directivas de clúster.
Nota:
Azure Databricks no finaliza de forma proactiva los clústeres para mantener el límite. Si un usuario tiene tres clústeres que se ejecutan con la directiva y el administrador reduce el límite a uno, los tres clústeres seguirán ejecutándose. Los clústeres adicionales se deben finalizar manualmente para cumplir el límite.
Edición de una directiva de clúster mediante la interfaz de usuario
Para editar una directiva de clúster, utilice la interfaz de usuario de directivas de clúster o las Cluster Policies API 2.0. Para editar una directiva de clúster mediante la interfaz de usuario:
Haga clic en
Proceso en la barra lateral.
Haga clic en la pestaña Directivas de clúster.
Seleccione la directiva que quiere editar.
Haga clic en Editar.
En la pestaña Definición, edite la definición de directiva.
Haga clic en Update(Actualizar).
Eliminación de una directiva de clúster mediante la interfaz de usuario
Para eliminar una directiva de clúster, utilice la interfaz de usuario de directivas de clúster o las Cluster Policies API 2.0. Para eliminar una directiva de clúster mediante la interfaz de usuario:
Haga clic en
Proceso en la barra lateral.
Haga clic en la pestaña Directivas de clúster.
Seleccione la directiva que quiere eliminar.
Haga clic en Eliminar.
Haga clic en Delete (Eliminar) para confirmar.
Familias de directivas de clúster
Al crear una directiva de clúster puede elegir usar una familia de directivas. Las familias de directivas proporcionan reglas de directiva rellenadas previamente para casos de uso de proceso comunes. Por ejemplo, hay una familia de directivas de proceso personal donde puede crear una directiva personalizada basada en la directiva de proceso personal.
Cuando se usa una familia de directivas, las reglas de la directiva se heredan de la familia de directivas. Después de seleccionar una familia de directivas, puede crear la directiva tal cual, o bien agregar reglas o invalidar las reglas dadas.
Crear una directiva personalizada mediante una familia de directivas
Para personalizar una directiva mediante una familia de directivas:
- Haga clic en
Proceso en la barra lateral.
- Haga clic en la pestaña Directivas.
- Haga clic en Create directiva de clúster.
- Asigne un nombre a la directiva. Los nombres de las directivas no distinguen mayúsculas de minúsculas.
- Seleccione la familia de directivas de la lista desplegable Familia.
- En la pestaña Definiciones, haga clic en Editar.
- Aparece un diálogo modal donde se pueden invalidar las definiciones de directiva. En la sección Reemplazos, agregue las definiciones actualizadas y haga clic en Aceptar.
Definiciones de directiva de clúster
Una definición de directiva de clúster es una colección de definiciones de directivas individuales expresadas en JSON.
En esta sección:
- Definiciones de directiva
- Elementos de directiva
- Rutas de acceso al atributo de directiva de clúster
- Rutas de acceso al atributo virtual de directiva de clúster
- Atributos de matriz
Definiciones de directiva
Una definición de directiva es una asignación entre una cadena de ruta de acceso que define un atributo y un tipo de límite. Solo puede haber una limitación por atributo. Una ruta de acceso es específica para el tipo de recurso y refleja el nombre del atributo de la API de creación del recurso. Si la creación del recurso utiliza atributos anidados, la ruta de acceso concatena los nombres de los atributos anidados mediante puntos. Los atributos que no están definidos en la definición de directiva son ilimitados cuando se crea un clúster con la directiva.
interface Policy {
[path: string]: PolicyElement
}
Elementos de directiva
Un elemento de directiva especifica uno de los tipos de límite admitidos en un atributo determinado y, de manera opcional, un valor predeterminado. Puede especificar un valor predeterminado sin definir un límite en el atributo de la directiva.
type PolicyElement = FixedPolicy | ForbiddenPolicy | (LimitingPolicyBase & LimitingPolicy);
type LimitingPolicy = AllowlistPolicy | BlocklistPolicy | RegexPolicy | RangePolicy | UnlimitedPolicy;
En esta sección, se describen los tipos de directiva:
- Directiva fija
- Directiva de prohibición
- Directivas de limitación: campos comunes
- Directiva de lista de permitidos
- Directiva de lista de bloqueados
- Directiva de expresión regular
- Directiva de rango
- Directiva ilimitada
Directiva fija
Limita el valor al valor especificado. En el caso de valores de atributos que no son numéricos ni booleanos, el valor del atributo se debe representar mediante una cadena o se debe poder convertir en una cadena.
Opcionalmente, el atributo se puede ocultar en la interfaz de usuario cuando existe la marca hidden
y se establece en true
. Una directiva fija no puede especificar un valor predeterminado.
interface FixedPolicy {
type: "fixed";
value: string | number | boolean;
hidden?: boolean;
}
Ejemplo
{
"spark_version": { "type": "fixed", "value": "7.3.x-scala2.12", "hidden": true }
}
Directiva de prohibición
Para un atributo opcional, evita el uso del atributo.
interface ForbiddenPolicy {
type: "forbidden";
}
Ejemplo
Esta directiva prohíbe adjuntar grupos al clúster para los nodos de trabajo. Los grupos también están prohibidos para el nodo de controlador, porque driver_instance_pool_id
hereda la directiva.
{
"instance_pool_id": { "type": "forbidden" }
}
Directivas de limitación: campos comunes
En una directiva de limitación, puede especificar dos campos adicionales:
defaultValue
: el valor que rellena el formulario de creación del clúster en la interfaz de usuario.isOptional
: una directiva de limitación en un atributo hace que este sea obligatorio. Para que el atributo sea opcional, establezca el campoisOptional
en true.
interface LimitedPolicyBase {
defaultValue?: string | number | boolean;
isOptional?: boolean;
}
Ejemplo
{
"instance_pool_id": { "type": "unlimited", "isOptional": true, "defaultValue": "id1" }
}
Esta directiva de ejemplo especifica el valor predeterminado id1
para el grupo para los nodos de trabajo, pero lo convierte en opcional. Al crear el clúster, puede seleccionar otro grupo o elegir no usar ninguno. Si driver_instance_pool_id
no se define en la directiva o al crear el clúster, se utiliza el mismo grupo para los nodos de trabajo y el nodo de controlador.
Directiva de lista de permitidos
Lista de valores permitidos.
interface AllowlistPolicy {
type: "allowlist";
values: (string | number | boolean)[];
}
Ejemplo
{
"spark_version": { "type": "allowlist", "values": [ "7.2.x-scala2.12", "7.3.x-scala2.12" ] }
}
Directiva de lista de bloqueados
Lista de valores no permitidos. Como los valores deben ser coincidencias exactas, es posible que esta directiva no funcione según lo previsto cuando el atributo es flexible en cuanto a cómo se representa el valor (por ejemplo, si permite espacios iniciales o finales).
interface BlocklistPolicy {
type: "blocklist";
values: (string | number | boolean)[];
}
Ejemplo
{
"spark_version": { "type": "blocklist", "values": [ "4.0.x-scala2.11" ] }
}
Directiva de expresión regular
Limita el valor a los que coinciden con la expresión regular. Por motivos de seguridad, durante la correspondencia, la expresión regular siempre se ancla al inicio y al final del valor de cadena.
interface RegexPolicy {
type: "regex";
pattern: string;
}
Ejemplo
{
"spark_version": { "type": "regex", "pattern": "5\\.[3456].*" }
}
Directiva de rango
Limita el valor al rango que especifican los atributos minValue
y maxValue
. El valor debe ser un número decimal.
Los límites numéricos se deben poder representar como un valor de número de punto flotante doble. Para indicar que falta un límite específico, puede omitir minValue
o maxValue
.
interface RangePolicy {
type: "range";
minValue?: number;
maxValue?: number;
}
Ejemplo
{
"num_workers": { "type": "range", "maxValue": 10 }
}
Directiva ilimitada
No define límites de valor. Puede usar este tipo de directiva para hacer que los atributos sean obligatorios o para establecer el valor predeterminado en la interfaz de usuario.
interface UnlimitedPolicy {
type: "unlimited";
}
Ejemplo
Para hacer obligatorio agregar la etiqueta COST_BUCKET
:
{
"custom_tags.COST_BUCKET": { "type": "unlimited" }
}
Para establecer un valor para una variable de configuración de Spark, pero también permitir omitirla (quitarla):
{
"spark_conf.spark.my.conf": { "type": "unlimited", "isOptional": true, "defaultValue": "my_value" }
}
Rutas de acceso al atributo de directiva de clúster
En la tabla siguiente, se enumeran las rutas de acceso al atributo de directiva de clúster admitidas.
Ruta de acceso al atributo | Tipo | Descripción |
---|---|---|
autoscale.max_workers |
número opcional | Si está oculto, quita el campo de número máximo de trabajos de la interfaz de usuario. |
autoscale.min_workers |
número opcional | Si está oculto, quita el campo de número mínimo de trabajos de la interfaz de usuario. |
autotermination_minutes |
number | Un valor de 0 representa que no hay terminación automática. Si está oculto, quita la casilla de terminación automática y la entrada de valor de la interfaz de usuario. |
cluster_log_conf.path |
string | Dirección URL de destino de los archivos de registro. |
cluster_log_conf.type |
string | DBFS |
cluster_name |
string | El nombre del clúster. |
custom_tags.* |
string | Controla los valores de etiqueta específicos anexando el nombre de la etiqueta, por ejemplo: custom_tags.<mytag> . |
docker_image.basic_auth.password |
string | Contraseña de la autenticación básica de la imagen de Databricks Container Services. |
docker_image.basic_auth.username |
string | Nombre de usuario de la autenticación básica de la imagen de Databricks Container Services. |
docker_image.url |
string | Controle la dirección URL de la imagen de Databricks Container Services. Si está oculto, quita la sección Databricks Container Services de la interfaz de usuario. |
driver_node_type_id |
cadena opcional | Si está oculto, quita la selección del tipo de nodo de controlador de la interfaz de usuario. |
enable_local_disk_encryption |
boolean | Establézcalo en true para habilitar o en false para deshabilitar el cifrado de los discos que están conectados localmente al clúster (tal como se especifica mediante la API). |
init_scripts.*.dbfs.destination , init_scripts.*.file.destination |
string | * hace referencia al índice del script de inicialización en la matriz de atributos. Consulte Atributos de matriz. |
instance_pool_id |
string | Controla el grupo que utilizan los nodos de trabajo si driver_instance_pool_id también está definido o, en caso contrario, para todos los nodos de clúster. Si utiliza grupos para los nodos de trabajo, también debe utilizar grupos para el nodo de controlador. Si está oculto, quita la selección de grupo de la interfaz de usuario. |
driver_instance_pool_id |
string | Si se especifica, configura un grupo para el nodo de controlador distinto del configurado para los nodos de trabajo. Si no se especifica, hereda instance_pool_id . Si utiliza grupos para los nodos de trabajo, también debe utilizar grupos para el nodo de controlador. Si está oculto, quita la selección del grupo de controladores de la interfaz de usuario. |
node_type_id |
string | Si está oculto, quita la selección del tipo de nodo de trabajo de la interfaz de usuario. |
num_workers |
número opcional | Si está oculto, quita la especificación del número de trabajos de la interfaz de usuario. |
single_user_name |
string | Nombre de usuario del acceso de usuario único mediante transferencia de credenciales. |
spark_conf.* |
cadena opcional | Controla valores específicos de configuración anexando el nombre de clave de configuración, por ejemplo: spark_conf.spark.executor.memory . |
spark_env_vars.* |
cadena opcional | Controla valores específicos de variables de entorno de Spark anexando la variable de entorno, por ejemplo: spark_env_vars.<environment variable name> . |
spark_version |
string | Nombre de versión de la imagen de Spark (tal como se especifica mediante la API). |
Rutas de acceso al atributo virtual de directiva de clúster
Ruta de acceso al atributo | Tipo | Descripción |
---|---|---|
dbus_per_hour |
number | Atributo calculado que representa el costo de DBU (máximo, en caso de clústeres de escalado automático) del clúster, incluido el nodo de controlador. Para su uso con limitación de rango. |
cluster_type |
string | Representa el tipo de clúster que se puede crear: * all-purpose para clústeres multiuso de Azure Databricks* job para clústeres de trabajo creados por el programador de trabajos* dlt para clústeres creados para canalizaciones de Delta Live TablesPermite o impide la creación de tipos especificados de clústeres a partir de la directiva. Si no se permite el valor all-purpose , la directiva no se muestra en el formulario de creación de clústeres multiuso. Si no se permite el valor job , la directiva no se muestra en el formulario de clúster nuevo de trabajo. |
Atributos de matriz
Puede especificar directivas para los atributos de matriz de dos maneras:
- Limitaciones genéricas para todos los elementos de matriz. Estas limitaciones utilizan el símbolo comodín
*
en la ruta de acceso a la directiva. - Limitaciones específicas para un elemento de matriz en un índice específico. Estas limitaciones utilizan un número en la ruta de acceso.
Por ejemplo, para el atributo de matriz init_scripts
, las rutas de acceso genéricas comienzan por init_scripts.*
y las rutas de acceso específicas, por init_scripts.<n>
, donde <n>
es un índice entero en la matriz (que comienza por 0).
Puede combinar las limitaciones genéricas y las específicas, y en ese caso, la limitación genérica se aplica a cada elemento de matriz que no tiene una limitación específica. En cada caso, solo se aplicará una limitación de directiva.
Los casos de uso típicos para las directivas de matriz son:
Exija entradas específicas de inclusión. Por ejemplo:
{ "init_scripts.0.dbfs.destination": { "type": "fixed", "value": "<required-script-1>" }, "init_scripts.1.dbfs.destination": { "type": "fixed", "value": "<required-script-2>" } }
No puede exigir valores específicos sin especificar el orden.
Exija un valor fijo de toda la lista. Por ejemplo:
{ "init_scripts.0.dbfs.destination": { "type": "fixed", "value": "<required-script-1>" }, "init_scripts.*.dbfs.destination": { "type": "forbidden" } }
Prohíba completamente el uso.
{ "init_scripts.*.dbfs.destination": { "type": "forbidden" } }
Permita cualquier número de entradas, pero solo según una restricción específica. Por ejemplo:
{ "init_scripts.*.dbfs.destination": { "type": "regex", "pattern": ".*<required-content>.*" } }
En el caso de las rutas de acceso init_scripts
, la matriz puede contener una de varias estructuras para las que pueda ser necesario controlar todas las variantes en función del caso de uso. Por ejemplo, para exigir un conjunto específico de scripts de inicialización y prohibir cualquier variante de la otra versión, puede usar el patrón siguiente:
{
"init_scripts.1.dbfs.destination": {
"type": "fixed",
"value": "dbfs:/<dbfs-path>"
},
"init_scripts.*.dbfs.destination": {
"type": "forbidden"
},
"init_scripts.*.file.destination": {
"type": "forbidden"
},
}
Ejemplos de directiva de clúster
En esta sección:
- Directiva de clúster general
- Directiva simple de tamaño medio
- Directiva de solo trabajo
- Directiva de nodo único
- Directiva de metastore externo
Directiva de clúster general
Una directiva de clúster de uso general pensada para guiar a los usuarios y restringir ciertas funcionalidades, al tiempo que exige etiquetas, restringe el número máximo de instancias y aplica el tiempo de espera.
{
"spark_conf.spark.databricks.cluster.profile": {
"type": "fixed",
"value": "singleNode",
"hidden": true
},
"instance_pool_id": {
"type": "forbidden",
"hidden": true
},
"spark_version": {
"type": "regex",
"pattern": "7\\.[0-9]+\\.x-scala.*"
},
"node_type_id": {
"type": "allowlist",
"values": [
"Standard_L4s",
"Standard_L8s",
"Standard_L16s"
],
"defaultValue": "Standard_L16s_v2"
},
"driver_node_type_id": {
"type": "fixed",
"value": "Standard_L16s_v2",
"hidden": true
},
"autoscale.min_workers": {
"type": "fixed",
"value": 1,
"hidden": true
},
"autoscale.max_workers": {
"type": "range",
"maxValue": 25,
"defaultValue": 5
},
"autotermination_minutes": {
"type": "fixed",
"value": 30,
"hidden": true
},
"custom_tags.team": {
"type": "fixed",
"value": "product"
}
}
Directiva simple de tamaño medio
Permite a los usuarios crear un clúster de tamaño medio con una configuración mínima. El único campo obligatorio en el momento de la creación es el nombre del clúster; el resto está fijo y oculto.
{
"instance_pool_id": {
"type": "forbidden",
"hidden": true
},
"spark_conf.spark.databricks.cluster.profile": {
"type": "forbidden",
"hidden": true
},
"autoscale.min_workers": {
"type": "fixed",
"value": 1,
"hidden": true
},
"autoscale.max_workers": {
"type": "fixed",
"value": 10,
"hidden": true
},
"autotermination_minutes": {
"type": "fixed",
"value": 60,
"hidden": true
},
"node_type_id": {
"type": "fixed",
"value": "Standard_L8s_v2",
"hidden": true
},
"driver_node_type_id": {
"type": "fixed",
"value": "Standard_L8s_v2",
"hidden": true
},
"spark_version": {
"type": "fixed",
"value": "7.3.x-scala2.12",
"hidden": true
},
"custom_tags.team": {
"type": "fixed",
"value": "product"
}
}
Directiva de solo trabajo
Permite a los usuarios crear clústeres de trabajos y ejecutar trabajos mediante el clúster. Con esta directiva, los usuarios no puede crear un clúster multiuso.
{
"cluster_type": {
"type": "fixed",
"value": "job"
},
"dbus_per_hour": {
"type": "range",
"maxValue": 100
},
"instance_pool_id": {
"type": "forbidden",
"hidden": true
},
"num_workers": {
"type": "range",
"minValue": 1
},
"node_type_id": {
"type": "regex",
"pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
},
"driver_node_type_id": {
"type": "regex",
"pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
},
"spark_version": {
"type": "regex",
"pattern": "7\\.[0-9]+\\.x-scala.*"
},
"custom_tags.team": {
"type": "fixed",
"value": "product"
}
}
Directiva de nodo único
Permite a los usuarios crear un clúster de nodo único sin nodos de trabajo con Spark habilitado en modo local. Si desea ver directivas de ejemplo, consulte Directiva de clúster de nodo único.
Directiva de metastore externo
Permite a los usuarios crear un clúster con un metastore definido por el administrador ya adjunto. Esto es útil para permitir a los usuarios crear sus propios clústeres sin necesidad de configuración adicional.
{
"spark_conf.spark.hadoop.javax.jdo.option.ConnectionURL": {
"type": "fixed",
"value": "jdbc:sqlserver://<jdbc-url>"
},
"spark_conf.spark.hadoop.javax.jdo.option.ConnectionDriverName": {
"type": "fixed",
"value": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
},
"spark_conf.spark.databricks.delta.preview.enabled": {
"type": "fixed",
"value": "true"
},
"spark_conf.spark.hadoop.javax.jdo.option.ConnectionUserName": {
"type": "fixed",
"value": "<metastore-user>"
},
"spark_conf.spark.hadoop.javax.jdo.option.ConnectionPassword": {
"type": "fixed",
"value": "<metastore-password>"
}
}