الاستبدالات والمتغيرات في حزم أصول Databricks
تدعم Databricks Asset Bundles الاستبدالات والمتغيرات المخصصة، ما يجعل ملفات تكوين الحزمة الخاصة بك أكثر نمطية وقابلة لإعادة الاستخدام. تمكن كل من الاستبدالات والمتغيرات المخصصة من الاسترداد الديناميكي للقيم بحيث يمكن تحديد الإعدادات في وقت نشر الحزمة وتشغيلها.
تلميح
يمكنك أيضا استخدام مراجع القيمة الديناميكية لقيم معلمات الوظيفة لتمرير سياق حول تشغيل وظيفة إلى مهام الوظيفة. راجع ما هو مرجع القيمة الديناميكية؟ ومعلمات المهام.
استبدال
يمكنك استخدام الاستبدالات لاسترداد قيم الإعدادات التي تتغير استنادا إلى سياق نشر المجموعة وتشغيلها.
على سبيل المثال، عند تشغيل bundle validate --output json
الأمر، قد ترى رسما بيانيا مثل هذا:
{
"bundle": {
"name": "hello-bundle",
"target": "dev",
"...": "..."
},
"workspace": {
"...": "...",
"current_user": {
"...": "...",
"userName": "someone@example.com",
"...": "...",
},
"...": "..."
},
"...": {
"...": "..."
}
}
يمكن استخدام القوالب الفرعية للإشارة إلى قيم حقول الحزمة name
والحزمة target
ومساحة userName
العمل لإنشاء مساحة root_path
العمل في ملف تكوين المجموعة:
bundle:
name: hello-bundle
workspace:
root_path: /Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target}
# ...
targets:
dev:
default: true
يمكنك أيضا إنشاء استبدالات للموارد المسماة. على سبيل المثال، بالنسبة للمسار الذي تم تكوينه بالاسم my_pipeline
، ${resources.pipelines.my_pipeline.target}
هو استبدال لقيمة الهدف من my_pipeline
.
لتحديد الاستبدالات الصالحة، يمكنك استخدام التسلسل الهرمي للمخطط الموثق في مرجع REST API أو إخراج bundle schema
الأمر.
فيما يلي بعض الاستبدالات شائعة الاستخدام:
${bundle.name}
${bundle.target} # Use this substitution instead of ${bundle.environment}
${workspace.host}
${workspace.current_user.short_name}
${workspace.current_user.userName}
${workspace.file_path}
${workspace.root_path}
${resources.jobs.<job-name>.id}
${resources.models.<model-name>.name}
${resources.pipelines.<pipeline-name>.name}
المتغيرات المخصصة
يمكنك تحديد كل من المتغيرات المخصصة البسيطة والمعقدة في مجموعتك لتمكين الاسترداد الديناميكي للقيم المطلوبة للعديد من السيناريوهات. يتم الإعلان عن المتغيرات المخصصة في ملفات تكوين الحزمة variables
الخاصة بك داخل التعيين. راجع المتغيرات.
يحدد تكوين المثال التالي المتغيرات my_cluster_id
و my_notebook_path
:
variables:
my_cluster_id:
description: The ID of an existing cluster.
default: 1234-567890-abcde123
my_notebook_path:
description: The path to an existing notebook.
default: ./hello.py
إذا لم توفر default
قيمة لمتغير كجزء من هذا الإعلان، يجب تعيينه عند تنفيذ أوامر المجموعة، من خلال متغير بيئة، أو في مكان آخر داخل ملفات تكوين المجموعة كما هو موضح في تعيين قيمة متغير.
للإشارة إلى متغير مخصص داخل تكوين الحزمة، استخدم استبدال ${var.<variable_name>}
المتغير . على سبيل المثال، للإشارة إلى المتغيرات my_cluster_id
و my_notebook_path
:
resources:
jobs:
hello-job:
name: hello-job
tasks:
- task_key: hello-task
existing_cluster_id: ${var.my_cluster_id}
notebook_task:
notebook_path: ${var.my_notebook_path}
تعيين قيمة متغير
إذا لم تقم بتوفير default
قيمة لمتغير، أو إذا كنت تريد تجاوز default
قيمة متغير مؤقتا، فوفر القيمة المؤقتة الجديدة للمتغير باستخدام أحد الأساليب التالية:
قم بتوفير قيمة المتغير كجزء من
bundle
أمر مثلvalidate
أوdeploy
أوrun
. للقيام بذلك، استخدم الخيار--var="<key>=<value>"
، حيث<key>
هو اسم المتغير، وهو<value>
قيمة المتغير. على سبيل المثال، كجزء منbundle validate
الأمر ، لتوفير قيمة1234-567890-abcde123
للمتغير المسمىmy_cluster_id
، ولتوفر قيمة./hello.py
للمتغير المسمىmy_notebook_path
، قم بتشغيل:databricks bundle validate --var="my_cluster_id=1234-567890-abcde123,my_notebook_path=./hello.py" # Or: databricks bundle validate --var="my_cluster_id=1234-567890-abcde123" --var="my_notebook_path=./hello.py"
توفير قيمة المتغير عن طريق تعيين متغير بيئة. يجب أن يبدأ اسم متغير البيئة ب
BUNDLE_VAR_
. لتعيين متغيرات البيئة، راجع وثائق نظام التشغيل الخاص بك. على سبيل المثال، لتوفير قيمة1234-567890-abcde123
للمتغير المسمىmy_cluster_id
، ولتوفر قيمة./hello.py
للمتغير المسمىmy_notebook_path
، قم بتشغيل الأمر التالي قبل استدعاء أمرbundle
مثلvalidate
أوdeploy
أوrun
:بالنسبة إلى Linux وmacOS:
export BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 && export BUNDLE_VAR_my_notebook_path=./hello.py
لـ Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py"
أو، قم بتوفير قيمة المتغير كجزء من
bundle
أمر مثلvalidate
أوdeploy
أوrun
، على سبيل المثال ل Linux وmacOS:BUNDLE_VAR_my_cluster_id=1234-567890-abcde123 BUNDLE_VAR_my_notebook_path=./hello.py databricks bundle validate
أو ل Windows:
"set BUNDLE_VAR_my_cluster_id=1234-567890-abcde123" && "set BUNDLE_VAR_my_notebook_path=./hello.py" && "databricks bundle validate"
قم بتوفير قيمة المتغير داخل ملفات تكوين الحزمة. للقيام بذلك، استخدم تعيينا
variables
داخلtargets
التعيين، باتباع هذا التنسيق:variables: <variable-name>: <value>
على سبيل المثال، لتوفير قيم للمتغيرات المسماة
my_cluster_id
ولهدفينmy_notebook_path
منفصلين:targets: dev: variables: my_cluster_id: 1234-567890-abcde123 my_notebook_path: ./hello.py prod: variables: my_cluster_id: 2345-678901-bcdef234 my_notebook_path: ./hello.py
إشعار
أيا كان الأسلوب الذي تختاره لتوفير قيم متغيرة، استخدم نفس النهج أثناء كل من مراحل التوزيع والتشغيل. وإلا، فقد تحصل على نتائج غير متوقعة بين وقت التوزيع ووظيفة أو تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية التي تستند إلى هذا النشر الحالي.
في الأمثلة السابقة، يبحث Databricks CLI عن قيم المتغيرات my_cluster_id
وبالترتيب my_notebook_path
التالي، يتوقف عند العثور على قيمة لكل متغير مطابق، متخطاة أي مواقع أخرى لهذا المتغير:
- ضمن أي
--var
خيارات محددة كجزء منbundle
الأمر. - ضمن أي مجموعة متغيرات البيئة التي تبدأ ب
BUNDLE_VAR_
. - ضمن أي
variables
تعيينات، من بينtargets
التعيينات داخل ملفات تكوين الحزمة. - أي
default
قيمة لتعريف هذا المتغير، من بين تعيينات المستوىvariables
الأعلى داخل ملفات تكوين المجموعة الخاصة بك.
تعريف متغير معقد
من المفترض أن يكون المتغير المخصص من سلسلة النوع إلا إذا قمت بتعريفه كمتغير معقد. لتعريف متغير مخصص بنوع معقد لحزمتك، قم بتعيين type
إلى complex
في تكوين المجموعة.
إشعار
القيمة الصالحة الوحيدة للإعداد type
هي complex
. بالإضافة إلى ذلك، يفشل التحقق من صحة الحزمة إذا type
تم تعيين إلى complex
وكان default
المحدد للمتغير قيمة واحدة.
في المثال التالي، يتم تعريف إعدادات نظام المجموعة داخل متغير معقد مخصص يسمى my_cluster
:
variables:
my_cluster:
description: "My cluster definition"
type: complex
default:
spark_version: "13.2.x-scala2.11"
node_type_id: "Standard_DS3_v2"
num_workers: 2
spark_conf:
spark.speculation: true
spark.databricks.delta.retentionDurationCheck.enabled: false
resources:
jobs:
my_job:
job_clusters:
- job_cluster_key: my_cluster_key
new_cluster: ${var.my_cluster}
tasks:
- task_key: hello_task
job_cluster_key: my_cluster_key
استرداد قيمة معرف الكائن
alert
cluster
instance_pool
pipeline
warehouse
dashboard
cluster_policy
metastore
query
job
service_principal
بالنسبة إلى أنواع الكائنات و، يمكنك تعريف lookup
لمتغيرك المخصص لاسترداد معرف كائن مسمى باستخدام هذا التنسيق:
variables:
<variable-name>:
lookup:
<object-type>: "<object-name>"
إذا تم تعريف بحث لمتغير، يتم استخدام معرف الكائن بالاسم المحدد كقيمة للمتغير. يضمن هذا استخدام المعرف الصحيح الذي تم حله للكائن دائما للمتغير.
إشعار
يحدث خطأ إذا لم يكن هناك كائن بالاسم المحدد، أو إذا كان هناك أكثر من كائن واحد بالاسم المحدد.
على سبيل المثال، في التكوين التالي، ${var.my_cluster_id}
سيتم استبدال بمعرف نظام المجموعة المشترك 12.2.
variables:
my_cluster_id:
description: An existing cluster
lookup:
cluster: "12.2 shared"
resources:
jobs:
my_job:
name: "My Job"
tasks:
- task_key: TestTask
existing_cluster_id: ${var.my_cluster_id}