Halaman ini menjelaskan cara mengonfigurasi penyimpanan FHIR agar 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:
- Menyinkronkan data di penyimpanan FHIR dengan set data BigQuery 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 yang dipartisi. Untuk mengetahui petunjuknya, lihat Mengalirkan resource FHIR ke tabel yang dipartisi.
Sebelum memulai
Baca 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 streaming BigQuery resource FHIR yang berlaku. Jika Anda tidak menentukan resourceTypes[]
, streaming BigQuery
diterapkan ke 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 sudah 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 berisi penyimpanan FHIR yang ingin Anda edit.
Dalam daftar Datastore, klik penyimpanan FHIR yang ingin diedit.
Di bagian Streaming BigQuery, selesaikan langkah-langkah berikut:
- Klik Add new streaming configuration.
- Di bagian New streaming configuration, klik Browse untuk memilih set data BigQuery tempat Anda ingin melakukan streaming resource FHIR.
- Di menu dropdown Jenis skema, pilih skema output untuk tabel BigQuery. Skema berikut tersedia:
- Analisis. Skema berdasarkan dokumen SQL di FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak akan 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: Skema Analytics V2 menggunakan lebih banyak ruang di tabel tujuan daripada skema Analytics.
- Analisis. Skema berdasarkan dokumen SQL di FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak akan dibuat untuk kolom
- Pilih level kedalaman di penggeser Recursive Structure Depth guna 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 Selesai 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 toko FHIR
- BIGQUERY_DATASET_ID: nama set data BigQuery yang sudah ada tempat Anda melakukan streaming perubahan resource FHIR
- SCHEMA_TYPE: nilai untuk enum
SchemaType
. Gunakan salah satu nilai berikut:ANALYTICS
. Skema berdasarkan dokumen SQL pada FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak akan dibuat untuk kolomParameters.parameter.resource
,Bundle.entry.resource
, danBundle.entry.response.outcome
.ANALYTICS_V2
. Skema yang mirip denganANALYTICS
dengan dukungan tambahan untuk hal berikut:
.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
. Hapus 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 akan terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom wajib lainnya, lalu klik Jalankan.
Anda akan menerima respons JSON yang mirip dengan yang 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 ini memiliki properti berikut:
- Resource 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
. - Ini hanya berisi versi resource saat ini, bukan semua versi historis.
Streaming resource FHIR ke tabel yang dipartisi
Untuk mengekspor resource FHIR ke tabel yang dipartisi BigQuery, tetapkan enum TimePartitioning
di kolom lastUpdatedPartitionConfig
di penyimpanan FHIR Anda.
Tabel yang dipartisi berfungsi seperti tabel berpartisi unit waktu BigQuery.
Tabel yang dipartisi memiliki kolom tambahan bernama lastUpdated
, yang merupakan duplikat
dari 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 mendapatkan rekomendasi tentang cara memilih perincian partisi.
Anda tidak dapat mengonversi tabel BigQuery yang sudah ada yang tidak dipartisi menjadi tabel yang dipartisi. 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 tetap mengekspor data ke tabel Patients
yang tidak dipartisi. Untuk mulai menggunakan tabel yang dipartisi, 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 dipartisi yang ada. Namun, partisi hanya akan berlaku pada tabel baru.
Contoh berikut menunjukkan cara mengaktifkan streaming BigQuery ke tabel yang dipartisi pada penyimpanan FHIR yang sudah 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 pada 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 toko FHIR
- BIGQUERY_DATASET_ID: nama set data BigQuery yang sudah ada tempat Anda melakukan streaming perubahan resource FHIR
- SCHEMA_TYPE: nilai untuk enum
SchemaType
. Gunakan salah satu nilai berikut:ANALYTICS
. Skema berdasarkan dokumen SQL pada FHIR. Karena BigQuery hanya mengizinkan 10.000 kolom per tabel, skema tidak akan dibuat untuk kolomParameters.parameter.resource
,Bundle.entry.resource
, danBundle.entry.response.outcome
.ANALYTICS_V2
. Skema yang mirip denganANALYTICS
dengan dukungan tambahan untuk hal berikut:
.ANALYTICS_V2
menggunakan lebih banyak ruang di tabel tujuan daripadaANALYTICS
- TIME_PARTITION_TYPE: tingkat perincian partisi resource FHIR yang diekspor. Gunakan salah satu nilai berikut:
HOUR
: data partisi berdasarkan jamDAY
: data partisi berdasarkan hariMONTH
: data partisi berdasarkan bulanYEAR
: data partisi berdasarkan tahun
- WRITE_DISPOSITION: nilai untuk enum
WriteDisposition
. Gunakan salah satu nilai berikut:WRITE_EMPTY
. Hanya ekspor data jika tabel BigQuery tujuan kosong.WRITE_TRUNCATE
. Hapus 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 akan 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 yang dipartisi
Untuk mengurangi biaya kueri saat membuat kueri pada tabel yang dipartisi, gunakan klausa WHERE
untuk memfilter berdasarkan 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 metode 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 mode dalam skema Analytics V2
menetapkannya ke REPEATED
. BigQuery tidak mengizinkan perubahan mode kolom dari NULLABLE
menjadi REPEATED
.
Oleh karena itu, kedua jenis skema ini tidak kompatibel.
Untuk memigrasikan jenis skema resource FHIR yang diekspor dari Analytics
ke
Analytics V2
, Anda harus mengekspor resource FHIR ke set data BigQuery
yang 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. Baca artikel mengekspor resource FHIR untuk mendapatkan 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 terkait dengan beberapa atau semua resource FHIR dalam set data BigQuery asli mungkin tidak ada di set data baru. Untuk memecahkan masalah ini, lihat Pembuatan tampilan resource FHIR tidak ada.
Memecahkan masalah streaming FHIR
Jika terjadi error saat perubahan resource dikirim ke BigQuery, error tersebut akan dicatat ke dalam log Cloud Logging. Untuk mengetahui informasi selengkapnya, baca artikel Melihat log error di Cloud Logging.
Tidak dapat mengonversi kolom dari NULLABLE ke REPEATED
Error ini disebabkan oleh ekstensi berulang. Untuk mengatasi error ini,
gunakan jenis skema
ANALYTICS_V2
. Jika sudah menggunakan ANALYTICS_V2
, Anda mungkin mengalami 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 untuk resource Meetup 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 Meetup secara massal ke set data BigQuery yang sama seperti pada langkah sebelumnya.
BigQuery membuat tabel untuk resource Engage.
Anda menggunakan REST API untuk membuat resource Meetup.
Setelah langkah ini, tampilan BigQuery tidak akan dibuat untuk resource Meetup.
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) 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 mengalirkan perubahan pada resource FHIR dan tampilan diperbarui sebagaimana mestinya.
Langkah selanjutnya
Untuk tutorial kasus penggunaan streaming perubahan resource FHIR, lihat Menstreaming dan menyinkronkan resource FHIR dengan BigQuery.