Table of Contents

Date Dimension

A date dimension is a typical case for data generation. Tabulify provides one date dimension that you can use out of the box and modify to your needs.

Steps

Date dimension explained

The date_dim–generator.yml is a generator where::

kind: generator
spec:
  Comment: An example of date dimension generator based on the `date_dim` table of TPCDS
  primary-columns: [ "d_date_sk" ]
  Columns:
    - name: d_date_sk
      comment: A surrogate key
      Type: integer
      data-supplier:
        type: sequence
    - name: d_date
      comment: A business key in date format
      Type: date
      data-supplier:
        type: sequence
        arguments:
          start: 2025-05-13
    - name: d_date_id
      comment: A business key in string
      Type: varchar
      data-supplier:
        type: expression
        arguments:
          column-variable: d_date
          expression: "d_date.toISOString().substring(0,10)"
    - name: d_month_seq
      comment: An ascendant sequence for the month
      Type: integer
      data-supplier:
        type: expression
        arguments:
          column-variable: d_date
          expression: "function pad(number) {if (number < 10) { return '0' + number; } return number; }; d_date.getFullYear()+''+(pad(d_date.getMonth()+1))"
    - name: d_day_name
      comment: The name of the day
      Type: varchar
      data-supplier:
        type: expression
        arguments:
          column-variable: d_date
          expression: "var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; days[d_date.getDay()]"
    - name: d_moy
      comment: the month number in year
      Type: Integer
      data-supplier:
        type: expression
        arguments:
          column-variable: d_date
          expression: "d_date.getMonth()+1"
    - name: d_year
      comment: The year number
      Type: Integer
      data-supplier:
        type: expression
        arguments:
          column-variable: d_date
          expression: "d_date.getFullYear()"


Output

With the data head command and the howto directory connection, you can test your generator and see the data.

tabul data head date_dim--generator.yml@howto
The first 10 rows of the data resource (date_dim@memgen):
d_date_sk   d_date       d_date_id    d_month_seq   d_day_name   d_moy   d_year
---------   ----------   ----------   -----------   ----------   -----   ------
        1   2025-05-12   2025-05-12        202505   Monday           5     2025
        2   2025-05-11   2025-05-11        202505   Sunday           5     2025
        3   2025-05-10   2025-05-10        202505   Saturday         5     2025
        4   2025-05-09   2025-05-09        202505   Friday           5     2025
        5   2025-05-08   2025-05-08        202505   Thursday         5     2025
        6   2025-05-07   2025-05-07        202505   Wednesday        5     2025
        7   2025-05-06   2025-05-06        202505   Tuesday          5     2025
        8   2025-05-05   2025-05-05        202505   Monday           5     2025
        9   2025-05-04   2025-05-04        202505   Sunday           5     2025
       10   2025-05-03   2025-05-03        202505   Saturday         5     2025

Next

If you want to know how to create a CSV from it, check the below page

Tabulify - How to create a CSV File with generated data