Glosario de Automatización • Particionado Parquet para lagos de datos SCADA

¿Qué es una estrategia de particionado Parquet para lagos de datos SCADA?

Ingeniería Merobix • • 8 min de lectura

Una estrategia de particionado Parquet es el plan de cómo se organizan los archivos de telemetría SCADA en un lago de datos para que las consultas sigan siendo rápidas y baratas a medida que los datos crecen a miles de millones de filas. Parquet es un formato de archivo columnar, lo que ya vuelve eficientes las consultas analíticas, pero cómo se divide los datos en carpetas y archivos decide si un motor lee unos pocos archivos relevantes o escanea toda la historia. Los dos problemas recurrentes son elegir particiones que dejen a las consultas saltarse la mayoría de los datos y evitar la avalancha de archivos diminutos que crean las escrituras de alta frecuencia. Esta página cubre el particionado por fecha y sitio, el problema de archivos pequeños y la compactación, y la disposición de columnas que deja a los motores podar los escaneos.

Volver al glosario

Particionado Parquet para lagos de datos SCADA en una línea: Una estrategia de particionado Parquet organiza los archivos de telemetría en una jerarquía de carpetas, comúnmente por fecha y sitio, para que un motor de consulta lea solo las particiones que necesita y se salte el resto. Combinada con el almacenamiento columnar, tamaños de archivo sensatos y compactación periódica de archivos pequeños, mantiene las consultas sobre historias SCADA enormes rápidas y baratas.

Particionar por fecha y sitio

Particionar significa dividir físicamente los datos en carpetas separadas, con clave en el valor de una columna, para que una consulta que filtra sobre esa columna pueda ignorar cada carpeta que no puede contener una coincidencia. Para datos SCADA de series de tiempo la primera partición natural es la fecha, porque casi toda consulta está acotada en el tiempo: una tendencia de la semana pasada, un reporte del mes pasado, una investigación de un día específico. Disponer los datos como carpetas por año, mes y día significa que una consulta de un solo día toca la carpeta de un día y nunca abre los otros años que reposan en el lago.

El sitio, u otra agrupación gruesa de activos, es la segunda clave de partición usual porque muchas consultas también se acotan a una ubicación. Una ruta de partición que anida el sitio bajo la fecha, o la fecha bajo el sitio, deja que una consulta de un sitio en un día se estreche a una sola rebanada pequeña del lago. El motor lee los valores de partición directo de los nombres de carpeta sin abrir ningún archivo, así que esta poda es casi gratis. El arte está en elegir claves de partición que coincidan con cómo se consulta de verdad los datos, ya que una partición sobre una columna que nadie filtra agrega carpetas sin ahorrar nunca un escaneo.

La trampa en el otro extremo es particionar demasiado fino. Dividir por hora, o por tag individual, o por sitio y hora y tag juntos, produce una explosión de particiones cada una con muy pocos datos, y esa granularidad fina es lo que engendra el problema de archivos pequeños. El grano correcto deja cada partición con una cantidad sustancial de datos, suficiente para llenar archivos de un tamaño sano, mientras aún deja a los filtros de consulta comunes podar todo lo irrelevante. Fecha y sitio juntos normalmente alcanzan ese equilibrio para la telemetría SCADA.

El problema de archivos pequeños y la compactación

La ingesta de telemetría de alta frecuencia tiende a escribir muchos archivos pequeños, porque cada microlote o descarga de flujo aterriza su puñado de filas como un archivo nuevo. Sin control, la partición de un solo día puede acumular miles de archivos Parquet diminutos, y esto es genuinamente costoso de consultar. Cada archivo lleva sobrecarga por archivo - un pie de página que leer, metadatos que analizar, una solicitud al almacén de objetos que hacer - y cuando el motor debe abrir miles de archivos para responder una consulta, esa sobrecarga domina y ahoga la eficiencia que Parquet se suponía debía proveer. Los archivos pequeños también desperdician la compresión y codificación de Parquet, que funcionan mejor sobre grupos de filas más grandes.

El remedio es la compactación: un trabajo periódico que lee los muchos archivos pequeños de una partición y los reescribe como unos pocos grandes, normalmente apuntando a archivos en el rango de cientos de megabytes para que cada uno sostenga grupos de filas considerables y bien comprimidos. La compactación se corre normalmente en un horario contra particiones que ya no reciben escrituras en vivo, por ejemplo compactando los datos de ayer durante la noche, para que nunca pelee con el flujo de ingesta. Tras la compactación los mismos datos ocupan muchos menos archivos y más grandes, y las consultas que antes abrían miles de archivos ahora abren un puñado.

