¿Por qué Spark SQL considera que el soporte de índices no es importante?
Citando los Spark DataFrames,Conjuntos de datos y manual de SQL:
Un puñado de optimizaciones de Hive aún no están incluidas en Spark. Algunos de estos (como los índices) son menos importantes debido al modelo computacional en memoria de Spark SQL. Otros están asignados para futuras versiones de Spark SQL.
Siendo nuevo en Spark, estoy un poco desconcertado por esto por dos razones:
Spark SQL está diseñado para procesar Big Data, y al menos en mi caso de uso, el tamaño de los datos supera con creces el tamaño de la memoria disponible. Suponiendo que esto no es infrecuente, ¿qué se entiende por "modelo computacional en memoria de Spark SQL"? ¿Se recomienda Spark SQL solo para los casos en que los datos queden en la memoria?
Incluso suponiendo que los datos encajen en la memoria, un análisis completo de un conjunto de datos muy grande puede llevar mucho tiempo. Yo leoeste argumento contra la indexación en la base de datos en memoria, pero no estaba convencido. El ejemplo allí analiza una exploración de una tabla de 10,000,000 de registros, pero eso no es realmente un gran dato. Escanear una tabla con miles de millones de registros puede ocasionar consultas simples del tipo "SELECCIONAR x DONDE y = z" demorarán una eternidad en lugar de regresar de inmediato.
Entiendo que los índices tienen desventajas, como INSERTAR / ACTUALIZAR más lento, requisitos de espacio, etc. Pero en mi caso de uso, primero proceso y cargo un gran lote de datos en Spark SQL, y luego exploro estos datos en conjunto, sin más modificaciones. Spark SQL es útil para el procesamiento distribuido inicial y la carga de los datos, pero la falta de indexación hace que la exploración interactiva sea más lenta y engorrosa de lo que esperaba.
Me pregunto entonces por qué el equipo de Spark SQL considera que los índices no son importantes hasta el punto de que están fuera de su hoja de ruta. ¿Existe un patrón de uso diferente que pueda proporcionar los beneficios de la indexación sin recurrir a la implementación de algo equivalente de forma independiente?