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.

Forzar la hora en formato UTC en la condición de JOIN en Snowflake

Tengo una configuración en la que tenemos:

  1. Una tabla de destino con una columna de tipo TIMESTAMP_LTZ (consumption_date). Incluye la zona horaria de +02:00.
  2. Una vista (landing_view) que lee de la tabla de destino.
  3. Una vista (raw_data) que lee de una tabla que tiene un campo de tipo TIMESTAMP_NTZ (SOURCE_TIMESTAMP), pero el valor en sí está en hora UTC.

Tengo que unir los datos de la vista landing_view con los datos de raw_data utilizando la consumption_date y SOURCE_TIMESTAMP.

Mi problema es que el comando convert_timezone parece no afectar en absoluto la cláusula de unión, en su lugar, la unión se realiza utilizando la hora local incluida en el tipo LTZ (+02:00).

Si uso convert_timezone en un select, funciona muy bien, pero para la unión no lo hace.

¿Existe alguna forma de indicarle a Snowflake que utilice UTC en la unión?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Snowflake Cloud Data Platform y en el desplazamiento de la zona horaria UTC, si la función convert_timezone no parece afectar la cláusula de unión en un escenario en el que la unión se realiza utilizando la hora local incluida en el tipo LTZ en lugar de UTC, se puede aplicar el siguiente método alternativo para indicar a Snowflake que utilice UTC en la unión:

    SELECT l.ID, l.consumption_date, l.RUN_TIME, r.DISPLAY_NAME, r.source_timestamp, r.value_as_double
    FROM "raw_data" r
    JOIN "landing_view" l
    ON r.SOURCE_TIMESTAMP >= DATEADD(second,120, convert_timezone('UTC',to_timestamp_tz(l.consumption_date) AT TIME ZONE 'UTC'))
      and r.SOURCE_TIMESTAMP < DATEADD(second,1000, convert_timezone('UTC',to_timestamp_tz(l.consumption_date) AT TIME ZONE 'UTC'))
    

    En este método alternativo, se sigue utilizando la función convert_timezone, pero la columna consumption_date de tipo TIMESTAMP LTZ se convierte primero en un tipo TIMESTAMP TZ mediante la función ‘AT TIME ZONE’ y luego se convierte al formato UTC utilizando la función convert_timezone para realizar la unión.

Comments are closed.