Como el problema de archivos pequeños es consecuencia directa de la ingesta en flujo, el patrón que funciona es separar el camino de escritura del camino de lectura. La ingesta optimiza para aterrizar los datos rápido y de forma durable, aceptando archivos pequeños como subproducto, mientras un paso de compactación aguas abajo optimiza la disposición para consultar. Algunos formatos de tabla superpuestos sobre Parquet automatizan esta contabilidad, rastreando cuáles archivos componen una partición e intercambiando los pequeños por compactados de forma atómica, para que los lectores nunca vean un estado a medio compactar. De cualquier manera, planear la compactación desde el inicio evita la degradación lenta que se cuela sobre un lago sin mantenimiento.

Disposición de columnas y poda de escaneo

El particionado poda a nivel de carpeta, pero Parquet también poda dentro de cada archivo, y una buena disposición de columnas aprovecha eso al máximo. Como Parquet es columnar, una consulta que selecciona solo unas pocas columnas lee solo esas columnas del disco y se salta el resto por completo, así que una tabla de telemetría ancha donde una consulta solo necesita marca de tiempo y valor nunca paga por leer las columnas que ignoró. Por eso almacenar telemetría en un formato columnar vence a un formato de filas para la analítica, donde las consultas normalmente tocan unas pocas columnas a través de muchas filas en lugar de filas enteras.

Parquet va más allá con estadísticas de grupo de filas. Cada archivo se divide en grupos de filas, y el pie de página registra el valor mínimo y máximo de cada columna en cada grupo, así que un motor que filtra sobre un rango puede saltarse grupos de filas enteros cuya ventana de mínimo y máximo no puede contener una coincidencia. Si los datos dentro de cada archivo están ordenados o agrupados por una columna comúnmente filtrada, como la marca de tiempo, estos rangos de mínimo y máximo se vuelven ajustados y no superpuestos, y el motor puede saltarse la mayor parte del archivo para un filtro de tiempo estrecho. Escribir los datos ya ordenados por marca de tiempo dentro de cada partición por lo tanto rinde al momento de consultar.

Para un servicio de SCADA en la nube como Merobix que almacena historias largas de muchos sitios, esta poda por capas - particiones por fecha y sitio, lecturas columnares de solo los campos necesarios, y salto de grupos de filas sobre marcas de tiempo ordenadas - es lo que mantiene asequibles las consultas analíticas a medida que el archivo crece sin límite. Un lago Parquet bien particionado, compactado y ordenado por tiempo deja que un motor responda una pregunta sobre un tag en un sitio durante una semana tocando una fracción diminuta de los bytes almacenados, en lugar de escanear años de telemetría no relacionada, que es la diferencia entre un lago de datos que se mantiene rápido y uno que se arrastra a medida que se llena.

Preguntas frecuentes

¿Por cuáles columnas debo particionar la telemetría SCADA en un lago de datos?

Particione por las columnas que sus consultas filtran con más frecuencia, que para datos SCADA de series de tiempo suelen ser fecha y sitio o grupo de activos. La fecha es casi siempre un filtro porque las consultas están acotadas en el tiempo, y el sitio es una segunda clave común porque los análisis a menudo se acotan a una ubicación. Evite particionar por columnas de muy alta cardinalidad como tags individuales, que crea demasiadas particiones diminutas.

¿Qué es el problema de archivos pequeños en un lago de datos Parquet?

La ingesta en flujo tiende a escribir muchos archivos diminutos, uno por microlote, y cada archivo lleva una sobrecarga fija para abrirse y leerse. Cuando una partición sostiene miles de archivos pequeños, esa sobrecarga domina el tiempo de consulta y socava la compresión de Parquet. El arreglo es la compactación, un trabajo periódico que reescribe los archivos pequeños en unos pocos grandes dimensionados en cientos de megabytes.

¿Cómo se salta Parquet los datos que no necesita leer?

Al ser columnar, Parquet lee solo las columnas que una consulta selecciona e ignora el resto. Dentro de cada archivo almacena estadísticas de mínimo y máximo por grupo de filas, así que un filtro de rango puede saltarse grupos de filas enteros que no pueden contener una coincidencia. Ordenar los datos por una columna comúnmente filtrada como la marca de tiempo dentro de cada partición ajusta esos rangos y deja al motor saltarse la mayor parte de un archivo para una consulta estrecha.

Más en Fundamentos de SCADA
Enriquecimiento de datos  •  Administrador de datos  •  Fuente de marca de tiempo  •  Conjunto de datos push de Power BI para SCADA  •  Diccionario de datos  •  Todo en Fundamentos de SCADA →
Capacitación SCADA gratuita para operadores
Merobix University - 70 lecciones en video y 261 preguntas de examen, del primer inicio de sesión a los reportes de cumplimiento (contenido en inglés). Sin llamada de ventas.
Comenzar gratis →