Skip to content

Example datapackage

The following example shows a complete datapackage.yaml configuration.

Note that dpetl_extract and dpetl_transform are defined per resource, while dpetl_load is defined at the package level.

name: datapackage_example

resources:
  # API extraction
  - name: invoices
    path: data/invoices.csv
    sources:   # Request settings
      - method: get   # required (e.g. get, post)
        path: https://api.example.com   # required
        timeout: 30   # optional (Defaults to 30 seconds)
        params: {}   # optional
        headers: {}   # optional
        stream: false   # optional (Defaults to false)
    dpetl_extract:
      mode: api

  # CLI extraction
  - name: external_data
    path: data/external_data.csv
    dpetl_extract:
      mode: cli
      arguments:   # required. List of shell commands to run sequentially
        - curl -o data/external_data.csv https://api.example.com/export
        - python scripts/clean_data.py data/external_data.csv

  # Email extraction
  - name: payroll_from_email
    path: data/payroll.xlsx
    dpetl_extract:
      mode: email
      mailbox: INBOX   # optional (Defaults to INBOX)
      criteria:   # optional
        subject: "Payroll Report"   # optional (Defaults to resource name. See also the flag --add-package-name)
        from_: "finance@example.com"   # optional
        date_gte: 2024-01-01   # optional (See also the flag --today-email)

  # Column renaming
  - name: customers
    path: data/customers.csv
    schema:
      fields:
        - name: Name
          type: string
          target: customer_name
        - name: Region
          type: string
          target: customer_region
    dpetl_transform:
      format: csv.gz   # optional (Defaults to csv.gz)
      path: data/processed   # optional (Defaults to data)
      encoding: utf-8   # optional (Defaults to utf-8)
      delimiter: ';'   # optional (Defaults to ,)

  # Anonymization of sensitive fields
  - name: employees
    path: data/employees.csv
    schema:
      fields:
        - name: employee_name
          type: string
          target: name_hashed
          anonymize:
            method: '[#***]'
        - name: tax_id
          type: string
          target: tax_id_encrypted
          anonymize:
            method: aes_siv
            context: department
            annotation: TAX:11
            filter: 'department == "Finance"'
        - name: phone
          type: string
          anonymize:
            method: '[###-***-####]'

  # External command
  - name: payroll
    path: data/payroll.csv
    dpetl_transform:
      cli:
        arguments:   # required. List of shell commands to run sequentially
          - python scripts/clean_payroll.py
        path: data/processed   # optional (Defaults to dpetl_transform.path)
        pre_process: true   # optional (Defaults to true)
        stdin: true   # optional (Defaults to false)

# Package level. Passed to every cli command as an environment variable
custom:
  - year: 2027
    region: south

# Load configuration (defined once per package)
dpetl_load:
  owner: github-username
  repo: my-data-repo
  level: user   # optional (Defaults to user)
  visibility: private   # optional (Defaults to private)