Как мне создать простую таблицу измерений дня для звездообразной схемы хранилища данных с postgresql? - PullRequest
0 голосов
/ 28 февраля 2020

Как бы я go о создании и заполнении простой таблицы измерений DAY для звездной схемы в postgreSQL? Он предназначен для ознакомления с хранилищем данных и поэтому имеет только несколько полей, но большинство примеров в Интернете очень сложны и кажутся очень сложными для новичка. Это не для задания - это для обучения, потому что я пытаюсь создать свою собственную простую звездную схему с таблицей фактов, чтобы я мог освоиться с ней.

Может кто-нибудь дать мне простой пример как бы я создал таблицу с несколькими полями (day_key в качестве суррогатного ключа, строка, описывающая день, и некоторые целочисленные значения, представляющие, например, дни или месяцы), чтобы я мог хотя бы начать понимать?

1 Ответ

0 голосов
/ 28 февраля 2020

Очень простая таблица измерений DAY, которая должна работать для большинства версий PostgreSQL (я использую 10.5). Это просто то, что должно помочь новичку в хранилище данных создать базовое c дневное измерение для использования при начале работы.

Создание дневной таблицы

CREATE TABLE day (
    day_key SERIAL PRIMARY KEY, -- SERIAL is an integer that will auto-increment as new rows added
    description VARCHAR(40), -- a 'string' for a description
    full_date DATE, -- an actual date type
    month_number INTEGER,
    month_name VARCHAR(40),
    year INTEGER
);

Вставка строк в Дневное измерение

INSERT INTO day(description, full_date, month_number, month_name, year)
SELECT 
to_char(days.d, 'FMMonth DD, YYYY'), 
days.d::DATE, 
to_char(days.d, 'MM')::integer, 
to_char(days.d, 'FMMonth'), 
to_char(days.d, 'YYYY')::integer 
from (
    SELECT generate_series(
        ('2019-01-01')::date, -- 'start' date
        ('2019-12-31')::date, -- 'end' date
        interval '1 day'  -- one for each day between the start and day
        )) as days(d);

Результат Sample output data for simple DAY dimension

Примечания :

  • В основном вы используете только строки, сгенерированные вложенным SELECT generate_series(... для вставки в таблицу Day.
  • Я дважды использовал FM выше, чтобы удалить некоторые из пробелов, автоматически генерируемых в некоторых из этих форматов даты.
  • Я бы рекомендовал удалить строку INSERT INTO day(...) в первый раз Вы делаете это только для того, чтобы убедиться, что формат каждого столбца соответствует тому, что вам нужно, прежде чем вставить его в таблицу.

Это то, что я видел обычно используемым - проверьте, есть ли в документации PostgreSQL более подробные и полезные примеры других способов форматирования типов даты и получения всех видов. полезных размеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...