Skip to content

Scheduling Examples

This section shows how to schedule exported SQL using Databricks notebooks.

Prerequisites

Before creating the scheduled notebook, you need to export the SQL from your FeatureByte deployment. See SQL Export for detailed instructions:

  1. Go to your deployment in the FeatureByte UI
  2. Click the SQL tab
  3. Click Generate SQL to create the SQL template
  4. Copy the generated SQL code

Creating a Databricks Notebook

Here's a simple SQL notebook that runs your exported SQL daily. This will replace the feature table content on each run:

-- Databricks notebook source
%sql

CREATE OR REPLACE TABLE daily_customer_features
USING DELTA
AS
WITH DEPLOYMENT_REQUEST_TABLE AS (
  SELECT
    REQ."SK_ID_CURR",
    CURRENT_TIMESTAMP() AS POINT_IN_TIME
  FROM (
    SELECT DISTINCT
      "SK_ID_CURR" AS "SK_ID_CURR"
    FROM (
      SELECT
        "SK_ID_CURR" AS "SK_ID_CURR",
        "ClientID" AS "ClientID",
        "CONTRACT_TYPE" AS "CONTRACT_TYPE",
        "AMT_INCOME_TOTAL" AS "AMT_INCOME_TOTAL",
        "AMT_CREDIT" AS "AMT_CREDIT",
        "AMT_ANNUITY" AS "AMT_ANNUITY",
        "AMT_GOODS_PRICE" AS "AMT_GOODS_PRICE",
        "TYPE_SUITE" AS "TYPE_SUITE",
        "REGION_POPULATION_RELATIVE" AS "REGION_POPULATION_RELATIVE",
        "application_time" AS "application_time",
        "DAYS_EMPLOYED" AS "DAYS_EMPLOYED",
        "DAYS_REGISTRATION" AS "DAYS_REGISTRATION",
        "DAYS_ID_PUBLISH" AS "DAYS_ID_PUBLISH",
        "OWN_CAR_AGE" AS "OWN_CAR_AGE",
        "FLAG_MOBIL" AS "FLAG_MOBIL",
        "FLAG_EMP_PHONE" AS "FLAG_EMP_PHONE",
        "FLAG_WORK_PHONE" AS "FLAG_WORK_PHONE",
        "FLAG_CONT_MOBILE" AS "FLAG_CONT_MOBILE",
        "FLAG_PHONE" AS "FLAG_PHONE",
        "FLAG_EMAIL" AS "FLAG_EMAIL",
        "REGION_RATING_CLIENT" AS "REGION_RATING_CLIENT",
        "REGION_RATING_CLIENT_W_CITY" AS "REGION_RATING_CLIENT_W_CITY",
        "WEEKDAY_APPR_PROCESS_START" AS "WEEKDAY_APPR_PROCESS_START",
        "HOUR_APPR_PROCESS_START" AS "HOUR_APPR_PROCESS_START",
        "REG_REGION_NOT_LIVE_REGION" AS "REG_REGION_NOT_LIVE_REGION",
        "REG_REGION_NOT_WORK_REGION" AS "REG_REGION_NOT_WORK_REGION",
        "LIVE_REGION_NOT_WORK_REGION" AS "LIVE_REGION_NOT_WORK_REGION",
        "REG_CITY_NOT_LIVE_CITY" AS "REG_CITY_NOT_LIVE_CITY",
        "REG_CITY_NOT_WORK_CITY" AS "REG_CITY_NOT_WORK_CITY",
        "LIVE_CITY_NOT_WORK_CITY" AS "LIVE_CITY_NOT_WORK_CITY",
        "EXT_SOURCE_1" AS "EXT_SOURCE_1",
        "EXT_SOURCE_2" AS "EXT_SOURCE_2",
        "EXT_SOURCE_3" AS "EXT_SOURCE_3",
        "APARTMENTS_AVG" AS "APARTMENTS_AVG",
        "BASEMENTAREA_AVG" AS "BASEMENTAREA_AVG",
        "YEARS_BEGINEXPLUATATION_AVG" AS "YEARS_BEGINEXPLUATATION_AVG",
        "YEARS_BUILD_AVG" AS "YEARS_BUILD_AVG",
        "COMMONAREA_AVG" AS "COMMONAREA_AVG",
        "ELEVATORS_AVG" AS "ELEVATORS_AVG",
        "ENTRANCES_AVG" AS "ENTRANCES_AVG",
        "FLOORSMAX_AVG" AS "FLOORSMAX_AVG",
        "FLOORSMIN_AVG" AS "FLOORSMIN_AVG",
        "LANDAREA_AVG" AS "LANDAREA_AVG",
        "LIVINGAPARTMENTS_AVG" AS "LIVINGAPARTMENTS_AVG",
        "LIVINGAREA_AVG" AS "LIVINGAREA_AVG",
        "NONLIVINGAPARTMENTS_AVG" AS "NONLIVINGAPARTMENTS_AVG",
        "NONLIVINGAREA_AVG" AS "NONLIVINGAREA_AVG",
        "APARTMENTS_MODE" AS "APARTMENTS_MODE",
        "BASEMENTAREA_MODE" AS "BASEMENTAREA_MODE",
        "YEARS_BEGINEXPLUATATION_MODE" AS "YEARS_BEGINEXPLUATATION_MODE",
        "YEARS_BUILD_MODE" AS "YEARS_BUILD_MODE",
        "COMMONAREA_MODE" AS "COMMONAREA_MODE",
        "ELEVATORS_MODE" AS "ELEVATORS_MODE",
        "ENTRANCES_MODE" AS "ENTRANCES_MODE",
        "FLOORSMAX_MODE" AS "FLOORSMAX_MODE",
        "FLOORSMIN_MODE" AS "FLOORSMIN_MODE",
        "LANDAREA_MODE" AS "LANDAREA_MODE",
        "LIVINGAPARTMENTS_MODE" AS "LIVINGAPARTMENTS_MODE",
        "LIVINGAREA_MODE" AS "LIVINGAREA_MODE",
        "NONLIVINGAPARTMENTS_MODE" AS "NONLIVINGAPARTMENTS_MODE",
        "NONLIVINGAREA_MODE" AS "NONLIVINGAREA_MODE",
        "APARTMENTS_MEDI" AS "APARTMENTS_MEDI",
        "BASEMENTAREA_MEDI" AS "BASEMENTAREA_MEDI",
        "YEARS_BEGINEXPLUATATION_MEDI" AS "YEARS_BEGINEXPLUATATION_MEDI",
        "YEARS_BUILD_MEDI" AS "YEARS_BUILD_MEDI",
        "COMMONAREA_MEDI" AS "COMMONAREA_MEDI",
        "ELEVATORS_MEDI" AS "ELEVATORS_MEDI",
        "ENTRANCES_MEDI" AS "ENTRANCES_MEDI",
        "FLOORSMAX_MEDI" AS "FLOORSMAX_MEDI",
        "FLOORSMIN_MEDI" AS "FLOORSMIN_MEDI",
        "LANDAREA_MEDI" AS "LANDAREA_MEDI",
        "LIVINGAPARTMENTS_MEDI" AS "LIVINGAPARTMENTS_MEDI",
        "LIVINGAREA_MEDI" AS "LIVINGAREA_MEDI",
        "NONLIVINGAPARTMENTS_MEDI" AS "NONLIVINGAPARTMENTS_MEDI",
        "NONLIVINGAREA_MEDI" AS "NONLIVINGAREA_MEDI",
        "FONDKAPREMONT_MODE" AS "FONDKAPREMONT_MODE",
        "HOUSETYPE_MODE" AS "HOUSETYPE_MODE",
        "TOTALAREA_MODE" AS "TOTALAREA_MODE",
        "WALLSMATERIAL_MODE" AS "WALLSMATERIAL_MODE",
        "EMERGENCYSTATE_MODE" AS "EMERGENCYSTATE_MODE",
        "OBS_30_CNT_SOCIAL_CIRCLE" AS "OBS_30_CNT_SOCIAL_CIRCLE",
        "DEF_30_CNT_SOCIAL_CIRCLE" AS "DEF_30_CNT_SOCIAL_CIRCLE",
        "OBS_60_CNT_SOCIAL_CIRCLE" AS "OBS_60_CNT_SOCIAL_CIRCLE",
        "DEF_60_CNT_SOCIAL_CIRCLE" AS "DEF_60_CNT_SOCIAL_CIRCLE",
        "DAYS_LAST_PHONE_CHANGE" AS "DAYS_LAST_PHONE_CHANGE",
        "FLAG_DOCUMENT_2" AS "FLAG_DOCUMENT_2",
        "FLAG_DOCUMENT_3" AS "FLAG_DOCUMENT_3",
        "FLAG_DOCUMENT_4" AS "FLAG_DOCUMENT_4",
        "FLAG_DOCUMENT_5" AS "FLAG_DOCUMENT_5",
        "FLAG_DOCUMENT_6" AS "FLAG_DOCUMENT_6",
        "FLAG_DOCUMENT_7" AS "FLAG_DOCUMENT_7",
        "FLAG_DOCUMENT_8" AS "FLAG_DOCUMENT_8",
        "FLAG_DOCUMENT_9" AS "FLAG_DOCUMENT_9",
        "FLAG_DOCUMENT_10" AS "FLAG_DOCUMENT_10",
        "FLAG_DOCUMENT_11" AS "FLAG_DOCUMENT_11",
        "FLAG_DOCUMENT_12" AS "FLAG_DOCUMENT_12",
        "FLAG_DOCUMENT_13" AS "FLAG_DOCUMENT_13",
        "FLAG_DOCUMENT_14" AS "FLAG_DOCUMENT_14",
        "FLAG_DOCUMENT_15" AS "FLAG_DOCUMENT_15",
        "FLAG_DOCUMENT_16" AS "FLAG_DOCUMENT_16",
        "FLAG_DOCUMENT_17" AS "FLAG_DOCUMENT_17",
        "FLAG_DOCUMENT_18" AS "FLAG_DOCUMENT_18",
        "FLAG_DOCUMENT_19" AS "FLAG_DOCUMENT_19",
        "FLAG_DOCUMENT_20" AS "FLAG_DOCUMENT_20",
        "FLAG_DOCUMENT_21" AS "FLAG_DOCUMENT_21",
        "AMT_REQ_CREDIT_BUREAU_HOUR" AS "AMT_REQ_CREDIT_BUREAU_HOUR",
        "AMT_REQ_CREDIT_BUREAU_DAY" AS "AMT_REQ_CREDIT_BUREAU_DAY",
        "AMT_REQ_CREDIT_BUREAU_WEEK" AS "AMT_REQ_CREDIT_BUREAU_WEEK",
        "AMT_REQ_CREDIT_BUREAU_MON" AS "AMT_REQ_CREDIT_BUREAU_MON",
        "AMT_REQ_CREDIT_BUREAU_QRT" AS "AMT_REQ_CREDIT_BUREAU_QRT",
        "AMT_REQ_CREDIT_BUREAU_YEAR" AS "AMT_REQ_CREDIT_BUREAU_YEAR",
        (
          "AMT_GOODS_PRICE" / NULLIF("AMT_CREDIT", 0)
        ) AS "AMT_GOODS_PRICE To AMT_CREDIT"
      FROM "DEMO_DATASETS"."CREDIT_DEFAULT"."NEW_APPLICATION"
    )
    WHERE
      NOT "SK_ID_CURR" IS NULL
  ) AS REQ
), _FB_AGGREGATED AS (
  SELECT
    REQ."SK_ID_CURR",
    REQ."POINT_IN_TIME",
    "T0"."_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1" AS "_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1"
  FROM DEPLOYMENT_REQUEST_TABLE AS REQ
  LEFT JOIN (
    SELECT
      "SK_ID_CURR",
      ANY_VALUE("_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1") AS "_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1"
    FROM (
      SELECT
        "SK_ID_CURR" AS "SK_ID_CURR",
        "AMT_GOODS_PRICE To AMT_CREDIT" AS "_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1"
      FROM (
        SELECT
          "SK_ID_CURR" AS "SK_ID_CURR",
          "ClientID" AS "ClientID",
          "CONTRACT_TYPE" AS "CONTRACT_TYPE",
          "AMT_INCOME_TOTAL" AS "AMT_INCOME_TOTAL",
          "AMT_CREDIT" AS "AMT_CREDIT",
          "AMT_ANNUITY" AS "AMT_ANNUITY",
          "AMT_GOODS_PRICE" AS "AMT_GOODS_PRICE",
          "TYPE_SUITE" AS "TYPE_SUITE",
          "REGION_POPULATION_RELATIVE" AS "REGION_POPULATION_RELATIVE",
          "application_time" AS "application_time",
          "DAYS_EMPLOYED" AS "DAYS_EMPLOYED",
          "DAYS_REGISTRATION" AS "DAYS_REGISTRATION",
          "DAYS_ID_PUBLISH" AS "DAYS_ID_PUBLISH",
          "OWN_CAR_AGE" AS "OWN_CAR_AGE",
          "FLAG_MOBIL" AS "FLAG_MOBIL",
          "FLAG_EMP_PHONE" AS "FLAG_EMP_PHONE",
          "FLAG_WORK_PHONE" AS "FLAG_WORK_PHONE",
          "FLAG_CONT_MOBILE" AS "FLAG_CONT_MOBILE",
          "FLAG_PHONE" AS "FLAG_PHONE",
          "FLAG_EMAIL" AS "FLAG_EMAIL",
          "REGION_RATING_CLIENT" AS "REGION_RATING_CLIENT",
          "REGION_RATING_CLIENT_W_CITY" AS "REGION_RATING_CLIENT_W_CITY",
          "WEEKDAY_APPR_PROCESS_START" AS "WEEKDAY_APPR_PROCESS_START",
          "HOUR_APPR_PROCESS_START" AS "HOUR_APPR_PROCESS_START",
          "REG_REGION_NOT_LIVE_REGION" AS "REG_REGION_NOT_LIVE_REGION",
          "REG_REGION_NOT_WORK_REGION" AS "REG_REGION_NOT_WORK_REGION",
          "LIVE_REGION_NOT_WORK_REGION" AS "LIVE_REGION_NOT_WORK_REGION",
          "REG_CITY_NOT_LIVE_CITY" AS "REG_CITY_NOT_LIVE_CITY",
          "REG_CITY_NOT_WORK_CITY" AS "REG_CITY_NOT_WORK_CITY",
          "LIVE_CITY_NOT_WORK_CITY" AS "LIVE_CITY_NOT_WORK_CITY",
          "EXT_SOURCE_1" AS "EXT_SOURCE_1",
          "EXT_SOURCE_2" AS "EXT_SOURCE_2",
          "EXT_SOURCE_3" AS "EXT_SOURCE_3",
          "APARTMENTS_AVG" AS "APARTMENTS_AVG",
          "BASEMENTAREA_AVG" AS "BASEMENTAREA_AVG",
          "YEARS_BEGINEXPLUATATION_AVG" AS "YEARS_BEGINEXPLUATATION_AVG",
          "YEARS_BUILD_AVG" AS "YEARS_BUILD_AVG",
          "COMMONAREA_AVG" AS "COMMONAREA_AVG",
          "ELEVATORS_AVG" AS "ELEVATORS_AVG",
          "ENTRANCES_AVG" AS "ENTRANCES_AVG",
          "FLOORSMAX_AVG" AS "FLOORSMAX_AVG",
          "FLOORSMIN_AVG" AS "FLOORSMIN_AVG",
          "LANDAREA_AVG" AS "LANDAREA_AVG",
          "LIVINGAPARTMENTS_AVG" AS "LIVINGAPARTMENTS_AVG",
          "LIVINGAREA_AVG" AS "LIVINGAREA_AVG",
          "NONLIVINGAPARTMENTS_AVG" AS "NONLIVINGAPARTMENTS_AVG",
          "NONLIVINGAREA_AVG" AS "NONLIVINGAREA_AVG",
          "APARTMENTS_MODE" AS "APARTMENTS_MODE",
          "BASEMENTAREA_MODE" AS "BASEMENTAREA_MODE",
          "YEARS_BEGINEXPLUATATION_MODE" AS "YEARS_BEGINEXPLUATATION_MODE",
          "YEARS_BUILD_MODE" AS "YEARS_BUILD_MODE",
          "COMMONAREA_MODE" AS "COMMONAREA_MODE",
          "ELEVATORS_MODE" AS "ELEVATORS_MODE",
          "ENTRANCES_MODE" AS "ENTRANCES_MODE",
          "FLOORSMAX_MODE" AS "FLOORSMAX_MODE",
          "FLOORSMIN_MODE" AS "FLOORSMIN_MODE",
          "LANDAREA_MODE" AS "LANDAREA_MODE",
          "LIVINGAPARTMENTS_MODE" AS "LIVINGAPARTMENTS_MODE",
          "LIVINGAREA_MODE" AS "LIVINGAREA_MODE",
          "NONLIVINGAPARTMENTS_MODE" AS "NONLIVINGAPARTMENTS_MODE",
          "NONLIVINGAREA_MODE" AS "NONLIVINGAREA_MODE",
          "APARTMENTS_MEDI" AS "APARTMENTS_MEDI",
          "BASEMENTAREA_MEDI" AS "BASEMENTAREA_MEDI",
          "YEARS_BEGINEXPLUATATION_MEDI" AS "YEARS_BEGINEXPLUATATION_MEDI",
          "YEARS_BUILD_MEDI" AS "YEARS_BUILD_MEDI",
          "COMMONAREA_MEDI" AS "COMMONAREA_MEDI",
          "ELEVATORS_MEDI" AS "ELEVATORS_MEDI",
          "ENTRANCES_MEDI" AS "ENTRANCES_MEDI",
          "FLOORSMAX_MEDI" AS "FLOORSMAX_MEDI",
          "FLOORSMIN_MEDI" AS "FLOORSMIN_MEDI",
          "LANDAREA_MEDI" AS "LANDAREA_MEDI",
          "LIVINGAPARTMENTS_MEDI" AS "LIVINGAPARTMENTS_MEDI",
          "LIVINGAREA_MEDI" AS "LIVINGAREA_MEDI",
          "NONLIVINGAPARTMENTS_MEDI" AS "NONLIVINGAPARTMENTS_MEDI",
          "NONLIVINGAREA_MEDI" AS "NONLIVINGAREA_MEDI",
          "FONDKAPREMONT_MODE" AS "FONDKAPREMONT_MODE",
          "HOUSETYPE_MODE" AS "HOUSETYPE_MODE",
          "TOTALAREA_MODE" AS "TOTALAREA_MODE",
          "WALLSMATERIAL_MODE" AS "WALLSMATERIAL_MODE",
          "EMERGENCYSTATE_MODE" AS "EMERGENCYSTATE_MODE",
          "OBS_30_CNT_SOCIAL_CIRCLE" AS "OBS_30_CNT_SOCIAL_CIRCLE",
          "DEF_30_CNT_SOCIAL_CIRCLE" AS "DEF_30_CNT_SOCIAL_CIRCLE",
          "OBS_60_CNT_SOCIAL_CIRCLE" AS "OBS_60_CNT_SOCIAL_CIRCLE",
          "DEF_60_CNT_SOCIAL_CIRCLE" AS "DEF_60_CNT_SOCIAL_CIRCLE",
          "DAYS_LAST_PHONE_CHANGE" AS "DAYS_LAST_PHONE_CHANGE",
          "FLAG_DOCUMENT_2" AS "FLAG_DOCUMENT_2",
          "FLAG_DOCUMENT_3" AS "FLAG_DOCUMENT_3",
          "FLAG_DOCUMENT_4" AS "FLAG_DOCUMENT_4",
          "FLAG_DOCUMENT_5" AS "FLAG_DOCUMENT_5",
          "FLAG_DOCUMENT_6" AS "FLAG_DOCUMENT_6",
          "FLAG_DOCUMENT_7" AS "FLAG_DOCUMENT_7",
          "FLAG_DOCUMENT_8" AS "FLAG_DOCUMENT_8",
          "FLAG_DOCUMENT_9" AS "FLAG_DOCUMENT_9",
          "FLAG_DOCUMENT_10" AS "FLAG_DOCUMENT_10",
          "FLAG_DOCUMENT_11" AS "FLAG_DOCUMENT_11",
          "FLAG_DOCUMENT_12" AS "FLAG_DOCUMENT_12",
          "FLAG_DOCUMENT_13" AS "FLAG_DOCUMENT_13",
          "FLAG_DOCUMENT_14" AS "FLAG_DOCUMENT_14",
          "FLAG_DOCUMENT_15" AS "FLAG_DOCUMENT_15",
          "FLAG_DOCUMENT_16" AS "FLAG_DOCUMENT_16",
          "FLAG_DOCUMENT_17" AS "FLAG_DOCUMENT_17",
          "FLAG_DOCUMENT_18" AS "FLAG_DOCUMENT_18",
          "FLAG_DOCUMENT_19" AS "FLAG_DOCUMENT_19",
          "FLAG_DOCUMENT_20" AS "FLAG_DOCUMENT_20",
          "FLAG_DOCUMENT_21" AS "FLAG_DOCUMENT_21",
          "AMT_REQ_CREDIT_BUREAU_HOUR" AS "AMT_REQ_CREDIT_BUREAU_HOUR",
          "AMT_REQ_CREDIT_BUREAU_DAY" AS "AMT_REQ_CREDIT_BUREAU_DAY",
          "AMT_REQ_CREDIT_BUREAU_WEEK" AS "AMT_REQ_CREDIT_BUREAU_WEEK",
          "AMT_REQ_CREDIT_BUREAU_MON" AS "AMT_REQ_CREDIT_BUREAU_MON",
          "AMT_REQ_CREDIT_BUREAU_QRT" AS "AMT_REQ_CREDIT_BUREAU_QRT",
          "AMT_REQ_CREDIT_BUREAU_YEAR" AS "AMT_REQ_CREDIT_BUREAU_YEAR",
          (
            "AMT_GOODS_PRICE" / NULLIF("AMT_CREDIT", 0)
          ) AS "AMT_GOODS_PRICE To AMT_CREDIT"
        FROM "DEMO_DATASETS"."CREDIT_DEFAULT"."NEW_APPLICATION"
      )
    )
    GROUP BY
      "SK_ID_CURR"
  ) AS T0
    ON REQ."SK_ID_CURR" = T0."SK_ID_CURR"
)
SELECT
  AGG."SK_ID_CURR",
  CAST("_fb_internal_SK_ID_CURR_lookup_AMT_GOODS_PRICE To AMT_CREDIT_assign_1" AS DOUBLE) AS "NEW_APPLICATION_AMT_GOODS_PRICE_To_AMT_CREDIT",
  CURRENT_TIMESTAMP() AS "POINT_IN_TIME"
FROM _FB_AGGREGATED AS AGG

Scheduling the Notebook

To schedule this notebook in Databricks:

  1. Save the notebook to your Databricks workspace
  2. Go to Jobs -> Create Job
  3. Select your notebook as the task
  4. Set schedule (e.g., "Every 1 day")
  5. Configure cluster settings as needed

Databricks Job Scheduling

Next Steps

See the Complete Workflow for an end-to-end example including model training and batch scoring.