ייצוא משאבי FHIR באצווה ל-BigQuery

בדף הזה מוסבר איך לייצא משאבי 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 , מבצעים את השלבים הבאים:

  1. נכנסים לדף Datasets במסוף Google Cloud .

    למעבר אל Datasets

  2. לוחצים על מערך הנתונים שכולל את מאגר ה-FHIR עם הנתונים שרוצים לייצא.

  3. באותה שורה של מאגר FHIR, פותחים את הרשימה פעולות ובוחרים באפשרות ייצוא.

  4. בדף Export FHIR resources שמופיע, מחפשים את הקטע Select a destination. בוחרים באפשרות טבלה ב-BigQuery.

  5. בקטע Destination table write disposition בוחרים באחת מהאפשרויות הבאות כדי לקבוע את אופן הפעולה של פעולת הייצוא:

    • ייצוא נתונים רק אם טבלאות היעד ריקות: האפשרות הזו שוות ערך לבחירה של enum‏ WRITE_EMPTY ב-WriteDisposition.
    • הוספת נתונים לטבלאות היעד: האפשרות הזו שוות ערך לבחירה של הערך WRITE_APPEND ב-enum‏ WriteDisposition.
    • ‫Erase all existing data in destination tables before writing the FHIR resources (מחיקת כל הנתונים הקיימים בטבלאות היעד לפני כתיבת משאבי ה-FHIR): האפשרות הזו שוות ערך לבחירה בערך WRITE_TRUNCATE enum ב-WriteDisposition.
  6. בקטע FHIR export configuration, לוחצים על Browse כדי לבחור את הפרויקט ומערך הנתונים ב-BigQuery.

  7. בתפריט הנפתח Schema type, בוחרים את סכימת הפלט של טבלת BigQuery. אלה הסכימות שזמינות:

    • ‫Analytics. סכימה שמבוססת על המסמך SQL on FHIR. מכיוון שב-BigQuery אפשר להשתמש רק ב-10,000 עמודות לכל טבלה, סכימות לא נוצרות עבור השדות Parameters.parameter.resource, Bundle.entry.resource ו-Bundle.entry.response.outcome.
    • ‫Analytics V2. סכימה דומה לסכימה של Analytics, עם תמיכה נוספת בפריטים הבאים: סכימת Analytics V2 תופסת יותר מקום בטבלת היעד מאשר סכימת Analytics.

  8. בוחרים רמת עומק במכוון Recursive Structure Depth (עומק המבנה הרקורסיבי) כדי להגדיר את העומק לכל המבנים הרקורסיביים בסכימת הפלט. כברירת מחדל, הערך הרקורסיבי הוא 2.

    מידע נוסף זמין במאמר recursiveStructureDepth.

  9. לוחצים על ייצוא כדי לייצא משאבי FHIR ל-BigQuery.

  10. כדי לעקוב אחרי סטטוס הפעולה, לוחצים על הכרטיסייה פעולות. אחרי שהפעולה מסתיימת, מופיעים הסימנים הבאים:
    • בקטע Long-running operation status (סטטוס של פעולה ממושכת) מופיע סימן וי ירוק מתחת לכותרת OK.
    • בקטע סקירה כללית מופיעים סימן וי ירוק והאינדיקטור OK באותה שורה שבה מופיע מזהה הפעולה.
    אם נתקלתם בשגיאות, לוחצים על פעולות ואז על הצגת הפרטים ב-Cloud Logging.

gcloud

כדי לייצא משאבי FHIR ל-BigQuery, מריצים את הפקודה gcloud healthcare fhir-stores export bq.

  1. מייצאים את משאבי ה-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 עם תמיכה נוספת באפשרויות הבאות:

        ‫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
    

  2. כדי לראות פרטים נוספים על הפעולה, מריצים את הפקודה 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.

  1. מייצאים את משאבי ה-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 עם תמיכה נוספת באפשרויות הבאות:

        הפונקציה 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"
    }
    

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

    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 Content

    APIs Explorer

    מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת (LRO). פעולות ארוכות טווח מוחזרות כשקריאות לשיטות עשויות להימשך זמן נוסף עד להשלמה. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה 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 Content

    APIs 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.

  1. מייצאים את משאבי ה-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 עם תמיכה נוספת באפשרויות הבאות:

        הפונקציה 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 Content

    APIs Explorer

    מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה 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 Content

    APIs 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, יכול להיווצר קונפליקט. \

כדי למנוע את השגיאה הזו בעתיד, אל תשתמשו בתוספים אם שמות השדות שלהם זהים לשמות השדות של המשאבים שאתם מאכלסים.

המאמרים הבאים