Dela via


Databricks Asset Bundle-projektmallar

Databricks-tillgångspaket beskriver Databricks-resurser som jobb, pipelines och notebook-filer som källfiler, låter dig inkludera metadata tillsammans med dessa källfiler för att etablera infrastruktur och andra resurser och tillhandahålla en definition från slutpunkt till slutpunkt för ett projekt, allt paketerat som ett enda distributionsbart projekt. Se Vad är Databricks-tillgångspaket?.

Med paketmallar kan användare skapa paket på ett konsekvent och repeterbart sätt genom att upprätta mappstrukturer, skapa steg och uppgifter, tester och andra DevOps IaC-attribut (infrastruktur som kod) som är gemensamma för en distributionspipeline.

Om du till exempel rutinmässigt kör Databricks-jobb som kräver anpassade paket med ett tidskrävande kompileringssteg vid installationen kan du påskynda utvecklingsloopen genom att skapa en paketmall som anger en anpassad containermiljö.

Databricks innehåller en uppsättning standardpaketmallar, men du kan också skapa anpassade paketmallar. Användarna kan sedan initiera paket med init-kommandot bundleoch ange en standardmall eller en anpassad mall.

Skapa ett paket med hjälp av en mall

Om du vill använda en Azure Databricks-paketmall för att skapa ditt paket använder du kommandot Databricks CLIbundle init och anger namnet på mallen som ska användas. Följande kommando skapar till exempel ett paket med python-standardpaketmallen:

databricks bundle init default-python

Om du vill använda en anpassad paketmall skickar du mallens lokala sökväg eller fjärr-URL till kommandot Databricks CLIbundle init.

Till exempel använder följande kommando den dab-container-template mall som skapades i Självstudiekurs för Anpassad Paketmall:

databricks bundle init /projects/my-custom-bundle-templates/dab-container-template

Om du inte anger någon mall, uppmanar kommandot bundle init med uppsättningen tillgängliga standardmallar att välja mellan.

Standardpaketmallar

Azure Databricks tillhandahåller följande standardpaketmallar:

Mall beskrivning
default-python En mall för att använda Python med Databricks. Den här mallen skapar ett paket med ett jobb och en DLT-pipeline. Se standard-python.
default-sql En mall för att använda SQL med Databricks. Den här mallen innehåller en konfigurationsfil som definierar ett jobb som kör SQL-frågor på ett SQL-lager. Se default-sql.
dbt-sql En mall som använder dbt-core för lokal utveckling och paket för distribution. Den här mallen innehåller konfigurationen som definierar ett jobb med en dbt-uppgift, samt en konfigurationsfil som definierar dbt-profiler för distribuerade dbt-jobb. Se dbt-sql.
mlops-stacks En avancerad fullstackmall för att starta nya MLOps-projekt. Se mlops-stacks och Databricks Asset Bundles for MLOps Stacks.

Anpassade paketmallar

Paketmallar använder syntaxen för Go-paketmallar, vilket ger flexibilitet för de anpassade paketmallar som du kan skapa. Se dokumentationen för Go-paketmallen .

Mallprojektstrukturen

Ett paketmallsprojekt måste minst ha:

  • En databricks_template_schema.json fil i projektroten som definierar en användaruppmaningsegenskap för namnet på paketprojektet. Se mallschemat.
  • En databricks.yml.tmpl fil som finns i en template mapp som definierar konfigurationen för alla paket som skapats med mallen. Om filen databricks.yml.tmpl refererar till ytterligare *.yml.tmpl konfigurationsmallar anger du platsen för dessa i mappningen include . Se Konfigurationsmallar.

Dessutom speglas mappstrukturen och inkluderade filer i paketmallsprojektet template mapp av paket som skapats med mallen. Om du till exempel vill att mallen ska generera ett paket med en enkel notebook-fil i mappen src och en jobbdefinition som kör notebook-filen i mappen resources, ordnar du mallprojektet så här:

