presets-catalog-schema-as-params # Your branch is ahead of 'origin/presets-catalog-schema-as-params' by 67 commits. # (use "git push" to publish your

local commits) # # Changes to be committed: # modified:  dbt-sql/databricks_template_schema.json # modified:
default-python/databricks_template_schema.json # modified:  default-python/template/{{.project_name}}/databricks.yml.tmpl # modified:
default-python/template/{{.project_name}}/resources/{{.project_name}}.job.yml.tmpl # modified:
default-python/template/{{.project_name}}/resources/{{.project_name}}.pipeline.yml.tmpl # modified:
default-python/template/{{.project_name}}/scratch/exploration.ipynb.tmpl # modified:
default-python/template/{{.project_name}}/src/notebook.ipynb.tmpl # modified:
default-python/template/{{.project_name}}/src/{{.project_name}}/main.py.tmpl # modified:  default-sql/databricks_template_schema.json # # Untracked
files: # ../../../.cursorrules # ../../../bundle/config/resources/:tmp:tmp.py # ../../../delme.py # ../../../pr-cache-current-user-me #
../../../pr-cleanup-warnings.md # ../../../pr-contrib-templates.md # ../../../pr-cp-diag-ids-for-all.md # ../../../pr-cp-serverless-templates.md #
../../../pr-presets-catalog-schema-using-params.md # ../../../pr-update-sync-command-help.md #
Revert template changes for now
This commit is contained in:
Lennart Kats 2024-12-20 16:59:18 +01:00
parent 8c2eaaba43
commit be08585fb7
No known key found for this signature in database
GPG Key ID: 1EB8B57673197023
9 changed files with 41 additions and 216 deletions

View File

@ -45,7 +45,7 @@
"default": "default",
"pattern": "^\\w+$",
"pattern_match_failure_message": "Invalid schema name.",
"description": "\nPlease provide a default schema during development.\ndefault_schema",
"description": "\nPlease provide an initial schema during development.\ndefault_schema",
"order": 5
}
},

View File

@ -4,7 +4,7 @@
"project_name": {
"type": "string",
"default": "my_project",
"description": "\nPlease provide a unique name for this project.\nproject_name",
"description": "Please provide the following details to tailor the template to your preferences.\n\nUnique name for this project",
"order": 1,
"pattern": "^[A-Za-z0-9_]+$",
"pattern_match_failure_message": "Name must consist of letters, numbers, and underscores."
@ -13,55 +13,23 @@
"type": "string",
"default": "yes",
"enum": ["yes", "no"],
"description": "\nWould you like to include a stub (sample) notebook in '{{.project_name}}{{path_separator}}src'?",
"description": "Include a stub (sample) notebook in '{{.project_name}}{{path_separator}}src'",
"order": 2
},
"include_dlt": {
"type": "string",
"default": "yes",
"enum": ["yes", "no"],
"description": "Would you like to include a stub (sample) Delta Live Tables pipeline in '{{.project_name}}{{path_separator}}src'?",
"description": "Include a stub (sample) Delta Live Tables pipeline in '{{.project_name}}{{path_separator}}src'",
"order": 3
},
"include_python": {
"type": "string",
"default": "yes",
"enum": ["yes", "no"],
"description": "Would you like to include a stub (sample) Python package in '{{.project_name}}{{path_separator}}src'?",
"description": "Include a stub (sample) Python package in '{{.project_name}}{{path_separator}}src'",
"order": 4
},
"default_catalog": {
"type": "string",
"default": "{{default_catalog}}",
"pattern": "^\\w*$",
"pattern_match_failure_message": "Invalid catalog name.",
"description": "\nPlease provide an initial catalog{{if eq (default_catalog) \"\"}} (leave blank when not using Unity Catalog){{end}}.\ndefault_catalog",
"order": 5
},
"personal_schemas": {
"type": "string",
"description": "\nWould you like to use a personal schema for each user working on this project? (e.g., 'catalog.{{short_name}}')\npersonal_schemas",
"enum": [
"yes, use a schema based on the current user name during development",
"no, use a shared schema during development"
],
"order": 6
},
"shared_schema": {
"skip_prompt_if": {
"properties": {
"personal_schemas": {
"const": "yes, use a schema based on the current user name during development"
}
}
},
"type": "string",
"default": "default",
"pattern": "^\\w+$",
"pattern_match_failure_message": "Invalid schema name.",
"description": "\nPlease provide default schema during development.\ndefault_schema",
"order": 7
}
},
"success_message": "\nWorkspace to use (auto-detected, edit in '{{.project_name}}/databricks.yml').\nworkspace_host: {{workspace_host}}\n\n✨ Your new project has been created in the '{{.project_name}}' directory!\n\nPlease refer to the README.md file for \"getting started\" instructions.\nSee also the documentation at https://docs.databricks.com/dev-tools/bundles/index.html."
"success_message": "Workspace to use (auto-detected, edit in '{{.project_name}}/databricks.yml'): {{workspace_host}}\n\n✨ Your new project has been created in the '{{.project_name}}' directory!\n\nPlease refer to the README.md file for \"getting started\" instructions.\nSee also the documentation at https://docs.databricks.com/dev-tools/bundles/index.html."
}

