Halaman ini menjelaskan cara mengonfigurasi penyimpanan FHIR untuk otomatis mengekspor resource FHIR ke tabel BigQuery setiap kali resource FHIR dibuat, diupdate, di-patch, atau dihapus. Proses ini disebut streaming BigQuery.
Anda dapat menggunakan streaming BigQuery untuk melakukan hal berikut:
- Menyinkronkan data di penyimpanan FHIR dengan set data BigQuery hampir secara 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 mendapatkan petunjuk, lihat Streaming 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 FHIR store.
Mengonfigurasi streaming BigQuery di penyimpanan FHIR
Untuk mengaktifkan streaming BigQuery, konfigurasi 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 tentang 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 Google Cloud konsol, selesaikan langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Datasets.
Pilih set data yang berisi penyimpanan FHIR yang ingin Anda edit.
Di daftar Data stores, 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 resource FHIR yang diubah di-streaming.
- 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 berikut ini: Skema Analytics V2 menggunakan lebih banyak ruang di tabel tujuan daripada skema Analytics.
- 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 semua struktur rekursif dalam skema output. Secara default, nilai rekursif adalah 2.
- Di daftar Pilih jenis resource FHIR, pilih jenis resource yang akan di-streaming.
Klik Selesai untuk menyimpan konfigurasi streaming.
gcloud
gcloud CLI tidak mendukung tindakan ini. Sebagai gantinya, gunakan Google Cloud konsol, 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 Google Cloud project Anda
- LOCATION: lokasi set data
- DATASET_ID: set data induk FHIR store
- 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 berikut ini:
.ANALYTICS_V2
menggunakan lebih banyak ruang di tabel tujuan daripadaANALYTICS
- 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
. Tambahkan 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 APIs 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:
- Tabel ini memiliki nama yang 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
. - Objek 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 berpartisi berfungsi seperti tabel berpartisi unit waktu BigQuery.
Tabel berpartisi memiliki kolom tambahan bernama lastUpdated
, yang merupakan duplikat
dari kolom meta.lastUpdated
yang dihasilkan dari kolom meta.lastUpdated
dalam
sumber daya FHIR. BigQuery menggunakan kolom lastUpdated
untuk mempartisi tabel menurut jam, hari, bulan, atau tahun.
Lihat Memilih partisi harian, per jam, bulanan, atau tahunan untuk mendapatkan 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, dan kemudian membuat penyimpanan FHIR baru dengan partisi tabel yang mengekspor ke set data BigQuery yang sama, Cloud Healthcare API tetap 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 tetap dapat mengekspor ke tabel yang ada dan tidak berpartisi. Namun, partisi hanya akan berlaku pada tabel baru.
Contoh berikut menunjukkan cara mengaktifkan streaming BigQuery ke tabel berpartisi di FHIR store 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 berpartisi di penyimpanan FHIR yang ada, gunakan metode projects.locations.datasets.fhirStores.patch
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: ID Google Cloud project Anda
- LOCATION: lokasi set data
- DATASET_ID: set data induk FHIR store
- 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 berikut ini:
.ANALYTICS_V2
menggunakan lebih banyak ruang di tabel tujuan daripadaANALYTICS
- TIME_PARTITION_TYPE: perincian untuk mempartisi resource FHIR yang diekspor. Gunakan salah satu nilai berikut:
HOUR
: mempartisi data per jamDAY
: mempartisi data menurut hariMONTH
: mempartisi data menurut bulanYEAR
: memartisi 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
. Tambahkan 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 APIs 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:
Mengkueri tabel berpartisi
Untuk mengurangi biaya kueri saat membuat kueri tabel berpartisi, gunakan klausa
WHERE
untuk memfilter menurut unit waktu.
Misalnya, anggaplah 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 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, ikuti 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 tentang 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 dalam set data BigQuery asli mungkin tidak ada di set data baru Anda. Untuk memecahkan masalah ini, lihat Pembuatan tampilan resource FHIR yang tidak ada.
Memecahkan masalah streaming FHIR
Jika terjadi error 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 ke REPEATED
Error ini disebabkan oleh ekstensi yang berulang. Untuk mengatasi error ini, gunakan jenis skema ANALYTICS_V2
. Jika Anda sudah menggunakan ANALYTICS_V2
, Anda mungkin mengalami konflik antara dua ekstensi, atau konflik antara ekstensi dan kolom lain.
Nama kolom dibuat 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 FHIR store, lalu menggunakan REST API untuk membuat resource Pasien.
BigQuery membuat tabel dan tampilan untuk resource Pasien.
Anda mengekspor resource Kunjungan secara massal ke set data BigQuery yang sama dengan langkah sebelumnya.
BigQuery membuat tabel untuk resource Encounter.
Anda menggunakan REST API untuk membuat resource Encounter.
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 Google Cloud project 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 buatkan tampilan
Setelah membuat tampilan, Anda dapat terus melakukan streaming perubahan pada resource FHIR dan tampilan akan diperbarui sesuai dengan perubahan tersebut.
Langkah berikutnya
Untuk melihat tutorial tentang kasus penggunaan untuk melakukan streaming perubahan resource FHIR, lihat Melakukan streaming dan menyinkronkan resource FHIR dengan BigQuery.