בדף הזה מוסבר איך לנהל נתוני DICOM ב-Cloud Healthcare API באמצעות סוגי אחסון שונים. בחירה נכונה של סוג אחסון יכולה לעזור לכם להפחית עלויות ולעמוד בדרישות הרגולטוריות לשמירת נתונים.
הדף הזה מיועד למשתמשים טכניים שכבר מכירים את DICOM ואת Cloud Healthcare API.
סקירה כללית
סוגי האחסון ב-DICOM פועלים באופן דומה לסוגי האחסון ב-Cloud Storage, ומציעים מאפיינים שונים של עלות וביצועים בהתאם לתדירות שבה אתם ניגשים לנתונים ולמשך הזמן שבו אתם צריכים לאחסן אותם. מידע נוסף על כל סוג אחסון זמין במאמר תיאורי סוגי אחסון.
יכול להיות שתרצו לשנות את סוג האחסון של אובייקטים בפורמט DICOM בהתאם לתדירות שבה אתם ניגשים לאובייקט או למשך הזמן שבו צריך לשמור את האובייקט. לדוגמה:
- כדי לחסוך בעלויות החיוב, אפשר להעביר תמונות DICOM שמתבצעת אליהן גישה לעיתים רחוקות מ-Standard Storage ל-Nearline Storage או ל-Coldline Storage.
- אפשר להעביר נתוני מטופלים שצריך לשמור מסיבות משפטיות ל-Archive Storage, שהוא סוג האחסון הכי זול ועמיד.
סוגי אחסון זמינים של DICOM
אפשר להשתמש בסוגי האחסון הבאים לאובייקטים של DICOM:
- רגיל (ברירת מחדל)
- Nearline
- Coldline
- העברה לארכיון
תמחור של סוגי אחסון
לכל סוג אחסון יש מבנה תמחור משלו. שינוי סוג האחסון של אובייקטים בפורמט DICOM עשוי להשפיע על עלויות החיוב. למידע נוסף, תוכלו לקרוא את המאמרים הבאים:
שינוי סוג האחסון של אובייקטים ספציפיים בפורמט DICOM
אפשר לשנות את סוג האחסון של אובייקטים בפורמט DICOM ברמת המחקר, הסדרה או המופע.
בדוגמאות הבאות מוצגות דרכים לשנות את סוג האחסון של מופע DICOM.
REST
משנים את סוג האחסון של מופע DICOM באמצעות השיטה
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מערך הנתונים הראשי של מאגר DICOM -
DICOM_STORE_ID: מזהה מאגר DICOM -
STUDY_INSTANCE_UID: המזהה הייחודי של מופע המחקר -
SERIES_INSTANCE_UID: המזהה הייחודי של מופע הסדרה -
INSTANCE_UID: המזהה הייחודי של המכונה -
STORAGE_CLASS: סוג האחסון של מופע DICOM. אחד מהערכיםSTANDARD,NEARLINE,COLDLINEאוARCHIVE.
תוכן בקשת JSON:
{ "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת (LRO). פעולות ארוכות טווח מוחזרות כשקריאות לשיטות עשויות להימשך זמן נוסף עד להשלמה. שימו לב לערך שלcurl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } } '@ | 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; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.-
כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה
projects.locations.datasets.operations.get.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מערך הנתונים הראשי של מאגר DICOM -
OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת
כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: כשהתשובה מכילה את הערךcurl
מריצים את הפקודה הבאה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content"done": true, הפעולה ארוכת הטווח (LRO) הסתיימה.-
שינוי סוג האחסון של כמה אובייקטים באמצעות קובץ מסנן
בסעיפים הבאים מוסבר איך ליצור קובץ מסנן ולהשתמש בו כדי לשנות את סוג האחסון של אובייקטים מסוג DICOM על סמך קריטריון מסנן.
דרישות לגבי קבצים
- כל שורה בקובץ המסנן מגדירה את המחקר, הסדרה או המופע, ומשתמשת בפורמט
/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID. - אפשר לקטוע שורה כדי לציין את הרמה שבה המסנן פועל.
לדוגמה, אפשר לבחור מחקר שלם על ידי ציון
/studies/STUDY_INSTANCE_UID, או לבחור סדרה שלמה על ידי ציון/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID.
נניח שיש לכם קובץ מסנן כזה:
/studies/1.123.456.789 /studies/1.666.333.111/series/123.456 /studies/1.666.333.111/series/567.890 /studies/1.888.999.222/series/123.456/instances/111 /studies/1.888.999.222/series/123.456/instances/222 /studies/1.888.999.222/series/123.456/instances/333
קובץ המסנן לדוגמה הזה חל על:
- המחקר כולו עם ה-UID של מופע המחקר בתור
1.123.456.789 - שתי סדרות נפרדות עם מזהי UID של מופע הסדרה
123.456ו-567.890במחקר1.666.333.111 - שלוש מכונות נפרדות עם מזהי מכונה
111,222ו-333במחקר1.888.999.222ובסדרה123.456
יצירת קובץ סינון באמצעות BigQuery
כדי ליצור קובץ מסנן באמצעות BigQuery, קודם צריך לייצא את המטא-נתונים של מאגר DICOM ל-BigQuery. במטא-נתונים המיוצאים מוצגים מזהי ה-UID של המחקר, הסדרה והמופע של נתוני DICOM במאגר DICOM.
אחרי שמייצאים את המטא-נתונים, מבצעים את השלבים הבאים:
מריצים שאילתה כדי לקבל את מזהי ה-UID של המחקר, הסדרה והמופעים שרוצים להוסיף לקובץ המסנן.
לדוגמה, השאילתה הבאה מראה איך לשרשר את ה-UID של המחקר, הסדרה והמופע כדי להתאים לדרישות הפורמט של קובץ המסנן:
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
אופציונלי: אם השאילתה מחזירה קבוצת תוצאות גדולה שחורגת מגודל התגובה המקסימלי, שומרים את תוצאות השאילתה בטבלת יעד חדשה ב-BigQuery.
שומרים את תוצאות השאילתה בקובץ ומייצאים אותו ל-Cloud Storage. אם שמרתם את תוצאות השאילתה בטבלת יעד חדשה בשלב 2, תוכלו לעיין במאמר בנושא ייצוא נתונים מטבלה כדי לייצא את תוכן הטבלה ל-Cloud Storage.
עורכים את הקובץ המיוצא לפי הצורך, וכוללים אותו בבקשה לשינוי סוג האחסון של כמה אובייקטים מסוג DICOM.
יצירה ידנית של קובץ מסנן
כדי ליצור קובץ מסנן באופן ידני:
- יוצרים קובץ מסנן שמכיל את אובייקטי ה-DICOM שרוצים לסנן.
- מעלים את קובץ המסנן ל-Cloud Storage. הוראות מפורטות זמינות במאמר העלאת אובייקטים ממערכת קבצים.
שימוש בקובץ מסנן
בדוגמאות הבאות אפשר לראות איך להחיל קובץ מסנן כשמשנים את סוג האחסון של אובייקטים מסוג DICOM.
REST
משנים את סוג האחסון של מופעי DICOM בקובץ המסנן באמצעות השיטה
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מערך הנתונים הראשי של מאגר DICOM -
DICOM_STORE_ID: מזהה מאגר DICOM -
STORAGE_CLASS: סוג האחסון של אובייקטים מסוג DICOM. אחד מהערכיםSTANDARD,NEARLINE,COLDLINEאוARCHIVE. -
CLOUD_STORAGE_BUCKET: השם של קטגוריה של Cloud Storage שמכילה את קובץ המסנן -
FILTER_FILE_PATH: ה-URI מוגדר במלואו של קובץ המסנן בקטגוריה של Cloud Storage
תוכן בקשת JSON:
{ "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת (LRO). פעולות ארוכות טווח מוחזרות כשקריאות לשיטות עשויות להימשך זמן נוסף עד להשלמה. שימו לב לערך שלcurl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } } 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/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH" } } '@ | 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/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand ContentOPERATION_ID. תצטרכו את הערך הזה בשלב הבא.-
כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה
projects.locations.datasets.operations.get.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מערך הנתונים הראשי של מאגר DICOM -
OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת
כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: כשהתשובה מכילה את הערךcurl
מריצים את הפקודה הבאה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content"done": true, הפעולה ארוכת הטווח (LRO) הסתיימה.-
הצגת סוג האחסון של אובייקט DICOM
אפשר לראות את סוג האחסון של אובייקטים מסוג DICOM ברמת המחקר, הסדרה או המופע.
בקטעים הבאים מוסבר איך לראות את סוג האחסון של מופע DICOM.
קבלת מידע על סוג האחסון של אובייקט DICOM
בדוגמאות הבאות אפשר לראות איך משתמשים בשיטה instances.getStorageInfo כדי להציג את סוג האחסון של אובייקטים מסוג DICOM.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מערך הנתונים הראשי של מאגר DICOM -
DICOM_STORE_ID: מזהה מאגר DICOM -
STUDY_INSTANCE_UID: המזהה הייחודי של מופע המחקר -
SERIES_INSTANCE_UID: המזהה הייחודי של מופע הסדרה -
INSTANCE_UID: המזהה הייחודי של המכונה
כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:
curl
מריצים את הפקודה הבאה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo"
PowerShell
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo" | Select-Object -Expand Content
APIs Explorer
פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.
אתם אמורים לקבל תגובת JSON שדומה לזו:
שאילתות על מטא-נתוני DICOM שיוצאו ב-BigQuery
אתם יכולים לייצא מטא נתונים של DICOM ל-BigQuery ואז להריץ שאילתות כדי לראות את סוגי האחסון של אובייקטים של DICOM שייצאתם.
השאילתה הבאה מראה איך לאחזר מתוך מערך נתונים ב-BigQuery עד 1,000 מופעים של DICOM: מזהה UID של מופע המחקר, מזהה UID של מופע הסדרה, מזהה UID של המופע, גודל האחסון וסוג האחסון:
SELECT StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, BlobStorageSize, StorageClass FROM PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE LIMIT 1000
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
BIGQUERY_DATASET: מערך הנתונים הראשי ב-BigQuery של הטבלה שמכילה את המטא-נתונים של DICOM שיוצאו -
BIGQUERY_TABLE: הטבלה ב-BigQuery שמכילה את המטא-נתונים של DICOM שיוצאו