Формат даты загрузки оператора Redshift COPY с двухзначным годом (мм / дд / гг)
У меня есть файл источника данных, который я загружаю в Redshift с помощью команды COPY.
В файле есть несколько столбцов с датой в двухзначном формате года (я знаю, здесь я имею дело с динозаврами).
Redshift распознает формат даты, но проблема в том, что файл имеет такие значения, как:
06/01/79
что на самом деле означает:
2079-06-01
однако Redshift интерпретирует это как:
1979-06-01
Есть ли способ сообщить Redshift, какой у меня порог для двузначных форматов даты. Например, значения ниже 90 следует интерпретировать как 20XX.
Параметр DATEFORMAT в команде COPY не имеет такой опции.
1 ответ
-- Begin transaction
BEGIN TRANS;
-- Create a temp table
CREATE TEMP TABLE my_temp (dtm_str CHAR(8));
-- Load your data into the temp table
COPY my_temp FROM s3://my_bucket … ;
-- Insert your data into the final table
INSERT INTO final_table
-- Grab the first 6 chars and concatenate to the following
SELECT CAST(LEFT(dtm_str,6)||
-- Convert the last 2 chars to and in and compare to your threshold
CASE WHEN CAST(RIGHT(dtm_str,2) AS INT) < 85
-- Add either 1900 or 2000 to the INT, convert to CHAR
THEN CAST(CAST(RIGHT(dtm_str,2) AS INT) + 2000 AS CHAR(4))
ELSE CAST(CAST(RIGHT(dtm_str,2) AS INT) + 1900 AS CHAR(4)) END
-- Convert the final CHAR to a DATE
AS DATE) new_dtm
FROM my_temp;
COMMIT;