View File

@ -6,13 +6,6 @@ bundle:
include:
- resources/*.yml
{{- $dev_schema := .shared_schema }}
{{- $prod_schema := .shared_schema }}
{{- if (regexp "^yes").MatchString .personal_schemas}}
{{- $dev_schema = "${workspace.current_user.short_name}"}}
{{- $prod_schema = "default"}}
{{- end}}
targets:
dev:
# The default target uses 'mode: development' to create a development copy.
@ -23,9 +16,6 @@ targets:
default: true
workspace:
host: {{workspace_host}}
presets:
catalog: {{.default_catalog}}
schema: {{$dev_schema}}
prod:
mode: production
@ -36,6 +26,5 @@ targets:
permissions:
- {{if is_service_principal}}service_principal{{else}}user{{end}}_name: {{user_name}}
level: CAN_MANAGE
presets:
catalog: {{.default_catalog}}
schema: {{$prod_schema}}
run_as:
{{if is_service_principal}}service_principal{{else}}user{{end}}_name: {{user_name}}

View File

@ -16,12 +16,16 @@ resources:
interval: 1
unit: DAYS
{{if not is_service_principal -}}
{{- if not is_service_principal}}
email_notifications:
on_failure:
- {{user_name}}
{{else}}
{{end -}}
tasks:
{{- if eq .include_notebook "yes" }}
- task_key: notebook_task

View File

@ -3,6 +3,13 @@ resources:
pipelines:
{{.project_name}}_pipeline:
name: {{.project_name}}_pipeline
{{- if or (eq default_catalog "") (eq default_catalog "hive_metastore")}}
## Specify the 'catalog' field to configure this pipeline to make use of Unity Catalog:
# catalog: catalog_name
{{- else}}
catalog: {{default_catalog}}
{{- end}}
target: {{.project_name}}_${bundle.target}
libraries:
- notebook:
path: ../src/dlt_pipeline.ipynb

View File

@ -27,25 +27,15 @@
},
"outputs": [],
"source": [
{{- if (eq .include_python "yes") }}
{{- if (eq .include_python "yes") }}
"import sys\n",
"sys.path.append('../src')\n",
"from {{.project_name}} import main\n",
"\n",
{{- /* We can use the short form here without 'dbutils.text()' since the widgets are defined in the metadata below. */}}
"catalog = dbutils.widgets.get('catalog')\n",
"schema = dbutils.widgets.get('schema')\n",
"spark.sql(f'USE {catalog}.{schema}')\n",
"\n",
"spark.sql('SELECT * FROM example').show(10)"
{{- else}}
"# Load default catalog and schema as widget and set their values as the default catalog / schema\n",
"catalog = dbutils.widgets.get('catalog')\n",
"schema = dbutils.widgets.get('schema')\n",
"spark.sql(f'USE {catalog}.{schema}')\n",
"\n",
"spark.sql('SELECT * FROM example').show(10)"
{{- end}}
"main.get_taxis(spark).show(10)"
{{else}}
"spark.range(10)"
{{end -}}
]
}
],
@ -56,63 +46,8 @@
"notebookMetadata": {
"pythonIndentUnit": 2
},
"notebookName": "exploration",
"widgets": {
"catalog": {
"currentValue": "{{.default_catalog}}",
"nuid": "c47e96d8-5751-4c8a-9d6b-5c6c7c3f1234",
"typedWidgetInfo": {
"autoCreated": false,
"defaultValue": "{{.default_catalog}}",
"label": null,
"name": "catalog",
"options": {
"widgetDisplayType": "Text",
"validationRegex": null
},
"parameterDataType": "String"
},
"widgetInfo": {
"widgetType": "text",
"defaultValue": "{{.default_catalog}}",
"label": null,
"name": "catalog",
"options": {
"widgetType": "text",
"autoCreated": null,
"validationRegex": null
}
}
},
{{- $dev_schema := .shared_schema }}
{{- if (regexp "^yes").MatchString .personal_schemas}}
{{- $dev_schema = "{{short_name}}"}}
{{- end}}
"schema": {
"currentValue": "{{$dev_schema}}",
"nuid": "c47e96d8-5751-4c8a-9d6b-5c6c7c3f5678",
"typedWidgetInfo": {
"autoCreated": false,
"defaultValue": "{{$dev_schema}}",
"label": null,
"name": "schema",
"options": {
"widgetDisplayType": "Text",
"validationRegex": null
},
"parameterDataType": "String"
},
"widgetInfo": {
"widgetType": "text",
"defaultValue": "{{$dev_schema}}",
"label": null,
"name": "schema",
"options": {
"widgetType": "text",
"autoCreated": null,
"validationRegex": null
}
}
"notebookName": "ipynb-notebook",
"widgets": {}
},
"kernelspec": {
"display_name": "Python 3",

View File

@ -23,11 +23,8 @@
"metadata": {},
"outputs": [],
"source": [
"# Load default catalog and schema as widget and set their values as the default catalog / schema\n",
{{- /* We can use the short form here without 'dbutils.text()' since the widgets are defined in the metadata below. */}}
"catalog = dbutils.widgets.get('catalog')\n",
"schema = dbutils.widgets.get('schema')\n",
"spark.sql(f'USE {catalog}.{schema}')"
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
@ -50,9 +47,9 @@
{{- if (eq .include_python "yes") }}
"from {{.project_name}} import main\n",
"\n",
"main.create_example_table()"
"main.get_taxis(spark).show(10)"
{{else}}
"spark.sql("CREATE OR REPLACE TABLE example AS SELECT 'example table' AS text_column")"
"spark.range(10)"
{{end -}}
]
}
@ -65,64 +62,7 @@
"pythonIndentUnit": 2
},
"notebookName": "notebook",
"widgets": {
"catalog": {
"currentValue": "{{.default_catalog}}",
"nuid": "3965fc9c-8080-45b1-bee3-f75cef7685b4",
"typedWidgetInfo": {
"autoCreated": false,
"defaultValue": "{{.default_catalog}}",
"label": null,
"name": "catalog",
"options": {
"widgetDisplayType": "Text",
"validationRegex": null
},
"parameterDataType": "String"
},
"widgetInfo": {
"widgetType": "text",
"defaultValue": "{{.default_catalog}}",
"label": null,
"name": "catalog",
"options": {
"widgetType": "text",
"autoCreated": null,
"validationRegex": null
}
}
},
{{- $dev_schema := .shared_schema }}
{{- if (regexp "^yes").MatchString .personal_schemas}}
{{- $dev_schema = "{{short_name}}"}}
{{- end}}
"schema": {
"currentValue": "{{$dev_schema}}",
"nuid": "6ec0d70f-39bf-4859-a510-02c3e3d59bff",
"typedWidgetInfo": {
"autoCreated": false,
"defaultValue": "{{$dev_schema}}",
"label": null,
"name": "schema",
"options": {
"widgetDisplayType": "Text",
"validationRegex": null
},
"parameterDataType": "String"
},
"widgetInfo": {
"widgetType": "text",
"defaultValue": "{{$dev_schema}}",
"label": null,
"name": "schema",
"options": {
"widgetType": "text",
"autoCreated": null,
"validationRegex": null
}
}
}
}
"widgets": {}
},
"kernelspec": {
"display_name": "Python 3",

View File

@ -1,39 +1,21 @@
from pyspark.sql import SparkSession, DataFrame
import argparse
def get_taxis(spark: SparkSession) -> DataFrame:
return spark.read.table("samples.nyctaxi.trips")
# Create a new Databricks Connect session. If this fails,
# check that you have configured Databricks Connect correctly.
# See https://docs.databricks.com/dev-tools/databricks-connect.html.
def get_spark() -> SparkSession:
"""
Create a new Databricks Connect session. If this fails,
check that you have configured Databricks Connect correctly.
See https://docs.databricks.com/dev-tools/databricks-connect.html.
"""
try:
from databricks.connect import DatabricksSession
return DatabricksSession.builder.getOrCreate()
except ImportError:
return SparkSession.builder.getOrCreate()
def get_taxis(spark: SparkSession) -> DataFrame:
return spark.read.table("samples.nyctaxi.trips")
def create_example_table():
"""
Create a table called 'example' in the default catalog and schema.
"""
get_spark().sql("CREATE OR REPLACE TABLE example AS SELECT 'example table' AS text_column")
def main():
# Set the catalog and schema for the current session.
# In the default template, these parameters are set
# using the 'catalog' and 'schema' presets in databricks.yml.
parser = argparse.ArgumentParser()
parser.add_argument('--catalog', required=True)
parser.add_argument('--schema', required=True)
args, unknown = parser.parse_known_args()
spark = get_spark()
spark.sql(f"USE {args.catalog}.{args.schema}")
create_example_table()
get_taxis(get_spark()).show(5)
if __name__ == '__main__':
main()

View File

@ -45,7 +45,7 @@
"default": "default",
"pattern": "^\\w+$",
"pattern_match_failure_message": "Invalid schema name.",
"description": "\nPlease provide a default schema during development.\ndefault_schema",
"description": "\nPlease provide an initial schema during development.\ndefault_schema",
"order": 5
}
},