Prefacio a esta pregunta diciendo que soy muy nuevo en el desarrollo de software profesional.
Trabajo en un equipo que toma datos de otros grupos de mi empresa y los convierte en informes que pueden usar los ejecutivos de negocios.
En el proceso de transferencia y análisis de datos, tenemos algunas instrucciones SQL que procesan mucho los datos. Casi todos los SELECT
usos TRIM
, etc. SUBSTR
, en CAST
gran medida para reducir los campos al tamaño y formato adecuados. Además, hay muchos casos especiales que se explican mediante el uso de CASE
declaraciones dentro SELECT
de.
El software del servidor Teradata que utilizamos emite mensajes de error notablemente crípticos. Como resultado, hacemos muchas conjeturas sobre qué datos están rompiendo qué instrucción SQL.
Mi pregunta es: ¿sería una buena idea reducir estas declaraciones SQL algo complejas a una forma menos compleja que omita el procesamiento y el manejo de casos especiales, y en su lugar, esto funciona en un script o programa externo? ¿Tiene esto algún sentido?
fuente
Estoy de acuerdo con la sugerencia ya hecha sobre el uso de una Vista para esta lógica. Solo me gustaría agregar una cosa más sobre las declaraciones de casos. Tenga en cuenta que extraer las declaraciones de Caso del SQL podría tener un impacto significativo en el rendimiento del sistema. Esas declaraciones de casos podrían estar reduciendo significativamente la cantidad de datos devueltos. Ejecutar el filtrado de casos en la capa de la base de datos a través de sentencias SQL es normalmente mucho más eficiente que extraer todos los datos y realizar el filtrado en un script o programa externo. Si está considerando esto, le recomiendo hacer algunos análisis de datos y pruebas de rendimiento antes de seguir adelante con esa solución.
fuente
Agregar un proceso externo generalmente solo hace que el sistema sea más difícil de depurar, pero realmente depende de la situación. Usa tu juicio . Considere el tiempo requerido para desarrollar / mantener proyectos fuera de banda.
¿Ya estás usando un proceso ETL ? No tengo experiencia con Teradata, pero separar sus pasos proporciona una visión mucho más clara de lo que está sucediendo. Aquí hay una descripción general de 2 segundos:
Esto generalmente proporciona suficiente información para administrar con éxito este tipo de sistema.
fuente
Me inclinaría a dejar los bits CASE en su lugar, ya que están relacionados con la lógica real de producir los datos para que alguien / cosa los consuma. Por lo tanto, eliminarlos significa que debe enviar un conjunto de datos más grande y el cliente debe procesarlo: ahora ha dividido la "lógica" de su informe en dos capas separadas y esto no es bueno.
Pero dejaría como un ladrillo caliente cualquier formato de su código (a menos que sea específicamente parte de predicados JOIN, etc.) porque formatearlo es el trabajo del consumidor ... así que sea cual sea la herramienta de informes que usen, ya sea Excel, Crystal, etc. es bueno formateando cosas en la localización correcta y todo ese jazz. Deje que el cliente haga lo que es bueno (mostrar cosas en bonitos colores) y deje que el servidor se concentre en lo que hace mejor: procesar datos.
fuente