es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CDAP – incrustando la lógica del registro de tiempo de inicio dentro de un pipeline

Tengo un pipeline que hace una solicitud a una API. Y me gustaría parametrizar las marcas de tiempo de inicio y fin en la URL dentro del complemento http.

La marca de tiempo de fin es -2 horas desde la ejecución, por lo que sería fácil usar una macro con la función logicalStartTime sin especificar un formato de fecha y con un delta de -2 horas, y luego obtener la marca de tiempo correspondiente.

Pero para la marca de tiempo de inicio es necesario usar el primer día del mes/año actual a las 00:00. Y eso no es tan sencillo porque sería necesario utilizar funciones adicionales que actualmente no están permitidas dentro de una macro (https://cdap.atlassian.net/wiki/spaces/DOCS/pages/1188036697/Macros+and+macro+functions#Macro-functions)

He intentado colocar ese argumento de tiempo de ejecución en el contexto a través de un complemento de “transformación de Python”, pero creo que no está diseñado para ejecutarse como el primero en el pipeline (para que la marca de tiempo esté disponible para el complemento http).

Supongo que los argumentos podrían ser proporcionados a través de un programador como airflow/cloud composer o a través del complemento “arg setter”. Pero para mi comprensión, tiene más sentido colocar esa lógica de marca de tiempo de inicio dentro del pipeline.

¿Alguien tiene alguna idea de cómo sería posible hacerlo sin necesidad de desarrollar un nuevo complemento? ¡Gracias por sus comentarios!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución sería utilizar el plugin “JavaScript Evaluator” para calcular el inicio de la marca de tiempo basado en el mes/año actual y convertirlo a una marca de tiempo Unix. Luego, podrías establecer la salida de ese plugin como un argumento de la canalización y pasarlo al plugin http como un argumento en tiempo de ejecución.

    Aquí tienes un ejemplo de código para el plugin “JavaScript Evaluator”:

    // obtener el año y mes actual
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth() + 1; // getMonth() devuelve un número entre 0 y 11, así que le sumamos 1
    
    // crear una cadena de fecha de inicio en formato "aaaa-mm-ddT00:00:00Z"
    var startDateString = year + "-" + (month < 10 ? '0' : '') + month + "-01T00:00:00Z";
    
    // convertir la cadena de fecha de inicio a marca de tiempo Unix
    var startDate = Date.parse(startDateString) / 1000;
    
    // establecer el argumento de canalización "start-timestamp"
    $['time-arguments']="start-timestamp=" + startDate;
    

    En este código, primero obtenemos el año y mes actual utilizando la función Date(). Luego, creamos una cadena de fecha de inicio en el formato “aaaa-mm-ddT00:00:00Z” utilizando el año y mes, y establecemos el día en 01. Luego convertimos esta cadena de fecha de inicio a una marca de tiempo Unix utilizando la función Date.parse() y la dividimos por 1000 para obtener el número de segundos desde el 1 de enero de 1970.

    Finalmente, establecemos el argumento de la canalización “start-timestamp” con la marca de tiempo Unix calculada y lo pasamos al plugin http como un argumento en tiempo de ejecución utilizando la sintaxis $['time-arguments'].

    ¡Espero que esto te ayude!

Comments are closed.