מחיקה בכמות גדולה של משאבי FHIR

בדף הזה מוסבר איך למחוק משאבי FHIR בכמות גדולה ממאגר FHIR באמצעות פעולה ממושכת.

אפשר למחוק כמה משאבי FHIR בפעולה אחת על סמך מסננים כמו סוג המשאב וזמן העדכון האחרון, או על ידי ציון רשימה של מזהי משאבים ספציפיים בקובץ Cloud Storage. האפשרות הזו שימושית לניהול מחזור החיים של הנתונים ולחיסכון בעלויות.

לפני שמתחילים

לפני שמבצעים מחיקה בכמות גדולה של משאבי FHIR, צריך לוודא את הדברים הבאים:

  • צריכה להיות לכם הרשאה מסוג healthcare.fhirStores.bulkDelete במאגר FHIR.
  • אם מציינים gcsDestination, לחשבון השירות Cloud Healthcare Service Agent צריך להיות התפקיד roles/storage.objectAdmin בקטגוריית היעד. מידע נוסף זמין במאמר הרשאות Cloud Storage למאגר FHIR.
  • אם מציינים gcsSource, לחשבון השירות Cloud Healthcare Service Agent צריך להיות התפקיד roles/storage.objectViewer בקטגוריית המקור. מידע נוסף מופיע במאמר בנושא מחיקה בכמות גדולה של משאבי FHIR.

מחיקה בכמות גדולה של משאבי FHIR

כדי למחוק משאבי FHIR בכמות גדולה, משתמשים בשיטה projects.locations.datasets.fhirStores.bulkDelete.

השיטה הזו מחזירה פעולה ממושכת (LRO). אפשר לעקוב אחרי הסטטוס של הפעולה הממושכת באמצעות שם הפעולה שמוחזר מקריאה ל-API.

בדוגמה הבאה מוצגת בקשת POST למחיקה בכמות גדולה של כל משאבי Observation ו-Encounter בחנות FHIR שעודכנו לאחרונה לפני חותמת זמן ספציפית.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • LOCATION: המיקום של מערך הנתונים
  • ‫DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
  • ‫FHIR_STORE_ID: מזהה מאגר FHIR

תוכן בקשת JSON:

{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

cat > request.json << 'EOF'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
EOF

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:bulkDelete"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

@'
{
  "type": "Observation,Encounter",
  "versionConfig": "ALL",
  "until": "2025-01-01T00:00:00Z",
  "gcsDestination": {
    "uriPrefix": "gs://BUCKET/DIRECTORY"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:bulkDelete" | Select-Object -Expand Content
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

מחיקה בכמות גדולה של משאבי FHIR לפי מזהה משאב

כדי למחוק רשימה ספציפית של משאבי FHIR, צריך להגדיר את השדה gcsSource.uri למיקום ב-Cloud Storage של קובץ אחד או יותר שמכילים את מזהי המשאבים למחיקה.

הקבצים להזנה צריכים לעמוד בדרישות הבאות:

  • כל שורה מכילה משאב אחד בפורמט RESOURCE_TYPE/RESOURCE_ID, לדוגמה Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281. לא ניתן להשתמש במזהי משאבים גולמיים ללא סוג משאב.
  • מזהה ה-URI חייב להפנות לקובץ יחיד, כמו gs://BUCKET/ids.txt, או לדפוס של תו כללי, כמו gs://BUCKET/DIRECTORY/*.ndjson. ה-URI לא יכול להיות bucket או ספרייה שמסתיימים ב-/.

התוכן הבא הוא דוגמה לקובץ קלט תקין:

Patient/8af1cf10-0fec-4bb3-bde1-77f56a3d8281
Observation/2c9d4a3e-6b1f-4e2a-9f0d-1a2b3c4d5e6f
Encounter/7f3e2d1c-0b9a-4c8d-8e7f-6a5b4c3d2e1f

חשוב לשים לב להתנהגות הבאה:

  • אי אפשר להשתמש בשדה gcsSource יחד עם המסננים type או until. אם מציינים את gcsSource יחד עם אחד מהמסננים, הבקשה תיכשל.
  • אפשר להשתמש ב-gcsSource עם versionConfig ועם gcsDestination.
  • המערכת מתעלמת משורות ריקות. השורה לא תעובד אם היא לא בפורמט RESOURCE_TYPE/RESOURCE_ID או אם היא מכילה סוג משאב שלא נתמך, והפעולה תימשך.
  • מערכת FHIR מדלגת על מזהי משאבים שלא קיימים במאגר.
  • אל תשנו או תמחקו את קובצי הקלט עד שהפעולה תסתיים.

בדוגמה הבאה מוצגת בקשת POST למחיקה בכמות גדולה של משאבי FHIR שמופיעים בקובץ Cloud Storage.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • ‫LOCATION: המיקום של מערך הנתונים
  • ‫DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
  • ‫FHIR_STORE_ID: מזהה מאגר FHIR
  • ‫BUCKET/PATH_TO_IDS_FILE: המיקום ב-Cloud Storage של הקובץ או תבנית wildcard שמפרטת את המשאבים למחיקה בפורמט RESOURCE_TYPE/RESOURCE_ID

תוכן בקשת JSON:

{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

cat > request.json << 'EOF'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
EOF

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:bulkDelete"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

@'
{
  "versionConfig": "ALL",
  "gcsSource": {
    "uri": "gs://BUCKET/PATH_TO_IDS_FILE"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:bulkDelete" | Select-Object -Expand Content
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

הצגת הסטטוס של פעולות ארוכות טווח

כדי לראות את הסטטוס של פעולת המחיקה בכמות גדולה, משתמשים בשיטה operations.get עם שם הפעולה שהוחזר מהקריאה bulkDelete.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • LOCATION: המיקום של מערך הנתונים
  • ‫DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
  • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1alpha2/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1alpha2/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
אם הבקשה מצליחה, השרת מחזיר תגובה עם סטטוס הפעולה בפורמט JSON:

מעקב אחרי משאבים שנמחקו

בסיום פעולת המחיקה בכמות גדולה, אם צוין gcsDestination, נוצר קובץ סיכום ב-Cloud Storage. הקובץ הזה מכיל רשימה של מזהי המשאבים של המשאבים בגרסה הנוכחית שנמחקו במהלך הפעולה.

מגבלות

אין ערובה לשלמות ההפניה במהלך פעולת מחיקה בכמות גדולה. מומלץ להשתמש בפעולה הזו רק כשאין צורך בשלמות רפרנציאלית או כשברור שהיא תתקיים אחרי הפעולה.