בדף הזה מוסבר איך לייצא משאבי FHIR ל-BigQuery כדי לבחון ולנתח אותם. פעולת הייצוא יוצרת טבלה אחת ב-BigQuery לכל סוג של משאב FHIR במאגר ה-FHIR.
כדי לשפר את ביצועי השאילתות ולהפחית את העלויות, כדאי לייצא משאבי FHIR לטבלאות מחולקות למחיצות. הוראות מפורטות מופיעות במאמר ייצוא משאבי FHIR לטבלאות מחולקות.
אם אתם מייצאים משאבי FHIR לפי לוח זמנים, כדאי לייצא את הנתונים באופן מצטבר. הוראות מפורטות מופיעות במאמר ייצוא מצטבר.
הגדרת הרשאות ב-BigQuery
לפני שמייצאים משאבי FHIR ל-BigQuery, צריך להעניק הרשאות נוספות לסוכן Cloud Healthcare Service Agent חשבון השירות. מידע נוסף זמין במאמר הרשאות BigQuery בחנות FHIR.
הסבר על התנהגות הייצוא
ההתנהגות של פעולת הייצוא תלויה בגורמים הבאים:
- האם טבלת היעד קיימת.
- אם הגדרתם את השדה
force. - אם מציינים enum ב-
WriteDisposition. אם מציינים enum, לא מגדירים את השדהforce.
ההתנהגות בכל מקרה היא כזו:
- טבלת היעד קיימת והערך של
forceהואtrue: פעולת הייצוא מחליפה את הטבלה הקיימת - טבלת היעד קיימת והערך של
forceמוגדר כ-false: מתרחשת שגיאה - טבלת היעד לא קיימת: פעולת הייצוא יוצרת טבלה חדשה, בלי קשר לשאלה אם ציינתם את השדה
force טבלת היעד קיימת והגדרתם את
WriteDispositionל-WRITE_TRUNCATEאו ל-WRITE_APPEND: פעולת הייצוא מצליחה במקום להחזיר שגיאה
הפעולה יוצרת טבלה אחת ב-BigQuery לכל סוג משאב במאגר FHIR.
ייצוא של משאבי FHIR בקבוצות
בדוגמאות הבאות מוסבר איך לייצא משאבי FHIR לטבלת BigQuery.
כשמציינים את היעד ב-BigQuery, צריך להשתמש במזהה URI מלא:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
המסוף
כדי לייצא משאבי FHIR ל-BigQuery באמצעות מסוףGoogle Cloud , מבצעים את השלבים הבאים:
נכנסים לדף Datasets במסוף Google Cloud .
לוחצים על מערך הנתונים שכולל את מאגר ה-FHIR עם הנתונים שרוצים לייצא.
באותה שורה של מאגר FHIR, פותחים את הרשימה פעולות ובוחרים באפשרות ייצוא.
בדף Export FHIR resources שמופיע, מחפשים את הקטע Select a destination. בוחרים באפשרות טבלה ב-BigQuery.
בקטע Destination table write disposition בוחרים באחת מהאפשרויות הבאות כדי לקבוע את אופן הפעולה של פעולת הייצוא:
- ייצוא נתונים רק אם טבלאות היעד ריקות: האפשרות הזו שוות ערך לבחירה של enum
WRITE_EMPTYב-WriteDisposition. - הוספת נתונים לטבלאות היעד: האפשרות הזו שוות ערך לבחירה של הערך
WRITE_APPENDב-enumWriteDisposition. - Erase all existing data in destination tables before writing the FHIR
resources (מחיקת כל הנתונים הקיימים בטבלאות היעד לפני כתיבת משאבי ה-FHIR): האפשרות הזו שוות ערך לבחירה בערך
WRITE_TRUNCATEenum ב-WriteDisposition.
- ייצוא נתונים רק אם טבלאות היעד ריקות: האפשרות הזו שוות ערך לבחירה של enum
בקטע FHIR export configuration, לוחצים על Browse כדי לבחור את הפרויקט ומערך הנתונים ב-BigQuery.
בתפריט הנפתח Schema type, בוחרים את סכימת הפלט של טבלת BigQuery. אלה הסכימות שזמינות:
- Analytics. סכימה שמבוססת על המסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, סכימות לא נוצרות עבור השדות
Parameters.parameter.resource,Bundle.entry.resourceו-Bundle.entry.response.outcome. - Analytics V2. סכימה דומה לסכימה של Analytics, עם תמיכה נוספת בפריטים הבאים:
- תוספים עם כמה ערכים לאותו
url - משאבי FHIR שכלולים ב-FHIR
- תוספים עם כמה ערכים לאותו
- Analytics. סכימה שמבוססת על המסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, סכימות לא נוצרות עבור השדות
בוחרים רמת עומק במכוון Recursive Structure Depth (עומק המבנה הרקורסיבי) כדי להגדיר את העומק לכל המבנים הרקורסיביים בסכימת הפלט. כברירת מחדל, הערך הרקורסיבי הוא 2.
מידע נוסף זמין במאמר
recursiveStructureDepth.לוחצים על ייצוא כדי לייצא משאבי FHIR ל-BigQuery.
- כדי לעקוב אחרי סטטוס הפעולה, לוחצים על הכרטיסייה פעולות. אחרי שהפעולה מסתיימת, מופיעים הסימנים הבאים:
- בקטע Long-running operation status (סטטוס של פעולה ממושכת) מופיע סימן וי ירוק מתחת לכותרת OK.
- בקטע סקירה כללית מופיעים סימן וי ירוק והאינדיקטור OK באותה שורה שבה מופיע מזהה הפעולה.
gcloud
כדי לייצא משאבי FHIR ל-BigQuery, מריצים את הפקודה gcloud healthcare fhir-stores export bq.
מייצאים את משאבי ה-FHIR.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים
- DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
- BIGQUERY_DATASET_ID: השם של מערך הנתונים הקיים ב-BigQuery שאליו מייצאים את משאבי ה-FHIR
- SCHEMA_TYPE: ערך של
SchemaType. משתמשים באחד מהערכים הבאים:-
analytics. סכימה שמבוססת על מסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, לא נוצרות סכימות לשדותParameters.parameter.resource,Bundle.entry.resourceו-Bundle.entry.response.outcome. -
analytics_v2. סכימה שדומה ל-analyticsעם תמיכה נוספת באפשרויות הבאות:- תוספים עם שדות חוזרים
- משאבי FHIR שכלולים ב-FHIR
analytics-v2תופס יותר מקום בטבלת היעד מאשרanalytics.
-
- WRITE_DISPOSITION: ערך של
WriteDisposition. משתמשים באחד מהערכים הבאים:-
write-empty. ייצוא נתונים רק אם טבלאות היעד ב-BigQuery ריקות. write-truncate. מוחקים את כל הנתונים הקיימים בטבלאות BigQuery לפני כתיבת משאבי ה-FHIR.write-append. הוספת נתונים לטבלאות היעד ב-BigQuery.
-
- FHIR_RESOURCE_TYPE: שדה אופציונלי. מציינים סוג אחד או יותר של משאבי FHIR שמופרדים בפסיקים כדי לייצא רק משאבי FHIR מהסוגים האלה.
- SINCE_TIMESTAMP: שדה אופציונלי. כדי לייצא רק משאבי FHIR שעודכנו אחרי זמן מסוים, צריך לציין ערך בפורמט
YYYY-MM-DDThh:mm:ss.sss+zz:zz. צריך לציין את השעה עד לרמת השנייה ולכלול אזור זמן. לדוגמה,2015-02-07T13:28:17.239+02:00ו-2017-01-01T00:00:00Zהן שעות תקינות.
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud healthcare fhir-stores export bq FHIR_STORE_ID \ --location=LOCATION \ --dataset=DATASET_ID \ --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID \ --schema-type=SCHEMA_TYPE \ --write-disposition=WRITE_DISPOSITION \ --resource-type=FHIR_RESOURCE_TYPE \ --since=SINCE_TIMESTAMP
Windows (PowerShell)
gcloud healthcare fhir-stores export bq FHIR_STORE_ID ` --location=LOCATION ` --dataset=DATASET_ID ` --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID ` --schema-type=SCHEMA_TYPE ` --write-disposition=WRITE_DISPOSITION ` --resource-type=FHIR_RESOURCE_TYPE ` --since=SINCE_TIMESTAMP
התשובה היא: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. הפקודה מבצעת דגימה של הפעולה הממושכת, ואז מדפיסה את שם הפעולה בשדהWindows (cmd.exe)
gcloud healthcare fhir-stores export bq FHIR_STORE_ID ^ --location=LOCATION ^ --dataset=DATASET_ID ^ --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID ^ --schema-type=SCHEMA_TYPE ^ --write-disposition=WRITE_DISPOSITION ^ --resource-type=FHIR_RESOURCE_TYPE ^ --since=SINCE_TIMESTAMP
nameאחרי שהייצוא מסתיים. שימו לב לערך שלOPERATION_ID. תצטרכו את הערך הזה בשלב הבא.תשובה
Request issued for: [FHIR_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
כדי לראות פרטים נוספים על הפעולה, מריצים את הפקודה
gcloud healthcare operations describeומספקים את OPERATION_ID מהתשובה.לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- DATASET_ID: מזהה קבוצת הנתונים
- LOCATION: המיקום של מערך הנתונים
- OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows (PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows (cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
אמורים לקבל תגובה שדומה לזו:
תשובה
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.fhir.FhirStoreService.ExportResources_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.fhir.ExportResourcesResponse'
REST
כדי לייצא משאבי FHIR ל-BigQuery, משתמשים בשיטה projects.locations.datasets.fhirStores.export.
מייצאים את משאבי ה-FHIR:
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים
- DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
- BIGQUERY_DATASET_ID: השם של מערך הנתונים הקיים ב-BigQuery שאליו מייצאים את משאבי ה-FHIR
- SCHEMA_TYPE: ערך של
SchemaType. משתמשים באחד מהערכים הבאים:-
ANALYTICS. סכימה שמבוססת על מסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, לא נוצרות סכימות לשדותParameters.parameter.resource,Bundle.entry.resourceו-Bundle.entry.response.outcome. -
ANALYTICS_V2. סכימה שדומה ל-ANALYTICSעם תמיכה נוספת באפשרויות הבאות:- תוספים עם כמה ערכים לאותו
url - משאבי FHIR שכלולים ב-FHIR
הפונקציה
.ANALYTICS_V2משתמשת ביותר מקום בטבלת היעד מאשר הפונקציהANALYTICS - תוספים עם כמה ערכים לאותו
-
- WRITE_DISPOSITION: ערך של
WriteDisposition. משתמשים באחד מהערכים הבאים:-
WRITE_EMPTY. ייצוא נתונים רק אם טבלאות היעד ב-BigQuery ריקות. WRITE_TRUNCATE. מוחקים את כל הנתונים הקיימים בטבלאות BigQuery לפני כתיבת משאבי ה-FHIR.WRITE_APPEND. הוספת נתונים לטבלאות היעד ב-BigQuery.
-
- FHIR_RESOURCE_TYPE: שדה אופציונלי. מציינים סוג אחד או יותר של משאבי FHIR שמופרדים בפסיקים כדי לייצא רק משאבי FHIR מהסוגים האלה.
- SINCE_TIMESTAMP: שדה אופציונלי. כדי לייצא רק משאבי FHIR שעודכנו אחרי זמן מסוים, צריך לציין ערך בפורמט
YYYY-MM-DDThh:mm:ss.sss+zz:zz. צריך לציין את השעה עד לרמת השנייה ולכלול אזור זמן. לדוגמה,2015-02-07T13:28:17.239+02:00ו-2017-01-01T00:00:00Zהן שעות תקינות.
תוכן בקשת JSON:
{ "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" }, "_type": "FHIR_RESOURCE_TYPE", "_since": "SINCE_TIMESTAMP" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת (LRO). פעולות ארוכות טווח מוחזרות כשקריאות לשיטות עשויות להימשך זמן נוסף עד להשלמה. שימו לב לערך שלcurl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" }, "_type": "FHIR_RESOURCE_TYPE", "_since": "SINCE_TIMESTAMP" } 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/fhirStores/FHIR_STORE_ID:export"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" }, "_type": "FHIR_RESOURCE_TYPE", "_since": "SINCE_TIMESTAMP" } '@ | 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/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה
projects.locations.datasets.operations.get.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- DATASET_ID: מזהה קבוצת הנתונים
- LOCATION: המיקום של מערך הנתונים
- 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 ContentAPIs Explorer
פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.
"done": true, סימן שהפעולה הממושכת הסתיימה.
ייצוא משאבי FHIR לטבלאות עם חלוקה למחיצות
כדי לייצא משאבי FHIR לטבלאות מחולקות ב-BigQuery, צריך להגדיר את הערך של ה-enum TimePartitioning בשדה lastUpdatedPartitionConfig במאגר FHIR.
הטבלאות המחולקות למחיצות פועלות כמו טבלאות מחולקות למחיצות לפי יחידות זמן ב-BigQuery.
בטבלאות עם חלוקה למחיצות יש עמודה נוספת בשם lastUpdated, שהיא כפילות של העמודה meta.lastUpdated שנוצרת מהשדה meta.lastUpdated במשאב FHIR. ב-BigQuery נעשה שימוש בעמודה lastUpdated כדי לחלק את הטבלאות למחיצות לפי שעה, יום, חודש או שנה.
במאמר בחירת חלוקה למחיצות לפי יום, שעה, חודש או שנה יש המלצות לבחירת רמת פירוט של חלוקה למחיצות.
אי אפשר להמיר טבלאות קיימות ב-BigQuery שלא חולקו למחיצות לטבלאות מחולקות למחיצות. אם מייצאים שינויים במשאב Patient לטבלה Patients שלא מחולקת למחיצות, ואחר כך יוצרים מאגר FHIR חדש עם חלוקת טבלה למחיצות שמייצא לאותו מערך נתונים ב-BigQuery, Cloud Healthcare API עדיין מייצא נתונים לטבלה Patients שלא מחולקת למחיצות. כדי להתחיל להשתמש בטבלה עם חלוקה למחיצות, צריך למחוק את הטבלה הקיימת Patients או להשתמש במערך נתונים אחר ב-BigQuery.
אם מוסיפים חלוקה למחיצות להגדרת מאגר FHIR קיים, עדיין אפשר לייצא לטבלאות קיימות שלא מחולקות למחיצות. עם זאת, חלוקה למחיצות תתבצע רק בטבלאות חדשות.
בדוגמאות הבאות מוסבר איך לייצא משאבי FHIR לטבלאות מחולקות ב-BigQuery.
המסוף
הפעולה הזו לא נתמכת במסוף Google Cloud וב-CLI של gcloud. במקום זאת, אפשר להשתמש ב-curl, ב-PowerShell או בשפה המועדפת.
gcloud
הפעולה הזו לא נתמכת במסוף Google Cloud וב-CLI של gcloud. במקום זאת, אפשר להשתמש ב-curl, ב-PowerShell או בשפה המועדפת.
REST
כדי לייצא משאבי FHIR לטבלאות מחולקות ב-BigQuery, משתמשים בשיטה projects.locations.datasets.fhirStores.export.
מייצאים את משאבי ה-FHIR:
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים
- DATASET_ID: מערך הנתונים הראשי של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
- BIGQUERY_DATASET_ID: השם של מערך הנתונים הקיים ב-BigQuery שאליו מייצאים את משאבי ה-FHIR
- SCHEMA_TYPE: ערך של
SchemaType. משתמשים באחד מהערכים הבאים:-
ANALYTICS. סכימה שמבוססת על מסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, סכימות לא נוצרות עבור השדותParameters.parameter.resource,Bundle.entry.resourceו-Bundle.entry.response.outcome. -
ANALYTICS_V2. סכימה שדומה ל-ANALYTICSעם תמיכה נוספת באפשרויות הבאות:- תוספים עם כמה ערכים לאותו
url - משאבי FHIR שכלולים ב-FHIR
הפונקציה
.ANALYTICS_V2משתמשת ביותר מקום בטבלת היעד מאשר הפונקציהANALYTICS - תוספים עם כמה ערכים לאותו
-
- TIME_PARTITION_TYPE: רמת הגרנולריות שבה יחולקו משאבי FHIR המיוצאים. משתמשים באחד מהערכים הבאים:
-
HOUR: חלוקת נתונים לפי שעה -
DAY: חלוקת נתונים למחיצות לפי יום -
MONTH: חלוקת נתוני המחיצה לפי חודש -
YEAR: חלוקת נתונים לפי שנה
-
- WRITE_DISPOSITION: ערך של
WriteDisposition. משתמשים באחד מהערכים הבאים:-
WRITE_EMPTY: ייצוא נתונים רק אם הטבלה ב-BigQuery ריקה. -
WRITE_TRUNCATE: מחיקת כל הנתונים הקיימים בטבלת BigQuery לפני כתיבת מופעי DICOM. -
WRITE_APPEND: הוספת נתונים לטבלה ב-BigQuery.
-
תוכן בקשת JSON:
{ "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } 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/fhirStores/FHIR_STORE_ID:export"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } '@ | 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/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
אתם אמורים לקבל תגובת JSON שדומה לזו:
כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה
projects.locations.datasets.operations.get.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- DATASET_ID: מזהה קבוצת הנתונים
- LOCATION: המיקום של מערך הנתונים
- 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 ContentAPIs Explorer
פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.
"done": true, סימן שהפעולה הממושכת הסתיימה.
הרצת שאילתות על טבלה מחולקת למחיצות (Partitions)
כדי להפחית את עלויות השאילתות כששולחים שאילתות לטבלאות שמחולקות למחיצות, משתמשים בפסקה WHERE כדי לסנן לפי יחידות זמן.
לדוגמה, נניח שמגדירים את הערך של
PartitionType
enum ל-DAY.
כדי להריץ שאילתה בטבלה Patients לגבי משאבי מטופלים שעודכנו בתאריך מסוים, מריצים את השאילתה הבאה:
SELECT * FROM `PROJECT_ID.BIGQUERY_DATASET.Patients` WHERE DATE(lastUpdated) = 'YYYY-MM-DD'
ייצוא מצטבר
אפשר לציין חותמת זמן כדי לייצא רק משאבי FHIR שנוספו למאגר FHIR מאז ייצוא קודם מוצלח. כך משפרים את הביצועים ונמנעים מהעלות של ייצוא מחדש של כל מאגר ה-FHIR, וגם מוודאים שהנתונים המיוצאים תמיד עדכניים.
כשמתקשרים אל fhirStores.export, צריך לציין את חותמת הזמן בשדה _since.
פתרון בעיות בבקשות לייצוא FHIR
אם מתרחשות שגיאות במהלך בקשת ייצוא של FHIR, השגיאות נרשמות ביומן ב-Cloud Logging. מידע נוסף זמין במאמר צפייה ביומני שגיאות ב-Cloud Logging.
אם כל הפעולה מחזירה שגיאה, אפשר לעיין במאמר בנושא פתרון בעיות בפעולות ארוכות טווח.
אי אפשר להמיר עמודה מ-NULLABLE ל-REPEATED
השגיאה הזו נגרמת בגלל תוסף שחוזר על עצמו. כדי לפתור את השגיאה, צריך להשתמש בסוג הסכימה ANALYTICS_V2. אם אתם משתמשים ב-ANALYTICS_V2, יכול להיות שיש סתירה בין שני תוספים, או בין תוסף לבין שדה אחר.
שמות העמודות נוצרים מהטקסט שאחרי התו / האחרון בכתובות ה-URL של התוספים. אם כתובת URL של תוסף מסתיימת בערך כמו /resource_field name, יכול להיווצר קונפליקט. \
כדי למנוע את השגיאה הזו בעתיד, אל תשתמשו בתוספים אם שמות השדות שלהם זהים לשמות השדות של המשאבים שאתם מאכלסים.
המאמרים הבאים
- מידע נוסף על ניהול נתונים ואבטחה ב-BigQuery זמין במאמר סקירה כללית של אבטחת נתונים וניהול נתונים.