Halaman ini menjelaskan cara mengonfigurasi penyimpanan FHIR untuk otomatis mengekspor resource FHIR ke tabel BigQuery setiap kali resource FHIR dibuat, diperbarui, di-patch, atau dihapus. Proses ini disebut streaming BigQuery.
Anda dapat menggunakan streaming BigQuery untuk melakukan hal berikut:
- Sinkronkan data di penyimpanan FHIR dengan set data BigQuery secara hampir real time.
- Lakukan kueri kompleks pada data FHIR tanpa perlu mengekspornya ke BigQuery setiap kali Anda ingin menganalisis data.
Untuk meningkatkan performa kueri dan mengurangi biaya, Anda dapat mengonfigurasi streaming BigQuery ke tabel berpartisi. Untuk mengetahui petunjuknya, lihat Menstreaming resource FHIR ke tabel berpartisi.
Sebelum memulai
Baca artikel Mengekspor resource FHIR ke BigQuery untuk memahami cara kerja proses ekspor.
Batasan
Jika Anda mengimpor resource FHIR dari Cloud Storage, perubahan tidak akan di-streaming ke BigQuery.
Menetapkan izin BigQuery
Untuk mengaktifkan streaming BigQuery, Anda harus memberikan izin tambahan ke akun layanan Agen Layanan Cloud Healthcare. Untuk mengetahui informasi selengkapnya, lihat Izin BigQuery penyimpanan FHIR.
Mengonfigurasi streaming BigQuery di penyimpanan FHIR
Untuk mengaktifkan streaming BigQuery, konfigurasikan objek StreamConfigs
di penyimpanan FHIR Anda. Di StreamConfigs
, Anda dapat mengonfigurasi array resourceTypes[]
untuk mengontrol jenis resource FHIR yang berlaku untuk streaming BigQuery. Jika Anda tidak menentukan resourceTypes[]
, streaming BigQuery akan berlaku untuk semua jenis resource FHIR.
Untuk penjelasan konfigurasi lain yang tersedia di StreamConfigs
, seperti
BigQueryDestination
,
lihat Mengekspor resource FHIR.
Contoh berikut menunjukkan cara mengaktifkan streaming BigQuery di penyimpanan FHIR yang ada.
Konsol
Untuk mengonfigurasi streaming BigQuery di penyimpanan FHIR yang ada menggunakan konsol Google Cloud, selesaikan langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Datasets.
Pilih set data yang berisi penyimpanan FHIR yang ingin Anda edit.
Dalam daftar Penyimpanan data, klik penyimpanan FHIR yang ingin Anda edit.
Di bagian BigQuery streaming, selesaikan langkah-langkah berikut:
- Klik Tambahkan konfigurasi streaming baru.
- Di bagian New streaming configuration, klik Browse untuk memilih set data BigQuery tempat Anda ingin memutar streaming resource FHIR yang diubah.
- Di dropdown Schema type, pilih skema output untuk tabel BigQuery. Skema berikut tersedia:
- Analytics. Skema berdasarkan dokumen SQL on FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak dibuat untuk kolom
Parameters.parameter.resource
,Bundle.entry.resource
, danBundle.entry.response.outcome
. - Analytics V2. Skema yang mirip dengan skema Analytics, dengan dukungan tambahan untuk hal berikut:
- Ekstensi dengan beberapa nilai untuk
url
yang sama - Resource FHIR yang Disertakan
- Ekstensi dengan beberapa nilai untuk
- Analytics. Skema berdasarkan dokumen SQL on FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak dibuat untuk kolom
- Pilih tingkat kedalaman di penggeser Kedalaman Struktur Rekursif untuk menetapkan kedalaman untuk semua struktur rekursif dalam skema output. Secara default, nilai rekursifnya adalah 2.
- Dalam daftar Select FHIR resource types, pilih jenis resource yang akan di-streaming.
Klik Done untuk menyimpan konfigurasi streaming.
gcloud
gcloud CLI tidak mendukung tindakan ini. Sebagai gantinya, gunakan konsol Google Cloud, curl
, PowerShell, atau bahasa pilihan Anda.
REST
Untuk mengonfigurasi streaming BigQuery di penyimpanan FHIR yang ada, gunakan metode projects.locations.datasets.fhirStores.patch
.
Contoh berikut tidak menentukan array resourceTypes[]
, sehingga streaming BigQuery diaktifkan untuk semua jenis resource FHIR.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: ID project Google Cloud Anda
- LOCATION: lokasi set data
- DATASET_ID: set data induk penyimpanan FHIR
- FHIR_STORE_ID: ID FHIR store
- BIGQUERY_DATASET_ID: nama set data BigQuery yang ada tempat Anda melakukan streaming perubahan resource FHIR
- SCHEMA_TYPE: nilai untuk enum
SchemaType
. Gunakan salah satu nilai berikut:ANALYTICS
. Skema berdasarkan dokumen SQL on FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak dibuat untuk kolomParameters.parameter.resource
,Bundle.entry.resource
, danBundle.entry.response.outcome
.ANALYTICS_V2
. Skema yang mirip denganANALYTICS
dengan dukungan tambahan untuk hal berikut:- Ekstensi dengan beberapa nilai untuk
url
yang sama - Resource FHIR yang Disertakan
.ANALYTICS_V2
menggunakan lebih banyak ruang di tabel tujuan daripadaANALYTICS
- Ekstensi dengan beberapa nilai untuk
- WRITE_DISPOSITION: nilai untuk enum
WriteDisposition
. Gunakan salah satu nilai berikut:WRITE_EMPTY
. Hanya ekspor data jika tabel BigQuery tujuan kosong.WRITE_TRUNCATE
. Menghapus semua data yang ada di tabel BigQuery sebelum menulis resource FHIR.WRITE_APPEND
. Menambahkan data ke tabel BigQuery tujuan.
Meminta isi JSON:
{ "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
cat > request.json << 'EOF' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] } EOF
Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:
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
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
@' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", }, "writeDisposition": "WRITE_DISPOSITION" } } ] } '@ | Out-File -FilePath request.json -Encoding utf8
Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:
$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 Content
APIs Explorer
Salin isi permintaan dan buka halaman referensi metode. Panel API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom lainnya yang wajib diisi, lalu klik Jalankan.
Anda akan menerima respons JSON yang mirip dengan berikut ini.
Jika Anda mengonfigurasi kolom apa pun di resource FhirStore
, kolom tersebut juga akan muncul dalam respons.
Secara default, saat Anda melakukan streaming perubahan resource FHIR ke BigQuery, tampilan akan dibuat untuk setiap resource yang di-streaming. Tampilan memiliki properti berikut:
- Namanya sama dengan resource dan tabel resource di set data BigQuery. Misalnya, saat Anda melakukan streaming resource
Pasien, tabel bernama
Patient
akan dibuat dengan tampilan bernamaPatientview
. - File ini hanya berisi versi resource saat ini, bukan semua versi historis.
Men-streaming resource FHIR ke tabel berpartisi
Untuk mengekspor resource FHIR ke tabel berpartisi BigQuery, tetapkan enum
TimePartitioning
di kolom
lastUpdatedPartitionConfig
di penyimpanan FHIR Anda.
Tabel yang dipartisi berfungsi seperti tabel berpartisi unit waktu BigQuery.
Tabel berpartisi memiliki kolom tambahan bernama lastUpdated
, yang merupakan duplikat
kolom meta.lastUpdated
yang dihasilkan dari kolom meta.lastUpdated
di
resource FHIR. BigQuery menggunakan kolom lastUpdated
untuk mempartisi tabel berdasarkan jam, hari, bulan, atau tahun.
Lihat Memilih partisi harian, per jam, bulanan, atau tahunan untuk mengetahui rekomendasi tentang cara memilih perincian partisi.
Anda tidak dapat mengonversi tabel BigQuery yang ada dan tidak dipartisi menjadi tabel berpartisi. Jika Anda mengekspor perubahan Resource pasien ke tabel Patients
yang tidak dipartisi, lalu membuat penyimpanan FHIR baru dengan partisi tabel yang diekspor ke set data BigQuery yang sama, Cloud Healthcare API masih mengekspor data ke tabel Patients
yang tidak dipartisi. Untuk mulai menggunakan tabel berpartisi,
hapus tabel Patients
yang ada atau gunakan set data BigQuery yang berbeda.
Jika menambahkan partisi ke konfigurasi penyimpanan FHIR yang ada, Anda masih dapat mengekspor ke tabel yang tidak berpartisi yang ada. Namun, partisi hanya akan berlaku pada tabel baru.
Contoh berikut menunjukkan cara mengaktifkan streaming BigQuery ke tabel yang dipartisi di penyimpanan FHIR yang ada.
Konsol
Konsol Google Cloud dan gcloud CLI tidak mendukung tindakan ini. Sebagai gantinya, gunakan curl
, PowerShell, atau bahasa pilihan Anda.
gcloud
Konsol Google Cloud dan gcloud CLI tidak mendukung tindakan ini. Sebagai gantinya, gunakan curl
, PowerShell, atau bahasa pilihan Anda.
REST
Untuk mengonfigurasi streaming BigQuery ke tabel yang dipartisi di penyimpanan FHIR yang ada, gunakan metode projects.locations.datasets.fhirStores.patch
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: ID project Google Cloud Anda
- LOCATION: lokasi set data
- DATASET_ID: set data induk penyimpanan FHIR
- FHIR_STORE_ID: ID FHIR store
- BIGQUERY_DATASET_ID: nama set data BigQuery yang ada tempat Anda melakukan streaming perubahan resource FHIR
- SCHEMA_TYPE: nilai untuk enum
SchemaType
. Gunakan salah satu nilai berikut:ANALYTICS
. Skema berdasarkan dokumen SQL on FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak dibuat untuk kolomParameters.parameter.resource
,Bundle.entry.resource
, danBundle.entry.response.outcome
.ANALYTICS_V2
. Skema yang mirip denganANALYTICS
dengan dukungan tambahan untuk hal berikut:- Ekstensi dengan beberapa nilai untuk
url
yang sama - Resource FHIR yang Disertakan
.ANALYTICS_V2
menggunakan lebih banyak ruang di tabel tujuan daripadaANALYTICS
- Ekstensi dengan beberapa nilai untuk
- TIME_PARTITION_TYPE: tingkat perincian untuk mempartisi resource FHIR yang diekspor. Gunakan salah satu nilai berikut:
HOUR
: mempartisi data menurut jamDAY
: mempartisi data menurut hariMONTH
: mempartisi data menurut bulanYEAR
: mempartisi data menurut tahun
- WRITE_DISPOSITION: nilai untuk enum
WriteDisposition
. Gunakan salah satu nilai berikut:WRITE_EMPTY
. Hanya ekspor data jika tabel BigQuery tujuan kosong.WRITE_TRUNCATE
. Menghapus semua data yang ada di tabel BigQuery sebelum menulis resource FHIR.WRITE_APPEND
. Menambahkan data ke tabel BigQuery tujuan.
Meminta isi JSON:
{ "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } ] }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
cat > request.json << 'EOF' { "streamConfigs": [ { "bigqueryDestination": { "datasetUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID", "schemaConfig": { "schemaType": "SCHEMA_TYPE", "lastUpdatedPartitionConfig": { "type": "TIME_PARTITION_TYPE" } }, "writeDisposition": "WRITE_DISPOSITION" } } ] } EOF
Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:
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
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
@' { "streamConfigs": [ { "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
Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:
$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 Content
APIs Explorer
Salin isi permintaan dan buka halaman referensi metode. Panel API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom lainnya yang wajib diisi, lalu klik Jalankan.
Anda akan melihat respons JSON seperti berikut:
Membuat kueri tabel berpartisi
Untuk mengurangi biaya kueri saat membuat kueri tabel yang dipartisi, gunakan klausa WHERE
untuk memfilter menurut unit waktu.
Misalnya, Anda menetapkan enum
PartitionType
ke DAY
.
Untuk membuat kueri tabel Patients
untuk resource Pasien yang berubah pada tanggal
tertentu, jalankan kueri berikut:
SELECT * FROM `PROJECT_ID.BIGQUERY_DATASET.Patients` WHERE DATE(lastUpdated) = 'YYYY-MM-DD'
Bermigrasi dari Analytics ke Analytics V2
Anda tidak dapat memigrasikan set data BigQuery yang ada dari skema Analytics
ke skema Analytics V2
menggunakan metode apa pun, termasuk yang berikut:
- Mengubah jenis skema tabel di BigQuery.
- Mengubah jenis skema dalam konfigurasi streaming FHIR yang ada.
Hal ini karena kolom tabel BigQuery untuk ekstensi FHIR dalam skema Analytics
memiliki mode yang ditetapkan ke NULLABLE
, sedangkan kolom dalam skema Analytics V2
ditetapkan ke REPEATED
. BigQuery
tidak mengizinkan perubahan mode kolom dari NULLABLE
menjadi REPEATED
.
Oleh karena itu, kedua jenis skema tersebut tidak kompatibel.
Untuk memigrasikan jenis skema resource FHIR yang diekspor dari Analytics
ke
Analytics V2
, Anda harus mengekspor resource FHIR ke set data BigQuery
baru menggunakan konfigurasi streaming baru dengan jenis skema yang diperbarui. Caranya, lakukan langkah-langkah berikut:
Tambahkan konfigurasi streaming baru ke penyimpanan FHIR dengan jenis skema yang ditetapkan ke
Analytics V2
.Isi ulang data yang ada dengan mengekspor data FHIR yang ada menggunakan setelan berikut. Lihat mengekspor resource FHIR untuk mengetahui petunjuk cara mengonfigurasi setelan ini menggunakan konsol Google Cloud, Google Cloud CLI, atau REST API. Setelan berikut berlaku untuk REST API:
- Tetapkan
WriteDisposition
keWRITE_APPEND
untuk menambahkan data ke tabel tujuan. - Tetapkan
SchemaType
keANALYTICS_V2
.
- Tetapkan
Tampilan di BigQuery yang sesuai dengan beberapa atau semua resource FHIR di set data BigQuery asli mungkin tidak ada di set data baru Anda. Untuk memecahkan masalah ini, lihat Pembuatan tampilan resource FHIR tidak ada.
Memecahkan masalah streaming FHIR
Jika error terjadi saat perubahan resource dikirim ke BigQuery, error tersebut akan dicatat ke Cloud Logging. Untuk mengetahui informasi selengkapnya, lihat Melihat log error di Cloud Logging.
Tidak dapat mengonversi kolom dari NULLABLE menjadi REPEATED
Error ini disebabkan oleh ekstensi yang berulang. Untuk mengatasi error ini, gunakan jenis skema ANALYTICS_V2
. Jika sudah menggunakan ANALYTICS_V2
, Anda mungkin memiliki
konflik antara dua ekstensi, atau konflik antara ekstensi dan kolom
lain.
Nama kolom dihasilkan dari teks setelah karakter /
terakhir di URL ekstensi. Jika URL ekstensi diakhiri dengan nilai seperti /resource_field name
, konflik dapat terjadi.
Untuk mencegah error ini terjadi lagi, jangan gunakan ekstensi jika nama kolomnya sama dengan kolom resource yang Anda isi.
Pembuatan tampilan resource FHIR tidak ada
Jika Anda mengekspor secara massal resource FHIR ke BigQuery sebelum melakukan streaming resource FHIR tersebut, BigQuery tidak akan membuat tampilan untuk resource FHIR.
Misalnya, Anda mungkin tidak melihat tampilan apa pun untuk resource Encounter dalam situasi berikut:
Anda mengonfigurasi streaming BigQuery di penyimpanan FHIR, lalu menggunakan REST API untuk membuat resource Pasien.
BigQuery membuat tabel dan tampilan untuk resource Pasien.
Anda mengekspor resource Encounter secara massal ke set data BigQuery yang sama dengan langkah sebelumnya.
BigQuery membuat tabel untuk resource Encounter.
Anda menggunakan REST API untuk membuat resource Pertemuan.
Setelah langkah ini, tampilan BigQuery tidak dibuat untuk resource Encounter.
Untuk mengatasi masalah ini, gunakan kueri berikut untuk membuat tampilan:
SELECT * EXCEPT (_resource_row_id) FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY meta.lastUpdated DESC, commitTimestamp DESC) as _resource_row_id, * FROM `PROJECT_ID.BIGQUERY_DATASET_ID.RESOURCE_TABLE` AS p ) AS p WHERE p._resource_row_id=1 AND NOT EXISTS ( SELECT * FROM UNNEST(p.meta.tag) WHERE code = 'DELETE');
Ganti kode berikut:
- PROJECT_ID: ID project Google Cloud Anda
- BIGQUERY_DATASET_ID: ID set data BigQuery tempat Anda mengekspor resource FHIR secara massal
- RESOURCE_TABLE: nama tabel yang sesuai dengan resource FHIR yang ingin Anda buat tampilannya
Setelah membuat tampilan, Anda dapat terus melakukan streaming perubahan ke resource FHIR dan tampilan akan diperbarui.
Langkah selanjutnya
Untuk tutorial tentang kasus penggunaan untuk melakukan streaming perubahan resource FHIR, lihat Melakukan streaming dan menyinkronkan resource FHIR dengan BigQuery.