Purga de datos
Se aplica a: ✅Azure Data Explorer
Nota:
En este artículo se indican los pasos para eliminar los datos personales del dispositivo o del servicio y puede utilizarse para cumplir con sus obligaciones según el Reglamento general de protección de datos (RGPD). Para obtener información general sobre RGPD, consulte Información sobre los procedimientos recomendados para el cumplimiento del RGPD y la sección RGPD del portal de confianza de servicios.
La plataforma de datos admite la capacidad de eliminar registros individuales mediante kusto .purge
y comandos relacionados. También puede purgar una tabla completa o purgar registros en una vista materializada.
Advertencia
La eliminación de datos a través del .purge
comando está diseñada para usarse para proteger los datos personales y no debe usarse en otros escenarios. No está diseñado para admitir solicitudes de eliminación frecuentes o eliminación de cantidades masivas de datos y puede tener un impacto significativo en el rendimiento del servicio.
Directrices de purga
Diseñe cuidadosamente el esquema de datos e investigue las directivas pertinentes antes de almacenar datos personales.
- En un escenario mejor, el período de retención de estos datos es lo suficientemente corto y los datos se eliminan automáticamente.
- Si el uso del período de retención no es posible, aísle todos los datos sujetos a reglas de privacidad en algunas tablas. De forma óptima, use solo una tabla y vincule a ella desde todas las demás tablas. Este aislamiento permite ejecutar el proceso de purga de datos en algunas tablas que contienen datos confidenciales y evitar todas las demás tablas.
- El autor de la llamada debe realizar cada intento de procesar por lotes la ejecución de
.purge
comandos a 1-2 comandos por tabla al día. No emita varios comandos con predicados de identidad de usuario únicos. En su lugar, envíe un único comando cuyo predicado incluya todas las identidades de usuario que requieren purgar.
Proceso de purga
El proceso de purga selectiva de datos se produce en los pasos siguientes:
Fase 1: Proporcione una entrada con un nombre de tabla y un predicado por registro, lo que indica qué registros se van a eliminar. Kusto examina la tabla que busca identificar las extensiones de datos que participarían en la purga de datos. Las extensiones identificadas son aquellas que tienen uno o varios registros para los que el predicado devuelve true.
Fase 2: (Eliminación temporal) Reemplace cada extensión de datos de la tabla (identificada en el paso 1)) por una versión reingested. La versión reingested no debe tener los registros para los que el predicado devuelve true. Si no se ingieren nuevos datos en la tabla, al final de esta fase, las consultas ya no devolverán datos para los que el predicado devuelve true. La duración de la fase de eliminación temporal de purga depende de los parámetros siguientes:
- Número de registros que se deben purgar
- Distribución de registros en las extensiones de datos del clúster
- Número de nodos del clúster
- Capacidad de reserva que tiene para las operaciones de purga
- Otros factores
La duración de la fase 2 puede variar entre unos segundos y muchas horas.
Fase 3: (Eliminación permanente) Vuelva a trabajar todos los artefactos de almacenamiento que puedan tener los datos "dudosos" y eliminarlos del almacenamiento. Esta fase se realiza al menos cinco días después de la finalización de la fase anterior, pero no más de 30 días después del comando inicial. Estas escalas de tiempo se establecen para seguir los requisitos de privacidad de los datos.
La emisión de un .purge
comando desencadena este proceso, que tarda unos días en completarse. Si la densidad de los registros para los que se aplica el predicado es lo suficientemente grande, el proceso volverá a rellenar eficazmente todos los datos de la tabla. Esta reingestión tiene un impacto significativo en el rendimiento y el COGS (costo de las mercancías vendidas).
Limitaciones y consideraciones de purga
El proceso de purga es final e irreversible. No es posible deshacer este proceso ni recuperar los datos que se han purgado. Los comandos como deshacer la eliminación de tablas no pueden recuperar los datos purgados. La reversión de los datos a una versión anterior no puede ir a antes del comando de purga más reciente.
Antes de ejecutar la purga, compruebe el predicado ejecutando una consulta y comprobando que los resultados coinciden con el resultado esperado. También puede usar el proceso de dos pasos que devuelve el número esperado de registros que se purgarán.
El
.purge
comando se ejecuta en el punto de conexión de Administración de datos:https://ingest-[YourClusterName].[region].kusto.windows.net
. El comando requiere permisos de administración de base de datos en las bases de datos pertinentes.Debido al impacto en el rendimiento del proceso de purga y a garantizar que se han seguido las directrices de purga, se espera que el autor de la llamada modifique el esquema de datos para que las tablas mínimas incluyan datos pertinentes y comandos por lotes por tabla para reducir el impacto significativo de COGS del proceso de purga.
El
predicate
parámetro del comando .purge se usa para especificar los registros que se van a purgar.Predicate
el tamaño está limitado a 1 MB. Al construir :predicate
- Use el operador 'in', por ejemplo,
where [ColumnName] in ('Id1', 'Id2', .. , 'Id1000')
. - Tenga en cuenta los límites del operador "in" (la lista puede contener hasta
1,000,000
valores). - Si el tamaño de la consulta es grande, use
externaldata
el operador , por ejemplowhere UserId in (externaldata(UserId:string) ["https://...blob.core.windows.net/path/to/file?..."])
. El archivo almacena la lista de identificadores que se van a purgar. - El tamaño total de la consulta, después de expandir todos los
externaldata
blobs (tamaño total de todos los blobs), no puede superar los 64 MB.
- Use el operador 'in', por ejemplo,
Rendimiento de purga
Solo se puede ejecutar una solicitud de purga en el clúster, en cualquier momento dado. Todas las demás solicitudes se ponen en cola en Scheduled
estado.
Supervise el tamaño de la cola de solicitudes de purga y mantenga dentro de los límites adecuados para que coincidan con los requisitos aplicables a los datos.
Para reducir el tiempo de ejecución de purga:
Siga las instrucciones de purga para reducir la cantidad de datos purgados.
Ajuste la directiva de almacenamiento en caché, ya que la purga tarda más tiempo en datos inactivos.
Escalado horizontal del clúster
Aumente la capacidad de purga del clúster, después de tener en cuenta cuidadosamente, como se detalla en Extensiones purgar capacidad de recompilación.
Desencadenar el proceso de purga
Nota:
La ejecución de purga se invoca mediante la ejecución del comando purge table TableName records en el punto de conexión https://ingest-de Administración de datos [YourClusterName].[ Region].kusto.windows.net.
Comando Purge table TableName records
El comando purge se puede invocar de dos maneras para distintos escenarios de uso:
Invocación mediante programación: un solo paso que está pensado para invocarse por las aplicaciones. Al llamar a este comando, se desencadena directamente la secuencia de ejecución de purga.
Sintaxis
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[region].kusto.windows.net" // To purge table records .purge table [TableName] records in database [DatabaseName] with (noregrets='true') <| [Predicate] // To purge materialized view records .purge materialized-view [MaterializedViewName] records in database [DatabaseName] with (noregrets='true') <| [Predicate]
Invocación humana: un proceso de dos pasos que requiere una confirmación explícita como un paso independiente. La primera invocación del comando devuelve un token de comprobación, que se debe proporcionar para ejecutar la purga real. Esta secuencia reduce el riesgo de eliminar accidentalmente datos incorrectos.
Nota:
El primer paso de la invocación en dos pasos requiere ejecutar una consulta en todo el conjunto de datos para identificar los registros que se van a purgar.
Esta consulta puede agotar el tiempo de espera o producir errores en tablas grandes, especialmente con una cantidad significativa de datos de caché en frío. En caso de errores, valide el predicado usted mismo y después de comprobar la corrección, use la purga de un solo paso con la noregrets
opción .
Sintaxis
Nota:
Para conectarse a un clúster mediante la interfaz de usuario web de Azure Data Explorer, consulte Incorporación de clústeres.
// Connect to the Data Management service - this command only works in Kusto.Explorer
#connect "https://ingest-[YourClusterName].[region].kusto.windows.net"
// Step #1 - retrieve a verification token (no records will be purged until step #2 is executed)
.purge table [TableName] records in database [DatabaseName] <| [Predicate]
// Step #2 - input the verification token to execute purge
.purge table [TableName] records in database [DatabaseName] with (verificationtoken=h'<verification token from step #1>') <| [Predicate]
Para purgar una vista materializada, reemplace la table
palabra clave por materialized-view
y reemplace TableName por MaterializedViewName.
Parámetros | Descripción |
---|---|
DatabaseName |
Nombre de la base de datos |
TableName / MaterializedViewName |
Nombre de la tabla o vista materializada para purgar. |
Predicate |
Identifica los registros que se van a purgar. Consulte Limitaciones del predicado de purga. |
noregrets |
Si se establece, desencadena una activación de un solo paso. |
verificationtoken |
En el escenario de activación en dos pasos (noregrets no se establece), este token se puede usar para ejecutar el segundo paso y confirmar la acción. Si verificationtoken no se especifica, desencadenará el primer paso del comando. La información sobre la purga se devolverá con un token que se debe devolver al comando para realizar el paso 2. |
Limitaciones del predicado de purga
- El predicado debe ser una selección simple (por ejemplo, donde [ColumnName] == 'X'where / [ColumnName] in ('X', 'Y', 'Z') y [OtherColumn] == 'A').
- Se deben combinar varios filtros con una cláusula 'and', en lugar de cláusulas independientes
where
(por ejemplo,where [ColumnName] == 'X' and OtherColumn] == 'Y'
y nowhere [ColumnName] == 'X' | where [OtherColumn] == 'Y'
). - El predicado no puede hacer referencia a tablas distintas de la tabla que se va a purgar (TableName). El predicado solo puede incluir la instrucción selection (
where
). No puede proyectar columnas específicas de la tabla (esquema de salida al ejecutar 'table
| El predicado debe coincidir con el esquema de la tabla). - No se admiten funciones del sistema (como ,
ingestion_time()
,extent_id()
).
Ejemplo: purga en dos pasos
Para iniciar la purga en un escenario de activación en dos pasos, ejecute el paso 1 del comando :
// Connect to the Data Management service
#connect "https://ingest-[YourClusterName].[region].kusto.windows.net"
.purge table MyTable records in database MyDatabase <| where CustomerId in ('X', 'Y')
.purge materialized-view MyView records in database MyDatabase <| where CustomerId in ('X', 'Y')
Salida
NumRecordsToPurge | EstimatedPurgeExecutionTime | VerificationToken |
---|---|---|
1596 | 00:00:02 | e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b |
A continuación, valide NumRecordsToPurge antes de ejecutar el paso 2.
Para completar una purga en un escenario de activación en dos pasos, use el token de verificación devuelto del paso 1 para ejecutar el paso 2:
.purge table MyTable records in database MyDatabase
with(verificationtoken=h'e43c7....')
<| where CustomerId in ('X', 'Y')
.purge materialized-view MyView records in database MyDatabase
with(verificationtoken=h'e43c7....')
<| where CustomerId in ('X', 'Y')
Salida
OperationId |
DatabaseName |
TableName |
ScheduledTime |
Duration |
LastUpdatedOn |
EngineOperationId |
State |
StateDetails |
EngineStartTime |
EngineDuration |
Retries |
ClientRequestId |
Principal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c9651d74-3b80-4183-90bb-bbe9e42eadc4 | MyDatabase | MyTable | 2019-01-20 11:41:05.4391686 | 00:00:00.1406211 | 2019-01-20 11:41:05.4391686 | Programadas | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... |
Ejemplo: purga de un solo paso
Para desencadenar una purga en un escenario de activación de un solo paso, ejecute el siguiente comando:
// Connect to the Data Management service
#connect "https://ingest-[YourClusterName].[region].kusto.windows.net"
.purge table MyTable records in database MyDatabase with (noregrets='true') <| where CustomerId in ('X', 'Y')
.purge materialized-view MyView records in database MyDatabase with (noregrets='true') <| where CustomerId in ('X', 'Y')
Salida
OperationId |
DatabaseName |
TableName |
ScheduledTime |
Duration |
LastUpdatedOn |
EngineOperationId |
State |
StateDetails |
EngineStartTime |
EngineDuration |
Retries |
ClientRequestId |
Principal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c9651d74-3b80-4183-90bb-bbe9e42eadc4 | MyDatabase | MyTable | 2019-01-20 11:41:05.4391686 | 00:00:00.1406211 | 2019-01-20 11:41:05.4391686 | Programadas | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... |
Comando Cancelar operación de purga
Si es necesario, puede cancelar las solicitudes de purga pendientes.
Nota:
Esta operación está pensada para escenarios de recuperación de errores. No se garantiza que se realice correctamente y no debe formar parte de un flujo operativo normal. Solo se puede aplicar a las solicitudes que todavía están en la cola y que aún no se han enviado para su ejecución.
Sintaxis
// Cancel of a single purge operation
.cancel purge <OperationId>
// Cancel of all pending purge requests in a database
.cancel all purges in database <DatabaseName>
// Cancel of all pending purge requests, for all databases
.cancel all purges
Ejemplo: Cancelar una sola operación de purga
.cancel purge aa894210-1c60-4657-9d21-adb2887993e1
Salida
La salida de este comando es la misma que la salida del comando "show purges OperationId", que muestra el estado actualizado de la operación de purga que se va a cancelar.
Si el intento se realiza correctamente, el estado de la operación se actualiza a Canceled
. De lo contrario, el estado de la operación no cambia.
OperationId |
DatabaseName |
TableName |
ScheduledTime |
Duration |
LastUpdatedOn |
EngineOperationId |
State |
StateDetails |
EngineStartTime |
EngineDuration |
Retries |
ClientRequestId |
Principal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c9651d74-3b80-4183-90bb-bbe9e42eadc4 | MyDatabase | MyTable | 2019-01-20 11:41:05.4391686 | 00:00:00.1406211 | 2019-01-20 11:41:05.4391686 | Cancelado | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... |
Ejemplo: Cancelar todas las operaciones de purga pendientes en una base de datos
.cancel all purges in database MyDatabase
Salida
La salida de este comando es la misma que la salida del comando show purges , mostrando todas las operaciones de la base de datos con su estado actualizado.
Las operaciones que se cancelaron correctamente tendrán su estado actualizado a Canceled
. De lo contrario, el estado de la operación no cambia.
OperationId |
DatabaseName |
TableName |
ScheduledTime |
Duration |
LastUpdatedOn |
EngineOperationId |
State |
StateDetails |
EngineStartTime |
EngineDuration |
Retries |
ClientRequestId |
Principal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5a34169e-8730-49f5-9694-7fde3a7a0139 | MyDatabase | MyTable | 2021-03-03 05:07:29.7050198 | 00:00:00.2971331 | 2021-03-03 05:07:30.0021529 | Cancelado | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... | ||||
2fa7c04c-6364-4ce1-a5e5-1ab921f518f5 | MyDatabase | MyTable | 2021-03-03 05:05:03.5035478 | 00:00:00.1406211 | 2021-03-03 05:05:03.6441689 | InProgress | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... |
Seguimiento del estado de la operación de purga
Nota:
Se puede realizar un seguimiento de las operaciones de purga con el comando show purges, ejecutado en el punto de conexión https://ingest-de Administración de datos [YourClusterName].[ region].kusto.windows.net.
Status = 'Completed' indica la finalización correcta de la primera fase de la operación de purga, es decir, los registros se eliminan temporalmente y ya no están disponibles para realizar consultas. No se espera que los clientes realicen un seguimiento y comprueben la finalización de la segunda fase (eliminación permanente). Esta fase se supervisa internamente.
Mostrar comando purges
Show purges
el comando muestra el estado de la operación de purga especificando el identificador de operación dentro del período de tiempo solicitado.
.show purges <OperationId>
.show purges [in database <DatabaseName>]
.show purges from '<StartDate>' [in database <DatabaseName>]
.show purges from '<StartDate>' to '<EndDate>' [in database <DatabaseName>]
Propiedades | Descripción | Obligatorio/Opcional |
---|---|---|
OperationId |
Identificador de la operación de Administración de datos generado después de ejecutar una sola fase o segunda. | Mandatory |
StartDate |
Límite de tiempo inferior para las operaciones de filtrado. Si se omite, el valor predeterminado es 24 horas antes de la hora actual. | Opcionales |
EndDate |
Límite de tiempo superior para las operaciones de filtrado. Si se omite, el valor predeterminado es la hora actual. | Opcionales |
DatabaseName |
Nombre de la base de datos para filtrar los resultados. | Opcionales |
Nota:
El estado solo se proporcionará en las bases de datos para las que el cliente tiene permisos de administrador de base de datos.
Ejemplos
.show purges
.show purges c9651d74-3b80-4183-90bb-bbe9e42eadc4
.show purges from '2018-01-30 12:00'
.show purges from '2018-01-30 12:00' to '2018-02-25 12:00'
.show purges from '2018-01-30 12:00' to '2018-02-25 12:00' in database MyDatabase
Salida
OperationId |
DatabaseName |
TableName |
ScheduledTime |
Duration |
LastUpdatedOn |
EngineOperationId |
State |
StateDetails |
EngineStartTime |
EngineDuration |
Retries |
ClientRequestId |
Principal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c9651d74-3b80-4183-90bb-bbe9e42eadc4 | MyDatabase | MyTable | 2019-01-20 11:41:05.4391686 | 00:00:33.6782130 | 2019-01-20 11:42:34.6169153 | a0825d4d-6b0f-47f3-a499-54ac5681ab78 | Completado | Purga completada correctamente (artefactos de almacenamiento pendientes de eliminación) | 2019-01-20 11:41:34.6486506 | 00:00:04.4687310 | 0 | KE. RunCommand; 1d0ad28b-f791-4f5a-a60f-0e32318367b7 | AAD app id=... |
OperationId
: el identificador de operación dm devuelto al ejecutar la purga.DatabaseName
** - nombre de la base de datos (distingue mayúsculas de minúsculas).TableName
- nombre de tabla (distingue mayúsculas de minúsculas).ScheduledTime
- tiempo de ejecución del comando de purga en el servicio DM.Duration
: duración total de la operación de purga, incluido el tiempo de espera de la cola dm de ejecución.EngineOperationId
: el identificador de operación de la purga real que se ejecuta en el motor.State
- estado de purga, puede ser uno de los siguientes valores:Scheduled
- La operación de purga está programada para su ejecución. Si el trabajo permanece programado, probablemente haya un trabajo pendiente de operaciones de purga. Consulte Purga del rendimiento para borrar este trabajo pendiente. Si se produce un error de purga en un error transitorio, el dm lo reintentará y se establecerá de nuevo en Programado (por lo que es posible que vea una transición de operación de Scheduled a InProgress y de vuelta a Scheduled).InProgress
: la operación de purga está en curso en el motor.Completed
: purga completada correctamente.BadInput
: error de purga en la entrada incorrecta y no se reintentará. Este error puede deberse a varios problemas, como un error de sintaxis en el predicado, un predicado no válido para los comandos de purga, una consulta que supera los límites (por ejemplo, más de 1M entidades en unexternaldata
operador o más de 64 MB de tamaño total de consulta expandida) y 404 o 403 errores paraexternaldata
blobs.Failed
- error de purga y no se reintentará. Este error puede producirse si la operación estaba esperando en la cola durante demasiado tiempo (más de 14 días), debido a un trabajo pendiente de otras operaciones de purga o a una serie de errores que superan el límite de reintento. Este último generará una alerta de supervisión interna y la investigará el equipo.
StateDetails
: una descripción del estado.EngineStartTime
: la hora en que se emitió el comando al motor. Si hay una gran diferencia entre esta hora y ScheduledTime, normalmente hay un trabajo pendiente significativo de operaciones de purga y el clúster no se mantiene al día.EngineDuration
: tiempo de ejecución de purga real en el motor. Si se reintentó la purga varias veces, es la suma de todas las duraciones de ejecución.Retries
: número de veces que el servicio DM reintentó la operación debido a un error transitorio.ClientRequestId
- identificador de actividad de cliente de la solicitud de purga dm.Principal
: identidad del emisor del comando de purga.
Purgar una tabla completa
Purgar una tabla incluye quitar la tabla y marcarla como purgada para que el proceso de eliminación permanente descrito en Proceso de purga se ejecute en ella.
Quitar una tabla sin purgar no elimina todos sus artefactos de almacenamiento. Estos artefactos se eliminan según la directiva de retención dura establecida inicialmente en la tabla.
El purge table allrecords
comando es rápido y eficaz y es preferible al proceso de purgar registros, si procede para su escenario.
Nota:
El comando se invoca mediante la ejecución del comando table purge TableName allrecords en el punto de conexión https://ingest-de Administración de datos [YourClusterName].[ region].kusto.windows.net.
Comando Purge table TableName allrecords
De forma similar al comando ".purge table records ", este comando se puede invocar en un modo mediante programación (paso único) o en un modo manual (dos pasos).
Invocación mediante programación (paso único):
Sintaxis
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table [TableName] in database [DatabaseName] allrecords with (noregrets='true')
Invocación humana (dos pasos):
Sintaxis
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" // Step #1 - retrieve a verification token (the table will not be purged until step #2 is executed) .purge table [TableName] in database [DatabaseName] allrecords // Step #2 - input the verification token to execute purge .purge table [TableName] in database [DatabaseName] allrecords with (verificationtoken=h'<verification token from step #1>')
Parámetros Descripción DatabaseName
Nombre de la base de datos. TableName
Nombre de la tabla. noregrets
Si se establece, desencadena una activación de un solo paso. verificationtoken
En el escenario de activación en dos pasos ( noregrets
no se establece), este token se puede usar para ejecutar el segundo paso y confirmar la acción. Siverificationtoken
no se especifica, desencadenará el primer paso del comando. En este paso, se devuelve un token para volver al comando y realizar el paso 2.
Ejemplo: purga en dos pasos
Para iniciar la purga en un escenario de activación en dos pasos, ejecute el paso 1 del comando :
// Connect to the Data Management service #connect "https://ingest-[YourClusterName].[Region].kusto.windows.net" .purge table MyTable in database MyDatabase allrecords
Salida
VerificationToken
e43c7184ed22f4f23c7a9d7b124d196be2e570096987e5baadf65057fa65736b Para completar una purga en un escenario de activación en dos pasos, use el token de verificación devuelto del paso 1 para ejecutar el paso 2:
.purge table MyTable in database MyDatabase allrecords with (verificationtoken=h'eyJT.....')
La salida es la misma que la salida del comando ".show tables" (se devuelve sin la tabla purgada).
Salida
TableName DatabaseName Carpeta DocString OtherTable MyDatabase --- ---
Ejemplo: purga de un solo paso
Para desencadenar una purga en un escenario de activación de un solo paso, ejecute el siguiente comando:
// Connect to the Data Management service
#connect "https://ingest-[YourClusterName].[Region].kusto.windows.net"
.purge table MyTable in database MyDatabase allrecords with (noregrets='true')
La salida es la misma que la salida del comando ".show tables" (se devuelve sin la tabla purgada).
Salida
TableName | DatabaseName | Carpeta | DocString |
---|---|---|---|
OtherTable | MyDatabase | --- | --- |