Creación del módulo de base de datos

La creación de un módulo de base de datos personalizado solo es necesaria si necesitas definir comportamientos de compilación personalizados o extender la compatibilidad a un nuevo sistema fuente (como Salesforce) que no se admite de forma predeterminada.

Antes de comenzar, asegúrate de que la tabla de origen que planeas procesar exista en el conjunto de datos de la capa sin procesar.

Cuando trabajes en los módulos de la base de datos de SAP, asegúrate de que la tabla DD03L replicada contenga los registros de metadatos necesarios para las tablas que planeas transferir (incluidas las tablas personalizadas o complementarias). Para obtener información detallada sobre los requisitos, consulta Requisitos de metadatos de SAP ERP.

Cuando crees un módulo o espacio de nombres de la base de datos personalizado, te recomendamos que uses un espacio de nombres personalizado dedicado para mejorar la administración del ciclo de vida separando las extensiones y personalizaciones de los artefactos de Cortex Framework.

Creación de un nuevo módulo de base de datos

Para definir el módulo de la base de datos, sigue estos pasos:

  • En el archivo config/config.yaml, agrega la configuración del conjunto de datos de destino a data.targets. Esto preparará un conjunto de datos de BigQuery dedicado en el que se implementarán las tablas de base:
data:
  targets:
    - id: data_foundation_sap_custom_namespace
      # Google Cloud Project ID for the target dataset.
      projectId:  target_project_id 
      # BigQuery dataset ID for the target.
      datasetId: data_foundation_sap_custom_namespace
  • Para definir el módulo de la base de datos, agrega lo siguiente a la sección modules.foundation dentro del archivo config/config.yaml:
data:
  modules:
    foundation:
        # Recommended naming for foundation_module_id:
        # custom_namespace_data_foundation_module_type
      - moduleId: foundation_module_id
        type: cortex.sap
        dataSourceId: sap_raw_s4
        dataTargetId: data_foundation_sap_custom_namespace
        moduleSettings:
          sapVersion: s4
          mandt: "100"
        # Custom table settings file, relative to 'config/' directory
        # If omitted, defaults to "../src/data_modules/custom_namespace/data_foundation/data_foundation_module_type/table_settings.default.yaml"
        # tableSettings: "custom_namespace/data_foundation/data_foundation_module_type/table_settings.yaml"
  • Alternativa: Si usas una tabla de CDC procesada externa como base de datos, ajusta la sección modules.foundation dentro del archivo config/config.yaml con external: true y quita dataTargetId:
data:
  modules:
    foundation:
      - moduleId:  foundation_module_id 
        type: cortex.sap
        dataSourceId: sap_raw_s4
        external: true
        moduleSettings:
          sapVersion: s4
          mandt: "100"
        # Custom table settings file, relative to 'config/' directory
        # If omitted, defaults to "../src/data_modules/custom_namespace/data_foundation/data_foundation_module_type/table_settings.default.yaml"
        # tableSettings: "custom_namespace/data_foundation/data_foundation_module_type/table_settings.yaml"
  • Crea el archivo tableSettings al que se hace referencia en la configuración, y define qué tablas del conjunto de datos de la capa sin procesar se transformarán en la capa de base de datos. Te recomendamos que uses la ruta de acceso predeterminada: src/data_modules/custom_namespace/data_foundation/data_foundation_module_type/table_settings.default.yaml
common:
  - source:
      tableName: custom_sap_table_name
    target:
      tags: [sap, s4, hourly]
      clusterDetails:
        columns: [ pk_column]
      partitionDetails:
        column: fldate
        partitionType: time
        timeGrain: day

Ejemplo de módulo de base de datos

En el siguiente ejemplo, se registra un nuevo módulo de base de datos personalizado que procesa la tabla sflight en el espacio de nombres personalizado sap_bookingdatamodel.

Registra un nuevo módulo de base de datos.

data:
  targets:
    - id: data_foundation_sap_bookingdatamodel
      projectId:  target_project_id
      datasetId: data_foundation_sap_bookingdatamodel
  modules:
    foundation:
      - moduleId:  sap_bookingdatamodel
        type: sap_bookingdatamodel.sap
        dataSourceId: sap_raw_s4
        dataTargetId: data_foundation_sap_bookingdatamodel
        moduleSettings:
          sapVersion: s4
          mandt: "100"

Crea el archivo table_settings.default.yaml

Crea el archivo de configuración de la tabla: src/data_modules/sap_bookingdatamodel/data_foundation/sap/table_settings.default.yaml con este contenido:

common:
  - source:
      tableName: sflight
    target:
      tags: [sap, s4, hourly]
      clusterDetails:
        columns: [carrid, connid]
      partitionDetails:
        column: fldate
        partitionType: time
        timeGrain: day

Dado que la tabla tiene el mismo diseño para los dialectos de SAP ECC y S/4HANA, es un elemento secundario de la sección common:.

Crea un archivo de anotaciones para cada tabla, que se usa para enriquecer los esquemas con metadatos.

En la situación de ejemplo, creamos src/data_modules/sap_bookingdatamodel/data_foundation/sap/annotations/sflight.yaml con el siguiente contenido:

description: "transparent table FLIGHT, part of the Basis Components Module, BC-DWB-TND (Training and Demo)."
fields:
- name: "mandt"
  description: "Client"
- name: "carrid"
  description: "Airline Code"
- name: "connid"
  description: "Flight Connection Number"
- name: "fldate"
  description: "Flight date"
- name: "price"
  description: "Airfare"
- name: "currency"
  description: "Local currency of airline"
- name: "planetype"
  description: "Aircraft Type"
- name: "seatsmax"
  description: "Maximum capacity in economy class"
- name: "seatsocc"
  description: "Occupied seats in economy class"
- name: "paymentsum"
  description: "Total of current bookings"
- name: "seatsmax_b"
  description: "Maximum capacity in business class"
- name: "seatsocc_b"
  description: "Occupied seats in business class"
- name: "seatsmax_f"
  description: "Maximum capacity in first class"
- name: "seatsocc_f"
  description: "Occupied seats in first class"

Para verificar que el módulo de la base de datos personalizada se compile y se implemente correctamente, consulta la sección Verificación en la página de extensibilidad del producto de datos.