View a markdown version of this page

Mengkueri 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.

Mengkueri HealthLake data dengan SQL

Saat Anda mengimpor data FHIR 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 HealthLake penyimpanan data Anda diubah menjadi tabel, di mana dapat ditanyakan menggunakan Amazon Athena. Tabel dapat ditanyakan secara individual atau sebagai grup menggunakan SQL-based query. 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 Ar ray 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 lebih lanjut 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 memperhitungkan ini. Sebagai contoh, mari kita lihat beberapa elemen dalam tipe Resource: Patient.

  • 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 diperlukan indeks array. 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 Kueri JSON di Panduan Pengguna Athena.

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

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

Untuk mempelajari selengkapnya 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 cara mengakses fitur extension elemen yang ditemukan dalam jenis Patient sumber daya.

Saat penyimpanan HealthLake data Anda diimpor ke Athena, elemen-elemen dari jenis sumber daya diurai secara berbeda. Karena struktur variabel element is, tidak dapat sepenuhnya ditentukan dalam skema. Untuk menangani variabilitas itu, elemen-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. Untuk mengakses elemen string, bagaimanapun, Anda harus menggunakanjson_extract.

Berikut adalah satu entri 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-birthPlace elemen patient-mothersMaidenName dan. 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 jenis sumber daya Pasien di FHIR. Berikut adalah dua contoh untuk pencarian yang memfilter berdasarkan usia.

Karena usia bukan elemen, kami menggunakan birthDate untuk kueri SQL. Untuk melihat bagaimana elemen telah dicerna ke 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 kueri SQL ini, kita menggunakan alat SQL bawaan, 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 sekarangmale.

Query SQL menunjukkan cara menggunakan CAST fungsi untuk menampilkan birthDate elemen sebagai tipeDATE, dan cara memfilter berdasarkan dua kriteria dalam WHERE klausa. Karena elemen dicerna sebagai string tipe secara default, kita harus CAST 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 pencarian 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 jenis sumber daya menyimpan data diagnosis yang terkait dengan masalah yang telah meningkat ke tingkat kekhawatiran. HealthLakePemrosesan bahasa alami medis terintegrasi (NLP) menghasilkan Condition sumber daya baru berdasarkan detail yang ditemukan dalam jenis DocumentReference sumber daya. Ketika sumber daya baru dihasilkan HealthLake , menambahkan tag SYSTEM_GENERATED ke meta elemen. Contoh kueri SQL ini menunjukkan bagaimana Anda dapat mencari tabel kondisi dan mengembalikan hasil di mana SYSTEM_GENERATED hasilnya telah dihapus.

Untuk mempelajari lebih lanjut tentang HealthLake pemrosesan bahasa alami terintegrasi (NLP), lihatPemrosesan 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 mana yang digunakan untuk menghasilkan serangkaian 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 tertentuDocumentReference. 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. HealthLakePemrosesan bahasa alami terintegrasi (NLP) menghasilkan Observation sumber daya baru berdasarkan detail yang ditemukan dalam sumber DocumentReference daya. Contoh kueri SQL ini termasuk WHERE meta.tag[1] is NULL komentar, 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 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 diminum, sedang dikonsumsi, atau akan dikonsumsi pasien di masa depan. HealthLakePemrosesan bahasa alami medis terintegrasi (NLP) menghasilkan MedicationStatement sumber daya baru berdasarkan dokumen yang ditemukan dalam jenis DocumentReference sumber daya. Ketika 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 NLP HealthLake 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 HealthLake pemrosesan bahasa alami terintegrasi (NLP), lihatPemrosesan bahasa alami terintegrasi (NLP) untuk HealthLake.