私はベイジアン統計モデルからサンプルを取得し、それらをAvroでシリアル化し、S3にアップロードし、Athenaでクエリします。
テーブルの配列のネストを解除するクエリを作成するのに助けが必要です。
CREATE TABLEクエリは次のようになります。
CREATE EXTERNAL TABLE `model_posterior`(
`job_id` bigint,
`model_id` bigint,
`parents` array<struct<`feature_name`:string,`feature_value`:bigint, `is_zid`:boolean>>,
`posterior_samples` struct <`parameter`:string,`is_scaled`:boolean,`samples`:array<double>>)
「posterior_samples」列の「samples」配列は、サンプルが格納される場所です。次のクエリを使用して、 "posterior_samples"構造体のネストを解除しました。
WITH samples AS (
SELECT model_id, parents, sample, sample_index
FROM posterior_db.model_posterior
CROSS JOIN UNNEST(posterior_samples.samples) WITH ORDINALITY AS t (sample, sample_index)
WHERE job_id = 111000020709
)
SELECT * FROM samples
次に、parents列のネストを解除します。この列の各レコードは、構造体の配列です。構造体の配列内の「feature_value」キーの値の配列のみを含む列を作成しようとしています。 (配列が必要な理由は、親配列の長さが> 1になる可能性があるためです)。
つまり、親行の各配列について、同じサイズの配列が必要です。その配列には、元の配列の構造体の「feature_value」キーの値のみが含まれている必要があります。
これを解決する方法に関するアドバイスはありますか?
ありがとう。
ここ で説明されているtransform
関数を使用できます。あなたの質問で言及された構造を持つsamples
という名前のテーブルがあると仮定します。次に、次のようなクエリを記述できます。
SELECT *, transform(parents, parent -> parent.feature_value) as only_ feature_values
FROM samples
注:これは構文的に完全なクエリではありませんが、操作は可能です。
これがお役に立てば幸いです。乾杯:)