Memeriksa HealthLake data dengan SQL - AWS HealthLake

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memeriksa HealthLake data dengan SQL

Saat Anda mengimpor data FHIR Anda ke penyimpanan HealthLake data, data JSON FHIR bersarang secara bersamaan mengalami proses ETL dan disimpan dalam format tabel terbuka Apache Iceberg di Amazon S3. Setiap jenis sumber daya FHIR dari penyimpanan HealthLake data Anda diubah menjadi tabel, yang dapat ditanyakan menggunakan Amazon Athena. Tabel dapat ditanyakan secara individual atau sebagai grup menggunakan kueri berbasis SQL. Karena struktur penyimpanan data, data Anda diimpor ke Athena sebagai beberapa tipe data yang berbeda. Untuk mempelajari selengkapnya tentang membuat kueri SQL yang dapat mengakses tipe data ini, lihat Array kueri dengan tipe kompleks dan struktur bersarang di Panduan Pengguna Amazon Athena.

catatan

Semua contoh dalam topik ini menggunakan data fiksi yang dibuat menggunakan Synthea. Untuk mempelajari selengkapnya tentang membuat penyimpanan data yang dimuat sebelumnya dengan data Synthea, lihat. Membuat penyimpanan HealthLake data

Untuk setiap elemen dalam tipe sumber daya, spesifikasi FHIR mendefinisikan kardinalitas. Kardinalitas suatu elemen mendefinisikan batas bawah dan atas berapa kali elemen ini dapat muncul. Saat membuat kueri SQL, Anda harus mempertimbangkan hal ini. Sebagai contoh, mari kita lihat beberapa elemen dalam tipe Sumber Daya: Pasien.

  • Elemen: Nama Spesifikasi FHIR menetapkan kardinalitas sebagai. 0..*

    Elemen ditangkap sebagai array.

    [{ id = null, extension = null, use = official, _use = null, text = null, _text = null, family = Wolf938, _family = null, given = [Noel608], _given = null, prefix = null, _prefix = null, suffix = null, _suffix = null, period = null }]

    Di Athena, untuk melihat bagaimana jenis sumber daya telah dicerna, cari di bawah Tabel dan tampilan. Untuk mengakses elemen dalam array ini, Anda dapat menggunakan notasi titik. Berikut adalah contoh sederhana yang akan mengakses nilai untuk given danfamily.

    SELECT name[1].given as FirstName, name[1].family as LastName FROM Patient
  • Elemen: MaritalStatus Spesifikasi FHIR menetapkan kardinalitas sebagai. 0..1

    Elemen ini ditangkap sebagai JSON.

    { id = null, extension = null, coding = [ { id = null, extension = null, system = http: //terminology.hl7.org/CodeSystem/v3-MaritalStatus, _system = null, version = null, _version = null, code = S, _code = null, display = Never Married, _display = null, userSelected = null, _userSelected = null } ], text = Never Married, _text = null }

    Di Athena, untuk melihat bagaimana jenis sumber daya telah dicerna, cari di bawah Tabel dan tampilan. Untuk mengakses pasangan kunci-nilai di JSON, Anda dapat menggunakan notasi titik. Karena ini bukan array, tidak ada indeks array yang diperlukan. Berikut adalah contoh sederhana yang akan mengakses nilai untuktext.

    SELECT maritalstatus.text as MaritalStatus FROM Patient

Untuk mempelajari lebih lanjut tentang mengakses dan mencari JSON, lihat Menanyakan JSON di Panduan Pengguna Athena.

Pernyataan kueri Athena Data Manipulation Language (DHTML) didasarkan pada Trino. Athena tidak mendukung semua fitur Trino, dan ada perbedaan yang signifikan. Untuk mempelajari selengkapnya, lihat kueri, fungsi, dan operator DHTML di Panduan Pengguna Amazon Athena.

Selain itu, Athena mendukung beberapa tipe data yang mungkin Anda temui saat membuat kueri penyimpanan data Anda HealthLake . Untuk mempelajari lebih lanjut tentang tipe data di Athena, lihat Jenis data di Amazon Athena di Panduan Pengguna Amazon Athena.

Untuk mempelajari lebih lanjut tentang cara kerja kueri SQL di Athena, lihat referensi SQL untuk Amazon Athena di Panduan Pengguna Amazon Athena.

Setiap tab menunjukkan contoh cara mencari pada jenis sumber daya yang ditentukan dan elemen terkait menggunakan Athena.

Element: Extension

Elemen extension ini digunakan untuk membuat bidang kustom di penyimpanan data.

Contoh ini menunjukkan kepada Anda cara mengakses fitur extension elemen yang ditemukan dalam tipe Patient sumber daya.

Saat penyimpanan HealthLake data Anda diimpor ke Athena, elemen tipe sumber daya diuraikan secara berbeda. Karena struktur variabel element is, itu tidak dapat sepenuhnya ditentukan dalam skema. Untuk menangani variabilitas itu, elemen di dalam array dilewatkan sebagai string.

Dalam deskripsi tabelPatient, Anda dapat melihat elemen yang extension dijelaskan sebagaiarray<string>, yang berarti Anda dapat mengakses elemen array dengan menggunakan nilai indeks. Namun, untuk mengakses elemen string, Anda harus menggunakanjson_extract.

Berikut adalah entri tunggal dari extension elemen yang ditemukan di tabel pasien.

[{ "valueString": "Kerry175 Cummerata161", "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName" }, { "valueAddress": { "country": "DE", "city": "Hamburg", "state": "Hamburg" }, "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace" }, { "valueDecimal": 0.0, "url": "http://synthetichealth.github.io/synthea/disability-adjusted-life-years" }, { "valueDecimal": 5.0, "url": "http://synthetichealth.github.io/synthea/quality-adjusted-life-years" } ]

Meskipun ini adalah JSON yang valid, Athena memperlakukannya sebagai string.

Contoh query SQL ini menunjukkan bagaimana Anda dapat membuat tabel yang berisi patient-mothersMaidenName dan patient-birthPlace elemen. Untuk mengakses elemen-elemen ini, Anda perlu menggunakan indeks array yang berbeda dan json_extract.

SELECT extension[1], json_extract(extension[1], '$.valueString') AS MothersMaidenName, extension[2], json_extract(extension[2], '$.valueAddress.city') AS birthPlace FROM patient

Untuk mempelajari lebih lanjut tentang kueri yang melibatkan JSON, lihat Mengekstrak data dari JSON di Panduan Pengguna Amazon Athena.

Element: birthDate (Age)

Usia bukanlah elemen dari tipe sumber daya Pasien di FHIR. Berikut adalah dua contoh pencarian yang memfilter berdasarkan usia.

Karena usia bukan elemen, kita menggunakan birthDate untuk query SQL. Untuk melihat bagaimana elemen telah dicerna ke dalam FHIR, cari nama tabel di bawah Tabel dan tampilan. Anda dapat melihat bahwa itu adalah tipe string.

Contoh 1: Menghitung nilai untuk usia

Dalam contoh query SQL ini, kita menggunakan built-in SQL tool, current_date dan year untuk mengekstrak komponen-komponen tersebut. Kemudian, kami menguranginya untuk mengembalikan usia sebenarnya pasien sebagai kolom yang disebutage.

SELECT (year(current_date) - year(date(birthdate))) as age FROM patient

Contoh 2: Penyaringan untuk pasien yang lahir sebelum 2019-01-01 dan sedangmale.

Kueri SQL menunjukkan cara menggunakan CAST fungsi untuk mentransmisikan birthDate elemen sebagai tipeDATE, dan cara memfilter berdasarkan dua kriteria dalam WHERE klausa. Karena elemen dicerna sebagai tipe string secara default, kita harus CAST itu sebagai tipeDATE. Kemudian Anda dapat menggunakan < operator untuk membandingkannya dengan tanggal yang berbeda,2019-01-01. Dengan menggunakanAND, Anda dapat menambahkan kriteria kedua ke WHERE klausa.

SELECT birthdate FROM patient -- we convert birthdate (varchar) to date > cast that as date too WHERE CAST(birthdate AS DATE) < CAST('2019-01-01' AS DATE) AND gender = 'male'
Resource type: Location

Contoh ini menunjukkan penelusuran lokasi dalam jenis sumber daya Lokasi di mana nama kota adalah Attleboro.

SELECT * FROM Location WHERE address.city='ATTLEBORO' LIMIT 10;
Element: Age
SELECT birthdate FROM patient -- we convert birthdate (varchar) to date > cast that as date too WHERE CAST(birthdate AS DATE) < CAST('2019-01-01' AS DATE) AND gender = 'male'
Resource type: Condition

Kondisi tipe sumber daya menyimpan data diagnosis yang terkait dengan masalah yang telah meningkat ke tingkat kekhawatiran. HealthLakeIntegrated Medical Natural Language Processing (NLP) menghasilkan Condition sumber daya baru berdasarkan rincian yang ditemukan dalam jenis DocumentReference sumber daya. Saat sumber daya baru dihasilkan, HealthLake tambahkan tag SYSTEM_GENERATED ke meta elemen. Contoh kueri SQL ini menunjukkan bagaimana Anda dapat mencari tabel kondisi dan mengembalikan hasil di mana SYSTEM_GENERATED hasil telah dihapus.

Untuk mempelajari lebih lanjut tentang Integrated HealthLake Natural Language Processing (NLP), lihat. Pemrosesan bahasa alami terintegrasi (NLP) untuk HealthLake

SELECT * FROM condition WHERE meta.tag[1] is NULL

Anda juga dapat mencari dalam elemen string tertentu untuk memfilter kueri Anda lebih lanjut. modifierextensionElemen berisi rincian tentang DocumentReference sumber daya yang digunakan untuk menghasilkan satu set kondisi. Sekali lagi, Anda harus menggunakan json_extract untuk mengakses elemen JSON bersarang yang dibawa ke Athena sebagai string.

Contoh kueri SQL ini menunjukkan bagaimana Anda dapat mencari semua Condition yang telah dihasilkan berdasarkan spesifik. DocumentReference Gunakan CAST untuk mengatur elemen JSON sebagai string sehingga Anda dapat menggunakan LIKE untuk membandingkan.

SELECT meta.tag[1].display as SystemGenerated, json_extract(modifierextension[4], '$.valueReference.reference') as DocumentReference FROM condition WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND CAST(json_extract(modifierextension[4], '$.valueReference.reference') as VARCHAR) LIKE '%DocumentReference/67aa0278-8111-40d0-8adc-43055eb9d18d%'
Resource type: Observation

Jenis sumber daya, Observasi menyimpan pengukuran dan pernyataan sederhana yang dibuat tentang pasien, perangkat, atau subjek lainnya. HealthLakeIntegrated Natural Language Processing (NLP) menghasilkan Observation sumber daya baru berdasarkan detail yang ditemukan dalam sumber daya. DocumentReference Contoh kueri SQL ini termasuk WHERE meta.tag[1] is NULL dikomentari, yang berarti bahwa SYSTEM_GENERATED hasilnya disertakan.

SELECT valueCodeableConcept.coding[1].code FROM Observation WHERE valueCodeableConcept.coding[1].code = '266919005' -- WHERE meta.tag[1] is NULL

Kolom ini diimpor sebagai file struct. Oleh karena itu, Anda dapat mengakses elemen di dalamnya menggunakan notasi titik.

Resource type: MedicationStatement

MedicationStatement adalah jenis sumber daya FHIR yang dapat Anda gunakan untuk menyimpan detail tentang obat yang telah dikonsumsi, dikonsumsi, atau akan dikonsumsi pasien di masa depan. HealthLakeIntegrated Medical Natural Language Processing (NLP) menghasilkan MedicationStatement sumber daya baru berdasarkan dokumen yang ditemukan dalam jenis DocumentReference sumber daya. Saat sumber daya baru dihasilkan, HealthLake tambahkan tag SYSTEM_GENERATED ke meta elemen. Contoh kueri SQL ini menunjukkan cara membuat kueri yang memfilter berdasarkan satu pasien dengan menggunakan pengenal mereka dan menemukan sumber daya yang telah ditambahkan oleh HealthLake NLP terintegrasi.

SELECT * FROM medicationstatement WHERE meta.tag[1].display = 'SYSTEM_GENERATED' AND subject.reference = 'Patient/0679b7b7-937d-488a-b48d-6315b8e7003b';

Untuk mempelajari lebih lanjut tentang Integrated HealthLake Natural Language Processing (NLP), lihat. Pemrosesan bahasa alami terintegrasi (NLP) untuk HealthLake