

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
<a name="integrating-athena-query-sql"></a>

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](https://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html) 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](managing-data-stores-create.md)

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](https://hl7.org/fhir/R4/patient.html).
+ **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` dan`family`.

  ```
  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 untuk`text`.

  ```
  SELECT
      maritalstatus.text as MaritalStatus
  FROM Patient
  ```

*Untuk mempelajari lebih lanjut tentang mengakses dan mencari JSON, lihat [Menanyakan JSON di Panduan Pengguna](https://docs.aws.amazon.com//athena/latest/ug/querying-JSON.html) 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](https://docs.aws.amazon.com/athena/latest/ug/functions-operators-reference-section.html) 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](https://docs.aws.amazon.com/athena/latest/ug/data-types.html) 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](https://docs.aws.amazon.com/athena/latest/ug/ddl-sql-reference.html).*

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 tabel`Patient`, Anda dapat melihat elemen yang `extension` dijelaskan sebagai`array<string>`, yang berarti Anda dapat mengakses elemen array dengan menggunakan nilai indeks. Namun, untuk mengakses elemen string, Anda harus menggunakan`json_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](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html) 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 disebut`age`.

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

**Contoh 2**: Penyaringan untuk pasien yang lahir sebelum `2019-01-01` dan sedang`male`.

Kueri SQL menunjukkan cara menggunakan `CAST` fungsi untuk mentransmisikan `birthDate` elemen sebagai tipe`DATE`, dan cara memfilter berdasarkan dua kriteria dalam `WHERE` klausa. Karena elemen dicerna sebagai tipe **string** secara default, kita harus `CAST` itu sebagai tipe`DATE`. Kemudian Anda dapat menggunakan `<` operator untuk membandingkannya dengan tanggal yang berbeda,`2019-01-01`. Dengan menggunakan`AND`, 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 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](integrating-nlp.md)

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

Anda juga dapat mencari dalam elemen string tertentu untuk memfilter kueri Anda lebih lanjut. `modifierextension`Elemen 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 [https://iceberg.apache.org/spec/#schemas-and-data-types](https://iceberg.apache.org/spec/#schemas-and-data-types). 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](integrating-nlp.md)

------