basic-bundle-template
  ├── databricks_template_schema.json
  └── template
      └── {{.project_name}}
          ├── databricks.yml.tmpl
          ├── resources
          │   └── {{.project_name}}_job.yml.tmpl
          └── src
              └── simple_notebook.ipynb

Tips

Namnet på projektmappen och namnet på jobbdefinitionsfilen i den här paketmallen använder en mallvariabel. Information om mallhjälpare och variabler finns i Mallhjälpare och variabler.

mallschema

Ett anpassat paketmallsprojekt måste innehålla en databricks_template_schema.jsonJSON-fil i projektroten. Den här filen definierar fält som används av Databricks CLI när kommandot bundle init körs, till exempel prompttext.

Följande grundläggande databricks_template_schema.json-fil definierar en indatavariabel project_name för paketprojektet, som innehåller promptmeddelandet och ett standardvärde. Sedan definieras ett meddelande om lyckad initiering av bunde-projekt som använder indatavariabelvärdet i meddelandet.

{
  "properties": {
    "project_name": {
      "type": "string",
      "default": "basic_bundle",
      "description": "What is the name of the bundle you want to create?",
      "order": 1
    }
  },
  "success_message": "\nYour bundle '{{.project_name}}' has been created."
}

Fält för mallschema

Filen databricks_template_schema.json stöder definition av indatavariabler för insamling av information under paketinitiering från användaren i fältet properties, samt ytterligare fält för att anpassa initieringen.

Indatavariabler definieras i fältet properties i mallschemat. Varje indatavariabel definierar metadata som behövs för att presentera en uppmaning till användaren under paketinitalisering. Värdet för variabeln är sedan tillgängligt med hjälp av mallvariabelsyntax, till exempel {{.project_name}}.

Du kan också ange värden för vissa fält för att anpassa initieringsprocessen för paketet.

Schemafält som stöds visas i följande tabell.

Schemafält beskrivning
properties Paketmallens indatavariabeldefinitioner. Databricks rekommenderar att du definierar minst en indatavariabel som är namnet på paketprojektet.
properties.<variable_name> Namnet på indatavariabeln.
properties.<variable_name>.default Ett standardvärde som ska användas om ett värde inte tillhandahålls av användaren med --config-file som en del av kommandot bundle init, eller på kommandoraden när de uppmanas att göra det.
properties.<variable_name>.description Uppmaningsmeddelandet som är kopplat till indatavariabeln.
properties.<variable_name>.enum En lista över möjliga värden för egenskapen, till exempel "enum": ["azure", "aws", "gcp"]. Om det här fältet har definierats visar Databricks CLI värdena i en lista på kommandoraden för att uppmana användaren att välja ett värde.
properties.<variable_name>.order Ett heltal som definierar den relativa ordningen för indataegenskaperna. Detta styr i vilken ordning prompterna för dessa indatavariabler visas på kommandoraden.
properties.<variable_name>.pattern Regexp-mönstret som ska användas för att verifiera användarindata, till exempel "pattern": "^[^ .\\\\/]{3,}$". Mer information om regexp-syntax som stöds finns i https://github.com/google/re2/wiki/Syntax.
properties.<variable_name>.pattern_match_failure_message Meddelandet som visas för användaren om värdet som anges av användaren inte matchar det angivna mönstret, till exempel Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\".".
properties.<variable_name>.skip_prompt_if Hoppa över att fråga efter indatavariabeln om det här schemat uppfylls av konfigurationen som redan finns. I så fall används standardvärdet för egenskapen i stället. Ett exempel finns i mallen mlops-stacks. Endast const jämförelser stöds.
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const Om värdet för <previous_variable_name> matchar konstanten som konfigurerats i skip_prompt_if, så kommer uppmaningen för <variable_name> att hoppas över.
welcome_message Det första meddelandet till utdata innan användaren uppmanas att ange indata.
success_message Meddelandet som ska skrivas ut när mallen har initierats.
min_databricks_cli_version Den lägsta semverversionen av detta Databricks CLI som mallen kräver. databricks bundle init misslyckas om CLI-versionen är mindre än den här versionen.
version Reserverad för framtida användning. Versionen av schemat. Detta används för att avgöra om schemat är kompatibelt med den aktuella CLI-versionen.

