Saya memiliki banyak tabel di Athena yang berisi struct dengan kolom bersarang yang berbeda. Saya ingin menanyakan dari semua tabel itu sebagai satu tabel (yaitu, tampilan gabungan) dan saya ingin dapat mengembalikan kolom bersarang dari struct hanya jika ada, jika tidak, kembalikan nol.

Contoh:

Table1: 
email
record: {email, first_name, last_name}

Table2:
email
record: {email, dob}

Saya ingin dapat menyatukan itu dan kemudian menanyakan pada kolom email umum. Kemudian lakukan sesuatu seperti record.first_name untuk menghasilkan kolom yang diisi dengan data dari baris Tabel1 dan nilai nol untuk baris Tabel 2.

Saya telah mencoba membungkus blok try() di sekitar atribut, dan itu menghasilkan kesalahan "kolom tidak dapat diselesaikan".

Apakah ini mungkin? Atau apakah saya perlu mendefinisikan kolom struct dalam kueri tampilan/serikat?

0
kid_drew 30 Juni 2020, 22:10

1 menjawab

Jawaban Terbaik

Anda dapat mentransmisikan record sebagai JSON, seperti ini:

SELECT
  email,
  CAST(record AS JSON) AS record
FROM table1

UNION ALL

SELECT
  email,
  CAST(record AS JSON) AS record
FROM table2

Saya yakin Anda juga bisa melakukan cast ke MAP, tapi saya tidak tahu sintaksnya.

1
Theo 1 Juli 2020, 13:41