במדריך הזה מוסבר על תרחישים שבהם אפשר להשתמש בהזנת נתונים בזמן אמת ב-BigQuery כדי לשמור על סנכרון של מאגר FHIR עם מערך נתונים ב-BigQuery כמעט בזמן אמת.
מטרות
במדריך הזה מוסבר איך:
- הגדרת הרשאות ב-BigQuery.
- יוצרים מאגר FHIR ומוסיפים משאבי מטופלים.
- מגדירים מקור נתונים של BigQuery Export בחנות FHIR.
- בודקים את הגדרת הסטרימינג אל BigQuery.
- ייצוא משאבי FHIR קיימים אל BigQuery.
- הזרמת משאבים מכמה מאגרי FHIR לאותו מערך נתונים ב-BigQuery.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
מפעילים את Cloud Healthcare API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
שלב 1: הגדרת הרשאות ב-BigQuery
כדי להזרים שינויים במשאבי FHIR ל-BigQuery, צריך לתת הרשאות נוספות לסוכן Cloud Healthcare חשבון השירות. מידע נוסף זמין במאמר הרשאות BigQuery במאגר FHIR.
שלב 2: הגדרה ואימות של סטרימינג ב-BigQuery
כדי להפעיל סטרימינג ל-BigQuery:
יצירה של מאגר FHIR והוספה של משאבי מטופלים
כדי ליצור מאגר FHIR ולהוסיף שני משאבי Patient, מבצעים את השלבים הבאים:
יוצרים את מאגר ה-FHIR:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID:
מזהה של מאגר FHIR. מזהה מאגר FHIR צריך לכלול את הפרטים הבאים:
- מזהה ייחודי במערך הנתונים
- מחרוזת Unicode באורך 1-256 תווים, שכוללת את הרכיבים הבאים:
- Numbers
- מכתבים
- קו תחתון
- מקפים
- פרקי הזמן
- FHIR_STORE_VERSION: גרסת ה-FHIR של מאגר ה-FHIR. האפשרויות הזמינות הן DSTU2, STU3 או R4.
תוכן בקשת JSON:
{ "version": "FHIR_STORE_VERSION" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "version": "FHIR_STORE_VERSION" } 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?fhirStoreId=FHIR_STORE_ID"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "version": "FHIR_STORE_VERSION" } '@ | 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?fhirStoreId=FHIR_STORE_ID" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
אתם אמורים לקבל תגובת JSON שדומה לזו:
יוצרים את משאב המטופל הראשון במאגר FHIR:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
תוכן בקשת JSON:
{ "name": [ { "use": "official", "family": "Smith", "given": [ "Darcy" ] } ], "gender": "female", "birthDate": "1970-01-01", "resourceType": "Patient" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "name": [ { "use": "official", "family": "Smith", "given": [ "Darcy" ] } ], "gender": "female", "birthDate": "1970-01-01", "resourceType": "Patient" } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "name": [ { "use": "official", "family": "Smith", "given": [ "Darcy" ] } ], "gender": "female", "birthDate": "1970-01-01", "resourceType": "Patient" } '@ | 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/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
יוצרים את משאב המטופל השני במאגר FHIR:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
תוכן בקשת JSON:
{ "name": [ { "use": "official", "family": "Zhang", "given": [ "Michael" ] } ], "gender": "male", "birthDate": "1980-01-01", "resourceType": "Patient" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "name": [ { "use": "official", "family": "Zhang", "given": [ "Michael" ] } ], "gender": "male", "birthDate": "1980-01-01", "resourceType": "Patient" } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "name": [ { "use": "official", "family": "Zhang", "given": [ "Michael" ] } ], "gender": "male", "birthDate": "1980-01-01", "resourceType": "Patient" } '@ | 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/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
מחפשים את משאבי המטופלים במאגר FHIR ומוודאים שהמאגר מכיל את שני משאבי המטופלים:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:
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/fhirStores/FHIR_STORE_ID/fhir/Patient"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/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
הגדרת סטרימינג של BigQuery בחנות FHIR
מעדכנים את מאגר FHIR כדי להגדיר את הסטרימינג של BigQuery. אחרי שמגדירים את הסטרימינג, Cloud Healthcare API מעביר בסטרימינג את כל השינויים במשאבים למערך הנתונים ב-BigQuery.
מעדכנים את מאגר ה-FHIR הקיים כדי להוסיף את המיקום של מערך הנתונים ב-BigQuery:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר FHIR
- BIGQUERY_PROJECT_ID: הפרויקט Google Cloud שמכיל את מערך הנתונים ב-BigQuery לשינויים בסטרימינג של משאבי FHIR
- BIGQUERY_DATASET_ID: מערך הנתונים ב-BigQuery שאליו מועברות בסטרימינג שינויים במשאבי FHIR
תוכן בקשת JSON:
{ "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS_V2" } } } ] }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS_V2" } } } ] } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X PATCH \
-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?updateMask=streamConfigs"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS_V2" } } } ] } '@ | Out-File -FilePath request.json -Encoding utf8לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-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?updateMask=streamConfigs" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
אתם אמורים לקבל תגובת JSON שדומה לזו:
אימות הגדרת הסטרימינג ל-BigQuery
כדי לוודא שהסטרימינג מוגדר בצורה נכונה, מבצעים את השלבים הבאים:
יוצרים משאב שלישי של מטופל במאגר FHIR:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- FHIR_STORE_ID: מזהה מאגר ה-FHIR
תוכן בקשת JSON:
{ "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" } '@ | 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/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
מריצים את הפקודה
bq queryכדי להריץ שאילתה על הטבלהBIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient. ב-BigQuery, הטבלאות מאורגנות לפי סוג המשאב של FHIR. משאב המטופל השלישי שיצרתם נמצא בטבלהPatient.bq query \ --project_id=BIGQUERY_PROJECT_ID \ --use_legacy_sql=false \ 'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'
השאילתה מחזירה את התוצאה הבאה. התוצאה מראה שיש רשומה אחת של משאב Patient בטבלה ב-BigQuery, כי הוספתם את משאב Patient אחרי שהגדרתם סטרימינג במאגר FHIR.
+-----+ | f0_ | +-----+ | 1 | +-----+
שלב 3: ייצוא משאבי FHIR קיימים ל-BigQuery
אם יש לכם מאגר FHIR קיים שמכיל נתונים שאתם רוצים לסנכרן עם מערך נתונים ב-BigQuery, אתם צריכים לבצע את השלבים הבאים כדי לוודא שהנתונים הקיימים נמצאים ב-BigQuery:
- מגדירים סטרימינג ל-BigQuery.
- ייצוא הנתונים הקיימים למערך הנתונים ב-BigQuery.
כדי לייצא את שני משאבי המטופלים שהיו במאגר FHIR לפני שהגדרתם את הסטרימינג למערך הנתונים ב-BigQuery, צריך לבצע את השלבים הבאים:
כדי לייצא את המשאבים במאגר FHIR ל-BigQuery, מריצים את הפקודה
gcloud healthcare fhir-stores export bq. הפקודה משתמשת בדגל--write-disposition=write-append, שמוסיף נתונים לטבלה הקיימת BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient.gcloud healthcare fhir-stores export bq FHIR_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --bq-dataset=bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET \ --schema-type=analytics_v2 \ --write-disposition=write-append
מריצים שאילתה בטבלה
BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patientכדי לוודא את מספר משאבי המטופלים במערך הנתונים ב-BigQuery:bq query \ --project_id=BIGQUERY_PROJECT_ID \ --use_legacy_sql=false \ 'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'
השאילתה מחזירה את התוצאה הבאה, שבה מוצגים 4 רשומות של משאב Patient בטבלה ב-BigQuery:
+-----+ | f0_ | +-----+ | 4 | +-----+מספר משאבי המטופלים בפועל בטבלה ב-BigQuery הוא 3, אבל השאילתה מחזירה 4. יכול להיות שיהיו אי-התאמות אם משאב מסוים מכיל כפילויות מפעולות שונות. במקרה הזה, משאב המטופל הראשון נוסף לטבלה ב-BigQuery פעמיים:
- מתי נוצר משאב המטופל
- מתי המשאבים במאגר FHIR יוצאו ל-BigQuery
הטבלה ב-BigQuery מכילה גם היסטוריית שינויים של משאב המטופל הראשון. לדוגמה, אם מוחקים את משאב המטופל באמצעות
fhir.delete, בטבלת BigQuery יש עמודהmeta.tag.codeעם הערךDELETE.כדי לקבל את תמונת המצב העדכנית של הנתונים במאגר FHIR, שולחים שאילתה לתצוגה. Cloud Healthcare API יוצר את התצוגה על ידי בדיקה רק של הגרסה האחרונה של כל משאב. הדרך הכי מדויקת לשמור על סנכרון בין מאגר FHIR לבין טבלה ב-BigQuery התואמת היא באמצעות שליחת שאילתות לתצוגות מפורטות.
כדי לשלוח שאילתה לתצוגה, מריצים את הפקודה הבאה:
bq query \ --project_id=BIGQUERY_PROJECT_ID \ --use_legacy_sql=false \ 'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.PatientView`'
השאילתה מחזירה את התוצאה הבאה, שבה מוצג בצורה נכונה שיש 3 משאבי מטופל בטבלה ב-BigQuery:
+-----+ | f0_ | +-----+ | 3 | +-----+
שלב 4: הזרמת משאבים מכמה מאגרי FHIR לאותו מערך נתונים ב-BigQuery
במקרים מסוימים, יכול להיות שתרצו להזרים משאבי FHIR מכמה מאגרי FHIR לאותו מערך נתונים ב-BigQuery כדי לבצע ניתוח של משאבי ה-FHIR המצטברים ממאגרי ה-FHIR.
בשלבים הבאים, יוצרים מאגר FHIR שני באותו מערך נתונים של Cloud Healthcare API כמו מאגר ה-FHIR הראשון, אבל אפשר להשתמש במאגרי FHIR ממערכי נתונים שונים כשמצברים משאבי FHIR.
יוצרים מאגר FHIR שני עם סטרימינג ל-BigQuery מופעל, ומשתמשים באותו מערך נתונים ב-BigQuery שבו השתמשתם בשלב הגדרת סטרימינג ל-BigQuery במאגר FHIR.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- SECOND_FHIR_STORE_ID: מזהה של מאגר FHIR השני. המזהה של מאגר FHIR צריך להיות ייחודי בקבוצת הנתונים. מזהה מאגר FHIR יכול להיות כל מחרוזת Unicode באורך 1 עד 256 תווים, שמורכבת ממספרים, אותיות, קווים תחתונים, מקפים ונקודות.
- FHIR_STORE_VERSION: גרסת חנות ה-FHIR: DSTU2, STU3 או R4
- BIGQUERY_PROJECT_ID: הפרויקט Google Cloud שמכיל את מערך הנתונים ב-BigQuery לשינויים בסטרימינג של משאבי FHIR
- BIGQUERY_DATASET_ID: מערך הנתונים ב-BigQuery שאליו מועברות בסטרימינג שינויים במשאבי FHIR
תוכן בקשת JSON:
{ "version": "FHIR_STORE_VERSION" "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS" } } } ] }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "version": "FHIR_STORE_VERSION" "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS" } } } ] } 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?fhirStoreId=SECOND_FHIR_STORE_ID"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "version": "FHIR_STORE_VERSION" "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "ANALYTICS" } } } ] } '@ | 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?fhirStoreId=SECOND_FHIR_STORE_ID" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
אתם אמורים לקבל תגובת JSON שדומה לזו:
יוצרים משאב Patient בחנות השנייה של FHIR:
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
- LOCATION: המיקום של מערך הנתונים הראשי
- DATASET_ID: מערך הנתונים ברמת ההורה של מאגר FHIR
- SECOND_FHIR_STORE_ID: המזהה השני של מאגר FHIR
תוכן בקשת JSON:
{ "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/SECOND_FHIR_STORE_ID/fhir/Patient"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "name": [ { "use": "official", "family": "Lee", "given": [ "Alex" ] } ], "gender": "male", "birthDate": "1990-01-01", "resourceType": "Patient" } '@ | 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/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/SECOND_FHIR_STORE_ID/fhir/Patient" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
שולחים שאילתה לטבלה
BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patientכדי לוודא את מספר משאבי המטופלים בטבלה ב-BigQuery:bq query \ --project_id=BIGQUERY_PROJECT_ID \ --use_legacy_sql=false \ 'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.Patient`'
כשמבצעים סטרימינג של הנתונים לגבי משאב המטופל החדש, מערכת BigQuery משתמשת בטבלה
Patientהקיימת במערך הנתונים של BigQuery. השאילתה מחזירה את התוצאה הבאה, שבה מוצגות 5 רשומות של משאב Patient בטבלה ב-BigQuery. במאמר ייצוא משאבי FHIR קיימים ל-BigQuery מוסבר למה הטבלה מכילה 5 משאבים במקום 4.+-----+ | f0_ | +-----+ | 5 | +-----+מריצים את הפקודה הבאה כדי לשלוח שאילתה לתצוגה:
bq query \ --project_id=BIGQUERY_PROJECT_ID \ --use_legacy_sql=false \ 'SELECT COUNT(*) FROM `BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID.PatientView`'
השאילתה מחזירה את התוצאה הבאה, שבה אפשר לראות שיש 4 משאבי מטופלים במאגרי FHIR המשולבים הראשונה והשנייה ובטבלה ב-BigQuery:
+-----+ | f0_ | +-----+ | 4 | +-----+
הסרת המשאבים
אם יצרתם פרויקט חדש לצורך המדריך הזה, פועלים לפי השלבים במאמר בנושא מחיקת הפרויקט. כדי למחוק רק את המשאבים של Cloud Healthcare API ו-BigQuery, צריך לבצע את השלבים במאמרים מחיקת מערך הנתונים של Cloud Healthcare API ומחיקת מערך הנתונים של BigQuery.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת מערך הנתונים של Cloud Healthcare API
אם אתם לא צריכים יותר את מערך הנתונים של Cloud Healthcare API שנוצר במדריך הזה, אתם יכולים למחוק אותו. מחיקה של מערך נתונים מוחקת אותו באופן סופי, וגם את כל מאגרי ה-FHIR שהוא מכיל.
כדי למחוק קבוצת נתונים, מפעילים את הפקודה
gcloud healthcare datasets delete:gcloud healthcare datasets delete DATASET_ID \ --location=LOCATION \ --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
- DATASET_ID: מערך הנתונים של Cloud Healthcare API
- LOCATION: המיקום של מערך הנתונים
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud
כדי לאשר, מקלידים Y.
הפלט שיתקבל:
Deleted dataset [DATASET_ID].
מחיקת מערך הנתונים ב-BigQuery
אם אתם לא צריכים יותר את מערך הנתונים ב-BigQuery שנוצר במדריך הזה, אתם יכולים למחוק אותו. מחיקה של מערך נתונים מוחקת אותו ואת כל הטבלאות שהוא מכיל באופן סופי.
מסירים את BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID dataset על ידי הרצת הפקודה
bq rm:bq rm --recursive=true BIGQUERY_PROJECT_ID.BIGQUERY_DATASET_ID
הדגל
--recursiveמוחק את כל הטבלאות במערך הנתונים, כולל הטבלהPatient.כדי לאשר, מקלידים Y.
המאמרים הבאים
- אם מתרחשות שגיאות במהלך הסטרימינג ל-BigQuery, השגיאות מתועדות ב-Cloud Logging. מידע נוסף זמין במאמר צפייה ביומני שגיאות ב-Cloud Logging.
- סקירה כללית על ייצוא משאבי FHIR ל-BigQuery
- כדי ליצור, להציג, לרשום או למחוק מאגרי FHIR, אפשר לעיין במאמר יצירה וניהול של מאגרי FHIR.