Konfigurationsmallar

En anpassad paketmall ska innehålla en databricks.yml.tmpl fil i en template mapp i paketmallsprojektet som används för att skapa paketprojektet databricks.yml konfigurationsfil. Mallar för konfigurationsfiler för resurser kan skapas i mappen resources. Fyll i dessa mallfiler med konfigurationsmallen YAML.

Följande enkla exempel på konfigurationsmallar för databricks.yml och tillhörande *_job.yml upprätta paketnamnet och två målmiljöer och definiera ett jobb som kör notebook-filen i paketet för paket som skapats med den här mallen. Dessa konfigurationsmallar utnyttjar paketersättningar och paketmallshjälpmedel.

template/{{.project_name}}/databricks.yml.tmpl:

# databricks.yml
# This is the configuration for the Databricks Asset Bundle {{.project_name}}.

bundle:
  name: {{.project_name}}

include:
  - resources/*.yml

targets:
  # The deployment targets. See https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html
  dev:
    mode: development
    default: true
    workspace:
      host: {{workspace_host}}

  prod:
    mode: production
    workspace:
      host: {{workspace_host}}
      root_path: /Shared/.bundle/prod/${bundle.name}
    {{- if not is_service_principal}}
    run_as:
      # This runs as {{user_name}} in production. Alternatively,
      # a service principal could be used here using service_principal_name
      user_name: {{user_name}}
    {{end -}}

template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl:

# {{.project_name}}_job.yml
# The main job for {{.project_name}}

resources:
    jobs:
        {{.project_name}}_job:
        name: {{.project_name}}_job
        tasks:
            - task_key: notebook_task
            job_cluster_key: job_cluster
            notebook_task:
                notebook_path: ../src/simple_notebook.ipynb
        job_clusters:
            - job_cluster_key: job_cluster
            new_cluster:
                node_type_id: i3.xlarge
                spark_version: 13.3.x-scala2.12

mallhjälpare och variabler

Mallhjälpare är funktioner som tillhandahålls av Databricks som du kan använda i dina mallfiler för att hämta användarspecifik information vid körning eller interagera med mallmotorn. Du kan också definiera dina egna mallvariabler.

Följande mallhjälpare är tillgängliga för Databricks-paketmallsprojekt. Information om hur du använder Go-mallar och variabler finns i Go-mallar.

Assistent beskrivning
{{url}} Ett alias för https://pkg.go.dev/net/url#Parse. Detta tillåter användning av alla metoder för url.URL.
{{regexp}} Ett alias för https://pkg.go.dev/regexp#Compile. Detta tillåter användning av alla metoder för regexp.Regexp.
{{random_int}} Returnerar, som en int, ett icke-negativt pseudo-slumpmässigt tal i halvöppet intervall (0,n).
{{uuid}} Returnerar som en sträng ett UUID som är en 128-bitars (16 byte) universell unik IDentifier enligt definitionen i RFC 4122.Det här ID:t är stabilt under hela mallkörningen och kan användas för att fylla i fältet bundle.uuid i databricks.yml av mallförfattare.
{{bundle_uuid}} Ett unikt ID för paketet. Flera anrop för den här funktionen returnerar samma UUID.
{{pair}} Ett nyckelvärdepar. Detta används med hjälpverktyget map för att generera kartor som ska användas i en mall.
{{map}} Konverterar en lista med par till ett kartobjekt. Det här är användbart om du vill skicka flera objekt till mallar som definierats i bibliotekskatalogen. Eftersom Go-textmallssyntaxen för att anropa en mall endast tillåter att du anger ett enda argument, kan den här funktionen användas för att lösa den begränsningen.
På följande rad kan till exempel {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}}, $arg1 och $arg2 refereras till inifrån my_template som .foo och .bar.
{{smallest_node_type}} Returnerar den minsta nodtypen.
{{path_separator}} Sökvägsavgränsarens tecken för operativsystemet. Detta är / för Unix-baserade system och \ för Windows.
{{workspace_host}} Arbetsytans värd-URL som användaren för närvarande autentiseras till.
{{user_name}} Det fullständiga namnet på användaren som initierar mallen.
{{short_name}} Det korta namnet på användaren som initierar mallen.
{{default_catalog}} Returnerar standardkatalogen för arbetsytan. Om det inte finns något standardvärde, eller om Unity Catalog inte är aktiverat, returnerar detta en tom sträng.
{{is_service_principal}} Om den aktuella användaren är en tjänstens huvudaktör eller inte.
{{ skip <glob-pattern-relative-to-current-directory> }} Gör att mallmotorn hoppar över att generera alla filer och kataloger som matchar indataglobmönstret. Ett exempel finns i mallen mlops-stacks.

Anpassade mallhjälpare

Om du vill definiera dina egna mallhjälpare skapar du en mallfil i library-mappen för mallprojektet och använder Go-mallningssyntax för att definiera hjälp. Följande innehåll i en library/variables.tmpl-fil definierar till exempel variablerna cli_version och model_name. När den här mallen används för att initiera ett paket skapas värdet för variabeln model_name med hjälp av det input_project_name fält som definierats i mallschemafilen. Värdet för det här fältvärdet är användarens indata efter en uppmaning.

{{ define `cli_version` -}}
    v0.240.0
{{- end }}

{{ define `model_name` -}}
    {{ .input_project_name }}-model
{{- end }}

Om du vill se ett fullständigt exempel kan du läsa filen mlops-stacks-mallvariabler.

Testa paketmallen

Slutligen ska du testa mallen. Använd till exempel Databricks CLI för att initiera ett nytt paket med hjälp av mallen som definierats i föregående avsnitt:

databricks bundle init basic-bundle-template

För prompten What is your bundle project name?skriver du my_test_bundle.

När testpaketet har skapats matas meddelandet om lyckat resultat från schemafilen ut. Om du undersöker innehållet i my_test_bundle mappen bör du se följande:

my_test_bundle
   ├── databricks.yml
   ├── resources
   │  └── my_test_bundle_job.yml
   └── src
      └── simple_notebook.ipynb

Och filen och jobbet databricks.yml är nu anpassade:

# databricks.yml
# This is the configuration for the Databricks Asset Bundle my-test-bundle.

bundle:
  name: my_test_bundle

include:
  - resources/*.yml

targets:
  # The 'dev' target, used for development purposes. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#development-mode)
  dev:
    mode: development
    default: true
    workspace:
      host: https://my-host.cloud.databricks.com

  # The 'prod' target, used for production deployment. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#production-mode)
  prod:
    mode: production
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/.bundle/prod/${bundle.name}
    run_as:
      # This runs as someone@example.com in production. Alternatively,
      # a service principal could be used here using service_principal_name
      user_name: someone@example.com
# my_test_bundle_job.yml
# The main job for my_test_bundle

resources:
    jobs:
        my_test_bundle_job:
        name: my_test_bundle_job
        tasks:
            - task_key: notebook_task
                job_cluster_key: job_cluster
                notebook_task:
                    notebook_path: ../src/simple_notebook.ipynb
        job_clusters:
            - job_cluster_key: job_cluster
                new_cluster:
                    node_type_id: i3.xlarge
                    spark_version: 13.3.x-scala2.12

Dela mallen

Om du vill dela den här paketmallen med andra kan du lagra den i versionskontroll med alla leverantörer som Git stöder och som användarna har åtkomst till. Om du vill köra bundle init kommandot med en Git-URL kontrollerar du att databricks_template_schema.json filen finns på rotplatsen i förhållande till git-URL:en.

Tips

Du kan placera databricks_template_schema.json filen i en annan mapp i förhållande till paketets rot. Du kan sedan använda bundle init kommandots --template-dir alternativ för att referera till mappen, som innehåller databricks_template_schema.json filen.

Nästa steg