مرجع جدول نظام الوظائف

هام

هذه الميزة في المعاينة العامة.

توفر هذه المقالة مرجعا لكيفية استخدام workflow جداول النظام لمراقبة المهام في حسابك. تتضمن هذه الجداول سجلات من جميع مساحات العمل في حسابك المنشورة داخل نفس منطقة السحابة. لمشاهدة السجلات من مناطق أخرى، تحتاج إلى عرض الجداول من مساحة عمل تم نشرها في تلك المنطقة.

system.workflow يجب تمكينه بواسطة مسؤول حساب. يمكنك تمكينه باستخدام واجهة برمجة تطبيقات SystemSchemas.

للحصول على أمثلة حول استخدام هذه الجداول لتكلفة الوظيفة وإمكانية مراقبة السلامة، راجع مراقبة تكاليف الوظائف باستخدام جداول النظام.

جداول الوظائف المتوفرة

تعيش جميع جداول النظام المتعلقة بالوظائف في system.workflow المخطط. حاليا، يستضيف المخطط أربعة جداول:

  • jobs: يتعقب الإنشاء والحذف والمعلومات الأساسية للوظائف.
  • job_tasks: يتعقب الإنشاء والحذف والمعلومات الأساسية للمهام الوظيفية.
  • job_run_timeline: يسجل البداية والنهاية والحالة الناتجة عن تشغيل المهمة.
  • job_task_run_timeline: يسجل بداية المهام الوظيفية وانتهاءها وحالتها الناتجة.

مخطط جدول الوظيفة

jobs الجدول هو جدول أبعاد متغير ببطء. عند تغيير صف، يتم إصدار صف جديد، ليحل محل الصف السابق منطقيا.

يستخدم الجدول المخطط التالي:

اسم العمود نوع البيانات ‏‏الوصف
account_id سلسلة معرف الحساب الذي تنتمي إليه هذه الوظيفة.
workspace_id سلسلة معرف مساحة العمل التي تنتمي إليها هذه المهمة.
job_id سلسلة معرف الوظيفة. هذا المفتاح فريد فقط داخل مساحة عمل واحدة.
name سلسلة اسم الوظيفة الذي يوفره المستخدم.
creator_id سلسلة معرف المدير الذي أنشأ الوظيفة.
tags سلسلة العلامات المخصصة التي يوفرها المستخدم المقترنة بهذه المهمة.
change_time الطابع الزمني الوقت الذي تم فيه تعديل الوظيفة آخر مرة.
delete_time الطابع الزمني الوقت الذي تم فيه حذف المهمة من قبل المستخدم.
run_as سلسلة معرف المستخدم أو كيان الخدمة الذي يتم استخدام أذوناته لتشغيل المهمة.

مخطط جدول مهمة المهمة

job_tasks الجدول هو جدول أبعاد متغير ببطء. عند تغيير صف، يتم إصدار صف جديد، ليحل محل الصف السابق منطقيا.

يستخدم الجدول المخطط التالي:

اسم العمود نوع البيانات ‏‏الوصف
account_id سلسلة معرف الحساب الذي تنتمي إليه هذه الوظيفة.
workspace_id سلسلة معرف مساحة العمل التي تنتمي إليها هذه المهمة.
job_id سلسلة معرف الوظيفة. هذا المفتاح فريد فقط داخل مساحة عمل واحدة.
task_key سلسلة المفتاح المرجعي لمهمة في وظيفة. هذا المفتاح فريد فقط داخل وظيفة واحدة.
depends_on_keys صفيف مفاتيح المهام لجميع تبعيات المصدر لهذه المهمة.
change_time الطابع الزمني الوقت الذي تم فيه تعديل المهمة آخر مرة.
delete_time الطابع الزمني الوقت الذي تم فيه حذف مهمة من قبل المستخدم.

مخطط جدول المخطط الزمني لتشغيل المهمة

job_run_timeline الجدول غير قابل للتغيير وكامل في وقت إنتاجه.

يستخدم الجدول المخطط التالي:

اسم العمود نوع البيانات ‏‏الوصف
account_id سلسلة معرف الحساب الذي تنتمي إليه هذه الوظيفة.
workspace_id سلسلة معرف مساحة العمل التي تنتمي إليها هذه المهمة.
job_id سلسلة معرف الوظيفة. هذا المفتاح فريد فقط داخل مساحة عمل واحدة.
run_id سلسلة معرف تشغيل الوظيفة.
period_start_time الطابع الزمني وقت البدء للتشغيل أو للفترة الزمنية.
period_end_time الطابع الزمني وقت انتهاء التشغيل أو الفترة الزمنية.
trigger_type سلسلة نوع المشغل الذي يمكنه تشغيل.
result_state سلسلة نتيجة تشغيل الوظيفة. راجع القيم المحتملة أسفل هذا الجدول.

القيم المحتملة result_state للعمود هي:

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

القيم المحتملة trigger_type للعمود هي:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

مخطط جدول المخطط الزمني لتشغيل مهمة المهمة

job_task_run_timeline الجدول غير قابل للتغيير وكامل في وقت إنتاجه.

