Saya mencoba memicu pekerjaan databricks dalam langkah pipa di mana saya menggunakan id pekerjaan yang diteruskan sebagai variabel dari langkah sebelumnya.

Inilah cara saya membuat id pekerjaan dan meneruskannya sebagai variabel:

- script: |
    job_id=$(databricks jobs create --json '{"name": "test", "existing_cluster_id" : "'"$(db_clusterid)"'", "notebook_task ": {"notebook_path": "'"$(nbpath)"'"}}')
    echo "##vso[task.setvariable variable=db_job_id;]'"$job_id"'"
  env:
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Create Job'

Ketika saya menggemakan variabel di langkah berikutnya, itu terlihat seperti yang diharapkan:

- script: |
    echo $DB_JOB_ID
  env:
    DB_JOB_ID: $(db_job_id)
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Echo Job ID'

Keluaran dari gema:

'{ "job_id": 123 }'

Namun, ketika saya mencoba menjalankan pekerjaan sebagai berikut:

- script: |
    databricks jobs run-now --job-id $DB_JOB_ID
  env:
    DB_JOB_ID: $(db_job_id)
    DB_HOST: $(db_host)
    DB_TOKEN: $(db_token)
  displayName: 'Run Job'

Pesan kesalahan berikut muncul:

Error: Got unexpected extra arguments ("job_id": 123}')

Alih-alih memberikan $DB_JOB_ID saya juga mencoba "$DB_JOB_ID" dan "'"$DB_JOB_ID"'" yang juga tidak berhasil.

Apa yang akan menjadi pernyataan yang benar?

1
kanimbla 12 Mei 2021, 17:27

1 menjawab

Jawaban Terbaik

Masalah Anda adalah Anda meletakkan seluruh JSON yang dikembalikan, sedangkan run-now hanya membutuhkan ID pekerjaan yang berupa angka. Anda dapat mengganti --job-id $DB_JOB_ID dengan --job-id $(echo $DB_JOB_ID||sed -e 's|^.*:[ ]*\([0-9][0-9]*\)[ ]*.*$|\1|') - ini hanya akan mengekstrak ID pekerjaan yang diperlukan.

P.S. Daripada databricks jobs create sebagai satu langkah dan kemudian menjalankan databricks jobs run-now, lebih baik menggunakan databricks jobs submit (atau gunakan Jalankan Kirim REST API) - itu hanya akan menjalankan pekerjaan tanpa membuatnya.

Anda juga dapat melihat paket dbx yang dikembangkan di dalam Databricks - ini dapat menyederhanakan cara bagaimana Anda menjadwalkan pekerjaan, menunggu hasil, dll.

1
Alex Ott 12 Mei 2021, 15:28