يستخدم الجدول المخطط التالي:

اسم العمود نوع البيانات ‏‏الوصف
account_id سلسلة معرف الحساب الذي تنتمي إليه هذه الوظيفة.
workspace_id سلسلة معرف مساحة العمل التي تنتمي إليها هذه المهمة.
job_id سلسلة معرف الوظيفة. هذا المفتاح فريد فقط داخل مساحة عمل واحدة.
run_id سلسلة معرف تشغيل المهمة.
period_start_time الطابع الزمني وقت البدء للمهمة أو الفترة الزمنية.
period_end_time الطابع الزمني وقت انتهاء المهمة أو الفترة الزمنية.
task_key سلسلة المفتاح المرجعي لمهمة في وظيفة. هذا المفتاح فريد فقط داخل وظيفة واحدة.
compute_ids صفيف صفيف يحتوي على معرفات الوظائف غير التي لا تحتوي على خادم حوسبة ومستودعات SQL بدون خادم التي تستخدمها مهمة الوظيفة.
result_state سلسلة نتيجة تشغيل المهمة الوظيفية.

القيم المحتملة result_state للعمود هي:

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

مثال على الاستعلامات

يتضمن هذا القسم نماذج الاستعلامات التي يمكنك استخدامها لتحقيق أقصى استفادة من جداول سير العمل.

الحصول على أحدث إصدار من الوظائف

نظرا لأن الجدولين jobs و job_tasks يغيران جداول الأبعاد ببطء، يتم إنشاء سجل جديد في كل مرة يتم فيها إجراء تغيير. للحصول على أحدث إصدار من وظيفة، يمكنك الطلب حسب change_time العمود.

SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.workflow.jobs QUALIFY rn=1

عدد الوظائف اليومية حسب مساحة العمل

يحصل هذا الاستعلام على عدد المهام اليومية حسب مساحة العمل لآخر 7 أيام:

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

توزيع حالة الوظيفة اليومية حسب مساحة العمل

يقوم هذا الاستعلام بإرجاع عدد الوظائف اليومية حسب مساحة العمل لآخر 7 أيام، موزعة حسب نتيجة تشغيل الوظيفة. يزيل الاستعلام أي سجلات تكون فيها المهام في حالة معلقة أو قيد التشغيل.

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

نظرة عامة على أطول الوظائف قيد التشغيل

يقوم هذا الاستعلام بإرجاع متوسط وقت تشغيل المهمة، مقاسا بالثوان. يتم تنظيم السجلات حسب الوظيفة. يظهر أعلى 90 عمودا وعمودا بنسبة 95 بالمائة متوسط أطوال أطول عمليات تشغيل الوظيفة.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
    FROM
        system.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    first(t2.name, TRUE) as name,
    COUNT(DISTINCT t1.run_id) as runs,
    MEAN(t1.duration) as mean_seconds,
    AVG(t1.duration) as avg_seconds,
    PERCENTILE(t1.duration, 0.9) as p90_seconds,
    PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
    job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

تحليل تشغيل المهمة

يوفر هذا الاستعلام وقت تشغيل تاريخي لوظيفة معينة. لكي يعمل الاستعلام، يجب عليك تعيين workspace_id و job_id.

يمكنك أيضا تحرير طول الوقت للتحليل عن طريق تحديث مقدار الأيام في INTERVAL 60 DAYS القسم.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        min(period_start_time) as run_start,
        max(period_start_time) as run_end,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration,
        FIRST(result_state, TRUE) as result_state
    FROM
        system.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
      AND workspace_id={workspace_id}
      AND job_id={job_id}
    GROUP BY ALL
    ORDER BY run_start DESC
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    t2.name,
    t1.run_id,
    t1.run_start,
    t1.run_end,
    t1.duration,
    t1.result_state
FROM job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)

الوظائف التي تعمل على الحوسبة لجميع الأغراض

ينضم هذا الاستعلام مع compute.clusters جدول النظام لإرجاع المهام الأخيرة التي يتم تشغيلها على حساب متعدد الأغراض بدلا من حساب الوظائف.

with clusters AS (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
  FROM system.compute.clusters
  WHERE cluster_source="UI" OR cluster_source="API"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.workflow.job_task_run_timeline
  WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
),
all_purpose_cluster_jobs AS (
  SELECT
    t1.*,
    t2.cluster_name,
    t2.owned_by,
    t2.dbr_version
  FROM job_tasks_exploded t1
    INNER JOIN clusters t2 USING (workspace_id, cluster_id)
)
SELECT * FROM all_purpose_cluster_jobs LIMIT 10;

تشغيل مهمة تمت إعادة المحاولة

يجمع هذا الاستعلام قائمة بالعمليات التي تمت إعادة محاولة تشغيلها مع عدد مرات إعادة المحاولة لكل تشغيل.

with repaired_runs as (
  SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
  FROM system.workflow.job_run_timeline
  WHERE result_state IS NOT NULL
  GROUP BY ALL
  HAVING retries_count > 0
)
SELECT
  *
FROM repaired_runs
ORDER BY retries_count DESC
LIMIT 10;